BCD码相乘的实验!麻烦高手给写个代码!

njgnini 2006-11-23 05:58:14
验目的:
1. 熟悉数据传送、算术运算指令和控制转移指令的用法。
2. 掌握压缩BCD码的表示和使用方法。
3.进一步熟悉Debug的使用方法。
实验内容:
实现BCD码的乘法,要求被乘数和乘数以压缩BCD形式分别存放在内存单元DS:1000H和DS:1001H。乘积存放在另外两个内存单元DS:1002H和DS:1003H(低位在前,高位在后)。
由于没有压缩BCD码乘法指令,程序中采用将乘数1作为计数器,累加另一个乘数的方法得到计算结果。
...全文
1032 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dandan2008 2006-11-27
  • 打赏
  • 举报
回复
DATA SEGMENT
STRING1 DB 6,0,6 DUP(00H)
STRING2 DB 5,0,5 DUP(00H)
RESULT DB 5 DUP(00H)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING1
MOV AH,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
MOV DX,OFFSET STRING2
MOV AH,0AH
INT 21H
MOV AX,0
MOV SI,OFFSET STRING2+3
MOV BL,[SI]
AND BL,00001111B
MOV SI,OFFSET STRING1+4
MOV DI,OFFSET RESULT
MOV CX,3

LOOP1:MOV AL,[SI]
AND AL,00001111B
DEC SI
MUL BL
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
INC DI
MOV [DI],AH
LOOP LOOP1

MOV AX,0
MOV SI,OFFSET STRING2+2
MOV BL,[SI]
AND BL,00001111B
MOV SI,OFFSET STRING1+4
MOV DI,OFFSET RESULT+1
MOV CX,3
MOV DL,0

LOOP2:MOV AL,[SI]
AND AL,00001111B
DEC SI
MUL BL
AAM
ADD AL,[DI]
AAA
ADD AL,DL
AAA
MOV [DI],AL
INC DI
MOV DL,AH
LOOP LOOP2
MOV [DI],AH
MOV AX,0

MOV SI,OFFSET RESULT+4
MOV CX,5


MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H

DISPL:MOV AH,2
MOV DL,[SI]
ADD DL,30H
INT 21H
DEC SI
LOOP DISPL

MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN

三位数和二位数的非组合BCD码的相乘
quicksoftxyz 2006-11-25
  • 打赏
  • 举报
回复

你遇到的不对具体在哪里,发过来我看看

quicksoftxyz 2006-11-25
  • 打赏
  • 举报
回复

记得当时测试的时候没问题的了,你再检查一下在用这个子程序的时候是不是有问题??
quicksoftxyz 2006-11-25
  • 打赏
  • 举报
回复

这是一个子程序,你得自己写程序调用呵
njgnini 2006-11-25
  • 打赏
  • 举报
回复
我就用MASM 编译啊!好多错误!
njgnini 2006-11-24
  • 打赏
  • 举报
回复
我就这点分!对不起了各位!
我是真不会!quicksoftxyz给的不对啊!
大家帮帮忙啊!我先谢谢了!
LiChenYue 2006-11-23
  • 打赏
  • 举报
回复
汇编好难呀!蹭点分!
quicksoftxyz 2006-11-23
  • 打赏
  • 举报
回复

是西北农林科技大的吧?
quicksoftxyz 2006-11-23
  • 打赏
  • 举报
回复
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;实验二:BCD码相乘
;说明 :请参见注解
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;function : make 2 numbers in BCD format multiply
;InPara ah: multiplyer al : multiplyee
;OutPara dx: the result of al*ah in combational BCD format

BCDmul proc far

push bx
push cx
mov bl,ah ;multiplyer
mov dx,00H

@add: cmp bl,0
je @endB

clc
mov cl,al ;store

add al,dl
daa
mov dl,al

mov al,dh ;here should aviod error!
adc al,0
daa
mov dh,al

mov al,bl
dec al
das
mov bl,al

mov al,cl ;restore
jmp @add
@endB:
pop cx
pop bx
ret
BCDmul endp


大熊猫侯佩 2006-11-23
  • 打赏
  • 举报
回复
1 分单位操作

2 使用 AAM BCD 码乘法调整指令

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧