마이크로컴퓨터 인터페이스 기술과 어셈블리 언어 탑승 실험 보고서어셈블리 초보(intel8086)
2428 단어 Assembler_8086
실험 환경: intel x386
하나.요구 사항: 3000H 셀을 00H-0FH로 시작
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
XOR AX, AX
MOV DS, AX
MOV SI, 3000H
MOV CX, 16
AA1: MOV [SI], AL
INC SI
INC AL
LOOP AA1 ;CX == 0? NEXT():AA1
MOV AX, 4C00H ;AH = 4C STOP CUR, RETURN
INT 21H
CODE ENDS
END START
둘.요구사항: 3600H에서 시작하는 8비트에 3500H 이후 8비트 위치 입력
두 가지 해법이 있어요.
1.
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
XOR AX, AX ;SET AX = 0000H
MOV DS, AX
CLD ;CLOSE INTERUPTE
MOV SI, 3500H
MOV BX, 3600H
MOV CX, 8 ;FOR LOOP
AA1: MOV AL, [SI] ;REP MOVSB ;DS:[SI] -> ES:[DI], SI+1, DI+1
MOV [BX], AL
INC SI
INC BX
LOOP AA1 ;CX == 0 ? NEXT() : AA1
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
2.
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
XOR AX, AX ;SET AX = 0000H
MOV DS, AX
CLD ;CLOSE INTERUPTE
MOV ES, AX
MOV SI, 3500H
MOV DI, 3600H
MOV CX, 8 ;FOR LOOP
REP MOVSB ;DS:[SI] -> ES:[DI], SI+1, DI+1
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
셋.요구 사항: 데이터 세그먼트의str1을str2에 부여
DATA SEGMENT
STR1 DB 'ABCDEFGHIJKLN'
COUNT EQU $-STR1 ;$ count , str1 BUF
STR2 DB COUNT DUP(0)
DATA ENDS
SSTACK SEGMENT STACK ;!!--DEF--! , SSTACK -> SS
DB 200H DUP(0)
SSTACK ENDS
CODE SEGMENT
ASSUME DS:DATA, ES:DATA, SS:SSTACK, CS:CODE
;DATA(DATA SEGMENT)
;ES(EXTRA DATA SEGMENT)
;SSTACK -> SS(STACK SEGMENT)
;CODE -> CS(CODE SEGMENT)
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA SI, STR1
LEA DI, STR2
MOV CX, COUNT
CLD ;Direction Flag to 0 (0 -> DF)
LP1: MOVSB ;DS:[SI] -> ES:[DI], SI++, DI++
DEC CX ;
JNZ LP1 ;THREE SENTENCE == REP MOVESB, CX FOR COUNT
MOV AH, 4CH ;MOV AX, 4C00H
INT 21H
CODE ENDS
END START
둘.요구사항: 3600H에서 시작하는 8비트에 3500H 이후 8비트 위치 입력
넷.요구사항: DOS 인터페이스를 사용하여 문자열 출력
DATA SEGMENT
MESSAGE DB 'please input your name!' , 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
START: MOV AH, 09H
MOV DX, SEG MESSAGE
MOV DS, DX
MOV DX, OFFSET MESSAGE
INT 21H
...
CODE ENDS