📄 mul.asm
字号:
STACK SEGMENT PARA STACK
S_AREA DW 100H DUP(?)
S_TOP EQU $-S_AREA
STACK ENDS
DATA SEGMENT PARA
VALUE DW 0H
RES DB 4H DUP(?)
SH DB 4H DUP(?)
ANS DB 10H DUP(?)
NEW_LINE DB 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT PARA
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,S_TOP
MOV AH,01H
INT 21H
XOR AH,AH
AND AL,0FH
PUSH AX ;输入a最高位
MOV AH,01H
INT 21H
XOR AH,AH
AND AL,0FH
MOV BX,AX
MOV CX,10
POP AX
MUL CX
ADD AX,BX
PUSH AX ;输入a第二位
MOV AH,01H
INT 21H
XOR AH,AH
AND AL,0FH
MOV BX,AX
MOV CX,10
POP AX
MUL CX
ADD AX,BX
PUSH AX ;输入a第三位
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
MOV AH,01H
INT 21H
XOR AH,AH
AND AL,0FH
PUSH AX ;输入b最高位
MOV AH,01H
INT 21H
XOR AH,AH
AND AL,0FH
MOV BX,AX
MOV CX,10
POP AX
MUL CX
ADD AX,BX
PUSH AX ;输入b第二位
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
POP BX ;b出栈
POP AX ;a出栈
XOR DX,DX
MUL BX ;a*b
MOV DI,OFFSET RES
MOV SI,OFFSET SH
MOV WORD PTR [DI]+2,DX
MOV WORD PTR [DI],AX;1234 5678 HI~LO 12 34 56 78
MOV VALUE,10
lp2: XCHG SI,DI;交换商和被除数地址
XOR AX,AX
MOV CX,4
MOV BX,3
lp1: MOV AL,BYTE PTR [SI][BX];将被除数按字节取到AL中
XOR DX,DX
DIV VALUE
MOV BYTE PTR [DI][BX],AL;把商按字节保存
MOV AH,DL;将余数移到AH中,即下次除法计算的高位
DEC BX
LOOP lp1
PUSH DX;除10余数进栈
CMP AL,0
JA lp2
lp3: POP DX;出栈打印
OR DL,30H
MOV AH,02H
INT 21H
CMP SP,0200H
JB lp3
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -