毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

汇编任意大小的数的带进位加法

更新时间:2013-4-25:  来源:毕业论文

汇编任意大小的数的带进位加法

我理解的是理论上adc指令可以实现任意大的数据进行加法运算,但是关键要怎样向内存输入我想要加的这两个数,嗯最简单的就是我要写一段程序使两个128位的十进制数相加那么我应该怎样在程序中将这两个128位的十进制数送入内存中并从低地址单元到高地址单元依次存放128位数据由低到高的各个字好像伪指令db dw这些也不可能定义任意大的数啊
我先前想到个办法就是用db来从个位到最高位一位一位的定义然后用adc一位一位的加过去
即 db 1,2,3,4,5,6,7,8,9···;第一个128位的十进制数
   db 2,4,6,8,1,3,5,7,9···;第二个128位的十进制数毕业论文 
   ;ds:si指向第一个数的个位ds:di指向第二个数的个位
    sub al,al;将cf置0
     mov cx,128
s:  mov al,[si]
    adc al,[di]
    mov [si],al
    inc si
    inc di
    loop s
唔 这段代码是错误的 各位别介啊 不过想想还是不删它了 这确实也是个想法不过却行不通,问

 db 1,2,3,4,5,6,7,8,9···;第一个128位的十进制数                db 2,4,6,8,1,3,5,7,9···;第二个128位的十进制数               ;ds:si指向第一个数的个位ds:di指向第二个数的个位                    mov cx,128              s:  mov al,[si]                  add [di],al;用ds:[di]存储两数相加的结果                  cmp [di],10;两数相加结果与10比较,>=10则向下一个内存单元即ds:[di+1]加上1                  jnb carry;相当于低位向高位的进位1,嗯,这是个没有adc指令的带进位加法             s1:  inc si                  inc di                  loop s          carry:  add byte ptr [di+1],1                  jmp short s1

db 1,2,3,4,5,6,7,8,9···;第一个128位的十进制数
   db 2,4,6,8,1,3,5,7,9···;第二个128位的十进制数
   ;ds:si指向第一个数的个位ds:di指向第二个数的个位
    sub al,al;将cf置0
     mov cx,128
s:  mov al,[si]
    adc al,[di]
    cmp al,10
    jnb carry       ;如果小于跳转至CRAAY
    clc             ;置CF位为0
 s1:mov [si],al     ;把计算结果放入内存
    inc si
    inc di
    loop s
carry:  stc         ;置CF位为1
        sub al,10   ;如果大于将AL中的值减10
        jmp short s1

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。