代码如下:
;========================================================
; 文件名: comprehensive1.asm
; 功能描述: 完成2个十进制数字的加法和乘法, 使用打印字符串功能提供文字列表提示, ;进行加法和乘法的选择,两个一位十进制数可以从键盘中读取,计算结果可以通过屏幕打印输出,
; 执行一次运算后,重新在屏幕上显示功能菜单,以便重新选择开始一次新的运算
;========================================================
; 实验目的: 本实验目的在于加深对输入输出、循环、进制之间转换、运算的理解和掌握
;========================================================
DATA SEGMENT
MSG2 DB '1--plus',0DH,0AH,'$'
MSG3 DB '2--multiply',0DH,0AH,'$'
MSG4 DB 'please input 2 numbers,depart by space',0DH,0AH,'$'
num1 DB 0
num2 DB 0
result DB 0,0
DATA ENDS
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
start: MOV AX,DATA
MOV DS,AX
MOV AH,09H
LEA DX,MSG2
INT 21H
MOV AH,09H
LEA DX,MSG3
INT 21H
CHOICE: MOV AH,01H
INT 21H
SUB AL,'0'
CMP AL,1
JE plus
CMP AL,2
JE multiply
JMP CHOICE
plus: MOV AH,9
LEA DX,MSG4
INT 21h
MOV AH,1
INT 21h
SUB AL,'0'
MOV num1,AL
MOV AH,1;吃空格
INT 21h
MOV AH,1
INT 21h
SUB AL,'0'
MOV num2,AL
MOV DL,0DH
MOV AH,2
INT 21h
MOV DL,0AH
MOV AH,2
INT 21h
MOV AL,num1
ADD AL,num2
MOV result,AL
MOV CL,10
XOR AH,AH
DIV CL;商(高位)送AL,余数(低位)送AH
MOV result,AH
MOV BL,AL;高位
AND BL,0Fh
MOV DL,BL
CMP DL,0AH
JBE A2
ADD DL,07H
A2: ADD DL,'0'
MOV AH,2
INT 21h
MOV BL,result;低位
AND BL,0Fh
MOV DL,BL
CMP DL,0AH
JBE A1
ADD DL,07H
A1: ADD DL,'0'
MOV AH,2
INT 21h
MOV DL,0DH
MOV AH,2
INT 21h
MOV DL,0AH
MOV AH,2
INT 21h
JMP start
multiply:MOV AH,9
LEA DX,msg4
INT 21h
MOV AH,1
INT 21h
SUB AL,'0'
MOV num1,AL;
AND num1,0Fh;取低位
MOV AH,1;吃空格
INT 21h
MOV AH,1
INT 21h
SUB AL,'0'
MOV num2,AL
AND num2,0Fh;取低位
MOV DL,0DH
MOV AH,2
INT 21h
MOV DL,0AH
MOV AH,2
INT 21h
MOV AL,num1
MUL num2
MOV result,AL
;出现了一个新的问题,结果al和result仍然是16进制储存的
;对result比如18即12H,除以10H即16,结果为1,将1打印出来,再18对16即10H ;取余,得2打印出来
MOV CL,10
DIV CL;商(高位)送al,余数(低位)送AH
MOV result,AH
MOV BL,AL
AND BL,0Fh
MOV DL,BL
CMP DL,0AH
JBE A4
ADD DL,07H
A4: ADD DL,'0'
MOV AH,2
INT 21h
;注意一个问题,上面语句有mov ah,2改变了ah的值,需要先保存除法运算的结果ah
MOV BL,result
AND BL,0Fh
MOV DL,BL
CMP DL,0AH
JBE A3
ADD DL,07H
A3: ADD DL,'0'
MOV AH,2
INT 21h
MOV DL,0DH
MOV AH,2
INT 21h
MOV DL,0AH
MOV AH,2
INT 21h
JMP start
CODE ENDS
END START
1.1 实验要求分析
基本功能:完成2个一位十进制数字的加法和乘法
使用打印字符串功能提供文字列表提示,进行加法和乘法的计算功能选择
两个一位十进制数字通过键盘输入获取
计算结果通过屏幕打印输出
执行完一次运算后,重新在屏幕显示功能菜单,以便重新选择开始一次新的运算。
核心算法:通过功能号为09H的INT 21H指令将功能菜单打印输出。利用功能号为01H的INT 21H指令,从键盘获取两个十进制数,由于获取的十进制是ASCII形式存储的,因此减去30H即‘0’的ASCII值转换为十进制,再对所得十进制数进行加法或乘法运算,所得的结果需要分为高位和低位打印依次打印输出,因此需要分离高位和低位,通过除法指令DIV即除以10分别得到高位和低位,由于得到是十进制数,需要分别加上30H再转化为ASCII码才能打印输出显示在屏幕上,利用功能号为02H的INT 21H 指令回显结果。最后使用无条件跳转指令JMP跳转返回到程序start开始运行处,进行下一次功能菜单打印输出和选择加法或乘法运算。