MOV AX,XH ADC AX,YH PUSH BX
CALL SHWORD
POP BX
MOV AX,BX CALL SHWORD
START0: MOV AH,06H MOV DL,0FFH INT 21H
JE START0 MOV AX,4C00H INT 21H
SHWORD PROC NEAR MOV BL,AH CALL SHOW MOV BL,AL CALL SHOW RET ENDP
SHOW PROC NEAR PUSH AX PUSH DX MOV AL,BL
AND AL,0F0H SHR AL,4
CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,BL AND AL,0FH CMP AL,0AH
JB C3
;判断是否有键按下;若没有转START0 ;有键返回DOS
;取高4位 ;是否是A以上的数
;显示字符
;取低4位
- 26 -
ADD AL,07H
;显示字符r
C3: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H
POP DX POP AX RET
ENDP
CODE ENDS
END START
2 .十进制数的BCD 码减法运算
实验源文件名DVA4_2.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下:
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
DATA SEGMENT
MES DB 'The result is:$' X DW 0400H Y DW 0102H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,00H SAHF
MOV SI,OFFSET X MOV AL,[SI] SBB AL,[SI+02H] DAS PUSHF
AND AL,0FH POPF
- 27 -
MOV BL,AL
INC SI
MOV AL,[SI] SBB AL,[SI+02H] DAS PUSHF
AND AL,0FH POPF
MOV BH,AL
MOV DX,OFFSET MES MOV AH,09H INT 21H MOV AX,BX CALL SHWORD
START0: MOV AH,06H MOV DL,0FFH INT 21H
JE START0 MOV AX,4C00H INT 21H
SHWORD PROC NEAR MOV BL,AH CALL SHOW MOV BL,AL CALL SHOW RET ENDP
SHOW PROC NEAR PUSH AX PUSH DX MOV AL,BL AND AL,0F0H SHR AL,4 CMP AL,0AH JB C2
ADD AL,07H
START0 DOS
4位 A以上的数
- 28 -
;判断是否有键按下
;若没有转;有键返回;取高;是否是
C2: ADD AL,30H
MOV DL,AL MOV AH,02H INT 21H MOV AL,BL AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H
;显示字符
;取低4位
C3: ADD AL,30H
MOV DL,AL ;显示字符 MOV AH,02H INT 21H POP DX POP AX RET
ENDP CODE ENDS END START
3 .乘法运算实验
源文件名DVA4_3.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下:
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
DATA SEGMENT
MES1 DB 'The result is:$' ERRMES DB 'Error exist!$' DATA1 DB 00H,02H,03H,04H,05H DATA2 DB 03H
RESULT DB 06H DUP(0) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
- 29 -
MOV MOV MOV AND CMP JNC MOV MOV MOV
DS,AX
SI,OFFSET DATA2 BL,[SI] BL,0FH BL,09H
ERROR
SI,OFFSET DATA1 DI,OFFSET RESULT CX,0005H
A1: MOV AL,[SI+04H] AND AL,0FH CMP AL,09H JNC ERROR DEC SI MUL BL AAM
ADD AL,[DI+05H] AAA
MOV [DI+05H],AL DEC DI
MOV [DI+05H],AH LOOP A1
MOV DX,OFFSET MES1 MOV AH,09H INT 21H MOV CX,06H
MOV SI,OFFSET RESULT A2: CALL SHOW MOV DL,20H MOV AH,02H INT 21H INC SI LOOP A2
START0: MOV AH,06H ;判断是否有键按下 MOV DL,0FFH INT 21
JE START0 ;若没有转START0 MOV AX,4C00H ;有键返回DOS
- 30 -