汇编语言实现从键盘输入两个4位十进制数 ,将它们的和存SUM 单元,并输出对应的十进制数 。
汇编语言实现从键盘输入两个4位十进制数 ,将它们的和存SUM 单元,并输出对应的十六进制数 。
用子程序结构完成课程设计
数据段定义——程序初始化——输入——累加——输出——结束
十进制和十六进制的处理存在区别,根据需要进行搭配
DATA SEGMENT
A DB 5 ;为调用10号功能准备的数据区A
DB ?
DB 5 DUP(?)
B DB 5 ;为调用10号功能准备的数据区B
DB ?
DB 5 DUP(?)
SUM DW ? ;数值结果数据区
TEN DW 10 ;固定值10,用于加倍
DATA ENDS
DATA SEGMENT
A DB 5
DB ?
DB 5 DUP(?)
B DB 5
DB ?
DB 5 DUP(?)
SUM DW ? ;数值结果数据区
TEN DW 10 ;固定值10,用于加倍
RESULTS DB 5 DUP('0') ;字符结果数据区
DB '$'
DIVISORS DW 10000,1000,100,10,1 ;除数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MAIN: CALL INPUT ;主程序
MOV SI,OFFSET A
CALL PROCDP
MOV SI,OFFSET B
CALL PROCDP
CALL OUTPUT
MOV AH,4CH
INT 21H
INPUT PROC ;输入两个数,回车换行表示结束
MOV DX,OFFSET A ;10号功能调用输入
MOV AH,10
INT 21H
MOV DL,0AH ;换行
MOV AH,2
INT 21H
MOV DX,OFFSET B ;10号功能调用输入
MOV AH,10
INT 21H
RET
INPUT ENDP
PROCDP PROC ;输入的数转为十进制,并按位直接加到sum,该程序调用两次
ADD SI,2 ;跳过数据区头两个用于指明字符个数的字节
MOV BX,4 ;4位十进制数,从个位开始处理
MOV CX,1 ;倍数,用于按位累加
LOP: DEC BX
MOV AL,[SI][BX] ;基址变址方式寻址
AND AX,00FFH ;AX高位清零
SUB AL,30H ;从ASCII码转为十进制数
MUL CX
ADD SUM,AX ;累加
MOV AX,CX ;CX的值乘10,用于按位加倍
MUL TEN
MOV CX,AX
CMP BX,0 ;如果BX=0,说明已经处理完
JNE LOP
RET
PROCDP ENDP
累加过程是把A、B的值分别按位加到SUM中,并不是俩个值独立转换后再相加
OUTPUT PROC ;转化成十六进制输出
MOV DL,0AH
MOV AH,2
INT 21H
MOV BX,SUM
MOV CH,4
MOV CL,4
T1: ROL BX,CL ;循环左移4位
MOV AL,BL ;屏蔽高4位
AND AL,0FH
ADD AL,30H ;转换为ASCII码
CMP AL,3AH ;ASCII码与3AH比较,如果大于3AH说明已经到了A~F的范围
JL T2
ADD AL,07H
T2: MOV DL,AL ;不大于3AH说明在0~9范围
MOV AH,2
INT 21H
DEC CH
JNZ T1
MOV DL,48H ;显示字符H,标注结果是十六进制
MOV AH,2
INT 21H
RET
OUTPUT ENDP
OUTPUT PROC NEAR
MOV SI,OFFSET DIVISORS
MOV DI,OFFSET RESULTS
MOV AX,SUM ;SUM存储着要显示的字符
MOV CX,5
L1: MOV DX,0
DIV WORD PTR [SI] ;除法指令的被除数是隐含操作数,此处为dx:ax,商ax,余数dx
ADD AL,30H
MOV BYTE PTR [DI],AL ;转换成ASCII码后存入结果存储区
INC DI
MOV AX,DX
ADD SI,2
LOOP L1
MOV CX,5
MOV DI,OFFSET RESULTS ;重新回到results的开始
L2: CMP BYTE PTR [DI],'0' ;不输出前面的0字符,跳过results中的0位
JNE L3
INC DI
LOOP L2
L3: MOV DL,0AH ;换行
MOV AH,2
INT 21H
MOV DX,DI ;9号功能调用输出
MOV AH,9
INT 21H
RET
OUTPUT ENDP
十进制输出引用自:
https://blog.csdn.net/pfboy/article/details/1549942
CODE ENDS
END BEGIN