当前位置: 代码迷 >> 汇编语言 >> 汇编程序:两位bcd码相乘,该怎么解决
  详细解决方案

汇编程序:两位bcd码相乘,该怎么解决

热度:7227   发布时间:2013-02-26 00:00:00.0
汇编程序:两位bcd码相乘
用重复累加的方法计算两位bcd码乘以两位bcd码的积。要求,被乘数放在bl中,乘数放在cl中,乘积放在dx中。算法:先判断bl,cl是否为0.如有一个为0,则结束,积送存;若都不为0,则将:乘数+积=积,再十进制调整;再将cl减1.接着判断bl,cl是否为0……依此循环。麻烦给出完整的汇编程序。

------解决方案--------------------------------------------------------
;请楼主参考一下吧:
DATA SEGMENT
FIRST DB 99H
SECOND DB 25H
THIRD DB 2 DUP(?)
MES1 DB '*','$'
MES2 DB '=','$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
STAPN DB 100 DUP(?)
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV BL,FIRST
MOV CL,SECOND
MOV DX,0
MOV AL,BL
AGAIN: OR AL,AL
JZ DONE
MOV AL,DL
ADD AL,CL
DAA
MOV DL,AL
MOV AL,DH
ADC AL,0
DAA
MOV DH,AL
MOV AL,BL
DEC AL
DAS
MOV BL,AL
JMP AGAIN
DONE: LEA BX,THIRD
MOV [BX],DX
LEA SI,FIRST
CALL DIS
XOR AX,AX
MOV AH,09H
LEA DX,MES1
INT 21H
LEA SI,SECOND
CALL DIS
XOR AX,AX
LEA DX,MES2
MOV AH,09H
INT 21H
LEA SI,THIRD
INC SI
CALL DIS
DEC SI
CALL DIS
MOV AX,4C00H
INT 21H
DIS PROC NEAR
MOV AL,[SI]
MOV CL,04H
SHR AL,CL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,[SI]
AND AL,0FH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
RET
DIS ENDP
CODE ENDS
END START

------解决方案--------------------------------------------------------
bcd对初学者比较晦涩,但是先从简单的表达式开始练习,还是不难掌握的。

建议先熟悉bcd的指令,然后并接表达式。