用BCD码进行十进制数加法

用BCD码进行十进制数加法,第1张

楼上写错了,产生进位应该还加上0110(即十进制的6)进行修正,因为BCD码每四位数字表示一个一位十进制数,但是四位二进制数能表示16个数,当产生进位时,有6个数没有加上,故产生进位时,要加上6

(1)

0111 0100 1000

+ 0001 0110 1001

-------------------

1000 1011 0001

+ 0110 0110

-------------------

1001 0001 0111

748+169 = 917

(2)

0011 1001 1001

+ 0100 1000 1001

-------------------

1000 0010 0010

+ 0110 0110

-------------------

1000 1000 1000

399+489 =888

        CODE  SEGMENT

              ASSUME    CS:CODE

              ; 521

     UNPKBCD  DB        09,08,04,03,4,6,8,6,4,5,3,2,9,6,5,7,5,4

           N  EQU       ($-UNPKBCD)/2

         SUM  DB        0,0,0

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES

              ;====================

              LEA       SI,UNPKBCD

              MOV       CX,N

         @1:

              MOV       AL,[SI]

              MOV       AH,[SI+1]

              ADD       SUM,AL

              CMP       SUM,9

              CLC

              JLE       @2

              SUB       SUM,10

              STC

         @2:

              ADC       SUM+1,AH

              CMP       SUM+1,9

              CLC

              JLE       @3

              SUB       SUM+1,10

              STC

         @3:

              ADC       SUM+2,0

              ADD       SI,2

              LOOP      @1

              ;=================

              MOV       AH,2

              MOV       DL,SUM+2

              OR        DL,30H

              INT       21H

              MOV       DL,SUM+1

              OR        DL,30H

              INT       21H

              MOV       DL,SUM

              OR        DL,30H

              INT       21H

              ;==================

              MOV       AH,4CH

              INT       21H

        CODE  ENDS

              END       START

module count60(qout,cout,data,load,cin,reset,clk); output[7:0] qout; output cout; input[7:0] data; input load,cin,clk,r

module count60(qout,cout,data,load,cin,reset,clk);

output[7:0] qout;

output cout;

input[7:0] data;

input load,cin,clk,reset;

reg[7:0] qout;

always @(posedge clk) //clk上升沿时刻计数

begin

if (reset) qout<=0; //同步复位

else if(load) qout<=data; //同步置数

else if(cin)

begin

if(qout[3:0]==9) //低位是否为9,是则

begin

qout[3:0]<=0; //回0,并判断高位是否为5

if (qout[7:4]==5) qout[7:4]<=0;

else

qout[7:4]<=qout[7:4]+1; //高位不为5,则加1

end

else //低位不为9,则加1

qout[3:0]<=qout[3:0]+1;

end

end

assign cout=((qout==8'h59)&cin)1:0; //产生进位输出信号

endmodule

以上就是关于用BCD码进行十进制数加法全部的内容,包括:用BCD码进行十进制数加法、求汇编语言大神:两位非组合型BCD码整数加法、求模为60的BCD码加法计数器仿真程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10104581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存