微机原理课后习题解答 下载本文

解:参考程序: DATA MSG1 MSG2 DATA

SEGMENT

DB 'Input binary number(ESC to exit):','$' DB 0AH,0DH,'Input error!',0AH,0DH,'$' ENDS

;定义输出一个字符的宏

OUTPUT MACRO ASC MOV MOV INT ENDM CODE

SEGMENT DL, ASC AH, 2 21H

ASSUME CS:CODE, DS:DATA MAIN PUSH MOV PUSH MOV MOV

PROC DS AX, 0 AX AX, DATA DS, AX

DX, MSG1 FAR

AGAIN: LEA MOV INT MOV MOV L: INT SHL CMP

AH, 9 21H

;提示输入信息 ;输入8位二进制数

CX, 8 BL, 0 MOV 21H BL, 1 AL, 1BH

AH, 1

;ESC键退出

JZ CMP JZ CMP JNZ INC

DONE AL, '0' NEXT AL, '1' ERROR BL

L

;输入“1” ;输入其他则出错 ;输入“0”

NEXT: LOOP OUTPUT 0AH OUTPUT 0DH PUSH MOV SHR CALL POP AND CALL

BX CL, 4 BL, CL TRAN BX BL, 0FH TRAN

;显示高4位对应的16进制数

;显示低4位对应的16进制数

OUTPUT 'H' OUTPUT 0AH OUTPUT 0DH JMP

AGAIN

DX, MSG2

ERROR: LEA MOV INT JMP

AH, 9 21H AGAIN

DONE: RET MAIN TRAN

ENDP PROC

FAR

CMP JB ADD

BL, 0AH BELOW BL, 7

BL, 30H

BELOW: ADD OUTPUT BL RET TRAN CODE END

ENDP ENDS MAIN

6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。 解:参考程序: DATA MSG1 MSG2 MSG3 DATA

SEGMENT

DB 'Input the first number(ESC to exit):','$' DB 'Input the second number(ESC to exit):','$' DB 0AH,0DH,'Input error!Input again:','$' ENDS

;定义输出一个字符的宏

OUTPUT MACRO ASC MOV MOV INT ENDM CODE

SEGMENT DL, ASC AH, 2 21H

ASSUME CS:CODE, DS:DATA MAIN: MOV MOV

DS, AX

AX, DATA

AGAIN: LEA MOV INT CALL PUSH

AH, 9 21H

DX, MSG1

;提示输入第一个数 ;输入过程

INPUT BX

OUTPUT 0AH OUTPUT 0DH LEA MOV INT CALL

DX, MSG2 AH, 9 21H

;提示输入第二个数 ;输入过程

INPUT

OUTPUT 0AH OUTPUT 0DH POP ADD DAA MOV ADC MOV DAA MOV MOV MOV JNC

AX

;实现两个4位组合BCD码相加 ;低8位相加 ;校正 ;保存至CL ;高8位相加 ;移至AL ;校正

AL, BL

CL, AL AH, BH AL, AH

AH, AL AL, CL BX, AX NEXT

;如果相加结果大于9999,则显示进位“1” BX

;最后结果放在BX中

OUTPUT '1' NEXT: PUSH MOV

CL, 4