📄 asm.asm
字号:
DATA SEGMENT ;定义数据段
DATA1 DB 32H,39H,30H,35H,34H ;用ASCII码表示被乘数45092
DATA2 DB 34H ;DB伪指令,用来定义字节类型的伪变量,乘数4
MES1 DB '*','$'
MES2 DB '=','$'
RESULT DB 6 DUP(00H)
DATA ENDS
STACK SEGMENT ;定义堆栈段
STA DB 20 DUP(?) ;为变量STA分配20个字节的空间
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS: CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
LEA SI,DATA1 ;被乘数地址送SI
MOV BX,05H
L1: MOV AH,02H ;DOS功能号02H送AH
MOV DL,[SI+BX-1] ;被乘数送DL
INT 21H ; DOS功能号调用(显示器输出)
DEC BX
JNZ L1
MOV AH,09H ; DOS功能号09H送AH
LEA DX,MES1 ;MES1的偏移地址送DX
INT 21H ; DOS功能号调用(显示字符串)
LEA SI,DATA2 ;乘数地址送SI
MOV AH,02H
MOV DL,[SI] ;乘数送DL
INT 21H ;显示乘数
MOV AH,09H
LEA DX,MES2 ; MES2的偏移地址送DX
INT 21H
MOV SI,OFFSET DATA2 ;显示算式
MOV BL,[SI] ;乘数送BL
AND BL,00001111B ;屏蔽乘数高4位;ASCII码转换为十六进制
MOV SI,OFFSET DATA1;;被乘数偏移地址送SI
MOV DI,OFFSET RESULT ;运算结果偏移地址送DI
MOV CX,05
LOOP1: MOV AL,[SI] ;被乘数送AL
AND AL,00001111B;屏蔽被乘数高4位;ASCII码转换为十六进制
INC SI
MUL BL ;AL * BL送AX
AAM ;乘法十进制调整
ADD AL,[DI] ;结果低位与前次计算的进位相加
AAA ;非压缩BCD码加法十进制调整指令
MOV [DI],AL ;结果AL 送DI
INC DI
MOV [DI],AH ;结果AH 送DI+1
LOOP LOOP1
MOV CX,06
MOV SI, DI
DISPL:MOV AH,02H
MOV DL,[SI]
ADD DL,30H
INT 21H
DEC SI
LOOP DISPL ;显示运算结果
MOV AX,4C00H ;返回DOS
INT 21H ;结束
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -