📄 bcd.asm
字号:
;FILENAME: BCD.ASM
;内容:单字节BCD相乘
DISPL MACRO
ADD DL,30H
MOV AH,2
INT 21H
ENDM
CRLF MACRO
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 01001000B ;48H
DATA2 DB 01110101B ;75H
INFO1 DB 0AH,0DH,'THE INPUT IS:$'
INFO2 DB 0AH,0DH,'THE RESULT IS:$'
RESULT DW ?
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 2O DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA
START: MOV AX, DATA
MOV DS, AX
LEA DX,INFO1
MOV AH,9
INT 21H
CRLF
MOV DI,OFFSET RESULT ;DI指向结果区
MOV SI,OFFSET DATA1 ;SI指向乘数1
MOV AH, [SI]
MOV CL,4
SHR AH,CL ;显示乘数1的高位字节
MOV DL,AH
DISPL
MOV AL, [SI]
MOV BL,AL ;显示乘数1的低位字节
AND AL,00001111B
MOV DL,AL
DISPL
CRLF
MOV SI,OFFSET DATA2 ;指向乘数2
MOV AH, [SI]
MOV CL,4
SHR AH,CL
MOV DL,AH
DISPL
MOV AL, [SI]
AND AL,00001111B
MOV DL, AL
DISPL
CRLF
LEA DX,INFO2
MOV AH,9
INT 21H
CRLF
XOR DX,DX ;DX清0
S1: CMP BL,0
JZ S2 ;乘数1减为07
CLC
MOV AL, [SI]
ADC AL,DL ;乘数2加部分积低位
DAA ;组合BCD加法调整
MOV DL,AL ;结果送部分积低位
MOV AL,00H
ADC AL,DH ;往部分积高位送进位
DAA ;调整
MOV DH,AL ;结果送部分积高位
MOV AL,BL
DEC AL ;结果送BL
DAS ;调整
MOV BL,AL ;乘数1值减1
JMP S1
S2: MOV RESULT, DX ;结果送存储器
MOV SI,DX
MOV CL, 4
SHR DH,CL
MOV DL, DH
DISPL ;显示结果最高位
MOV DX,SI
AND DH,00001111B
MOV DL,DH
DISPL
MOV DX,SI
MOV CL,4
SHR DL,CL
DISPL
MOV DX,SI
AND DL,00001111B
DISPL ;显示结果最低位
CRLF
S3 : MOV AX,4C00H
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -