汇编任意大小的数的带进位加法
我理解的是理论上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