마이크로컴퓨터 인터페이스 기술과 어셈블리 언어 탑승 실험 보고서어셈블리 초보(intel8086)

2428 단어 Assembler_8086
본문은 블로그에서 나온 것이다.csdn.net/svitter
실험 환경: 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

 

좋은 웹페이지 즐겨찾기