解:参考程序: 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