学习微机已经不久了,汇编却还很差劲,就借写博客的机会把自己觉得重要的知识点记录下来吧!
这是一个五位十进制数乘法计算并以十进制数的形式打印的汇编程序,注释十分详尽!
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
MES1 DB 'The result is: $'
MES2 DB 'ERROR EXIT!$'
DATA1 DB 05H,04H,03H,02H,05H;被乘数为52345,非压缩十进制BCD码存放乘数
DATA2 DB 03H ;被乘数为3
RESULT DB 06H DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
;把被乘数3存放到BL***********************************
MOV SI,OFFSET DATA2
MOV BL,[SI]
AND BL,0FH
;检查被乘数是否为BCD数,否则跳转报错*****************
CMP BL,09H
JNC ERROR
;****************************************************
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT ;RESULT中倒着存放乘积
MOV CX,0005H ;LOOP循环五次
;****************************************************
A1: MOV AL,[SI] ;从低位开始乘
AND AL,0FH ;取第四位,因为已经检验过是非压缩十进制数了
;所以没多大用
;检查被乘数是否为BCD数,否则跳转报错*****************
CMP AL,09H
JNC ERROR ;AL减9,不产生借位,则不是BCD数,报错,CMP
;只改变标志位
;****************************************************
MUL BL ;乘3,结果存入AX中,所以不需要清AH
AAM ;将结果调整为非压缩的十进制数
ADD AL,[DI] ;将低位进位加上
AAA ;将结果调整为非压缩的十进制数
MOV [DI],AL ;存放乘积
INC DI
MOV [DI],AH ;将低位的进位存入下个RESULT存储单元
INC SI
LOOP A1 ;循环将五位被乘数乘3,产生的RESULT空间
;内产生6字节数,最后一字节用来存放最高位
;的进位,RESULT中的每一字节存放非压缩十进制数
;****************************************************
MOV DX,OFFSET MES1 ;调用9号中断显示字符串
MOV AH,09H
INT 21H
;调用子程序SHOW显示乘积
MOV CX,06H ;准备循环显示6位十进制乘积
MOV SI,OFFSET RESULT
A2: CALL SHOW
DEC SI
LOOP A2
CALL WAIT1 ;等待按键后返回DOS
;显示一个非压缩十进制数(一字节)********************************************
SHOW PROC NEAR ;输入参数为SI,即结果的存放首地址
MOV AL,DS:[SI+5] ;由于乘积六位为倒着存放,所以显示也为倒着显示
AND AL,0FH
;CMP AL,0AH ;因为已经经过AAA,AAM调整,非压缩十进制数不会出现大于9的情况
;JB C3
;ADD AL,07H
C3: ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
RET
SHOW ENDP
;等待部分********************************************************************
WAIT1 PROC NEAR
MOV AH,1
INT 16H
JZ WAIT1
MOV AX,4C00H
INT 21H
WAIT1 ENDP
;报错部分********************************************************************
ERROR PROC NEAR
MOV DX,OFFSET MES2
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
RET
ERROR ENDP
CODE ENDS
END START
本文是作者学习微机过程中对汇编的深入探讨,主要讲解了一个五位十进制数的乘法计算过程,并通过详细注释展示了如何将计算结果以十进制形式打印出来,适合汇编初学者参考。

1086

被折叠的 条评论
为什么被折叠?



