十进制两位数的乘法程序 汇编
2008-01-01 18:50阅读:
;两位书以内的十进制乘法程序
.MODEL SMALL
.STACK
.DATA
STR DB 'PLEASE INPUT:','$'
TAB DB 2 DUP(?)
;存放乘数和被乘数
.CODE
.STARTUP
CALL STRING
;显示提示
MOV SI,OFFSET TAB
;初始化
CALL ASCTOBW
;输入第一个数
MOV [SI],BL
;存放数字
CALL ASCTOBW
;输入第二个数
MOV [SI+1],BL
;存放第二个数字
CALL MULT
;两数相乘
CALL BIN_TO_ASCII
;调整结果及输出
.EXIT
;=========显示提示=====
STRING PROC NEAR
MOV DX,OFFSET STR
MOV AH,09H
INT 21H
RET
STRING ENDP
;=========以下输入过程=====
ASCTOBW PROC NEAR
SUB BX,BX
MOV CL,10
L1:MOV AH,1
INT 21H
CMP AL,2AH
JE EXIT
;判断是否为'*'
CMP AL,3DH
JE EXIT
;判断是否为'='
SUB AL,30H
;将数字转换成ASC码
XCHG AL,BL
MUL CL
ADD AL,BL
XCHG AL,BL
JMP L1
EXIT:RET
ASCTOBW ENDP
;===========相乘=========
MULT PROC NEAR
SUB AH,AH
MOV AL,[SI]
;取第一个乘数
MOV BL,AL
MOV AL,[SI+1]
;取第二个乘数
MUL BL
;两数相乘
RET
MULT ENDP
;=========以下输出结果=====
BIN_TO_ASCII PROC NEAR
CWD
;字扩展
MOV BX , 1000
;除以1000,商在AL中
DIV BX
ADD AL , 30H
CMP AL, 30H
JE L3
;判断最高为是否为0
CALL OUT_RESULT
;输出千位数字
L3:
MOV AX , DX
;将余数置入AX内,以便当作被除数
MOV BL , 100
;除以100,商在AL中
DIV BL
ADD AL , 30H
CALL OUT_RESULT
;输出百位数字
MOV AL , AH
CBW
MOV BL , 10
;除以10,商在AL中
DIV BL
ADD AL , 30H
CALL OUT_RESULT
;输出十位数字
ADD AH , 30H
MOV AL,AH
;将商移入AL中
CALL OUT_RESULT
;输出个位数字
RET
BIN_TO_ASCII ENDP
OUT_RESULT PROC
PUSH AX
; 入栈
PUSH DX
MOV DL,AL
;显示商
MOV AH,2
INT 21H
POP DX
;出栈
POP AX
RET
OUT_RESULT ENDP
END