新浪博客

十进制两位数的乘法程序   汇编

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


我的更多文章

下载客户端阅读体验更佳

APP专享