请教压缩的BCD码的减法算法。

forulong 2001-10-27 05:26:10
...全文
415 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baifeng 2002-04-18
  • 打赏
  • 举报
回复
gz
forulong 2001-10-28
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/344/344146.shtm
forulong 2001-10-28
  • 打赏
  • 举报
回复
tarzan710(陶然),请到asm区去领分。
tarzan710 2001-10-27
  • 打赏
  • 举报
回复
组合型BCD码(即压缩的BCD码)减法调整指令为DAS(Decimal Adjust for Subtraction),在执行这条指令之前,必须首先执行SUB或SBB等减法指令,且相减结果已经存入在AL寄存器中。它执行的操作是:
(AL)<-把AL寄存器中的差值调整为组合型BCD码格式
其执行过程如下:
(1)如果AL寄存器的低4位在A-F之间或标志寄存器的AF位为1,则AL寄存器的内容减6,并将标志寄存器的AF位置1;
(2)如果AL寄存器的高4位在A-F之间或标志寄存器的CF位为1,则AL寄存器的内容减6,并将标志寄存器的CF位置1。

下面是一个程序段说明如何实现组合型BCD码的减法。
设被减数524,减数861,SUB1指向524的首位,SUB2指向861的首位。则SUB1指向的字节存放的是5,SUB1+1指向的是字节存放的是24,SUB2同理。在相减过程中如果被减数小于减数,则运算结果为“-”,此时就必须用SUB2-SUB1才能得到正确结果,我们只须要交换SI和DI即可。

LEA SI,SUB1+1    ;设置被减数指针
LEA DI,SUB2+1    ;设置减数指针
MOV AH,‘+’    ;预置相减数结果符号“+”
MOV BX,0
MOV CX,2     ;两数均用2个字节存放操作数,所以要相减2次,就是要循环2次

LOP1:MOV AL,SUB1[BX]
SUB AL,SUB2[BX]
JE NEXT1
JNC NEXT2     ;SUB1>SUB2,转移
MOV AH,'-'     ;SUB1<SUB2,修改结果符号“-”
XCHG SI,DI     ;减数与被减数交换
JMP NEXT2

NEXT1: INC BX    ;改变已处理位数
LOOP LOP1   ;

NEXT2: MOV RESULT,AH  ;符号放入结果首址
LEA BX,RESULT+2 ;取存放结果末址
MOV CX,2
CLC

LOP2: MOV AL,[SI]   ;两数相减
SBB AL,[DI]
DAS          ;十进制调整
LAHF         ;暂存向高位的进位
OR AL,30H     ;转换成ASCII码
MOV [BX],AL     ;保存结果
SAHF
DEC SI
DEC DI
DEC BX
LOOP LOP2
hakuna 2001-10-27
  • 打赏
  • 举报
回复
gz

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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