汇编语言两个32位数相加

如题所述

比如 把12341234h 和 ababababh 相加的代码如下
assume cs:code
code segment
mov ax,1234h
mov bx,1234h
mov cx,0ababh
mov dx,0ababh
add bx,dx
adc ax,cx
mov ax,4cooh
int 21h
code ends
end

思路就是把32位看成两个16位的分别存储在两个寄存器中,然后分别相加。要注意使用add 和 adc指令(adc是进位加)。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-28
上面的是错的..
------------------------------------------------
X dd 87654321H
Y dd 12345678H
lea bx,X ;bx指向x低字
mov ax,[bx] ;x低字送入ax
add ax,4[bx] ;与y低字相加
mov [bx],ax ;送和低字
inc bx
inc bx ;bx指向x高字
mov ax,[bx] ;x高字送入ax
adc ax,4[bx] ;与y高字及低字进位相加
adc ax,0 ;最后最高位进位也要加
mov [bx],ax ;送和高字

32位相加需要执行一次 add 两次adc
希望能帮助你
------------------------

用8086汇编语言实现两个无符号32位二进制数相加,并显示结果。注:输入...
; 相加的两个数以及其和不得超过6.5亿,否则出现除法溢出; 输入的两个数存入数组x 中 (输入时,两个数以空格间隔,以回车结束输入); 相加的结果存入y 中,或dx、ax中code segment assume cs:code org 100hSTART: JMP BBBX DD 10 dup(?)num dw ?Y DD ?cc db ...

汇编语言两个32位数相加
BEGIN: PUSH CS POP DS PUSH CS POP ES MOV AX,WORD PTR X MOV DX,WORD PTR X+2 MOV BX,WORD PTR Y MOV CX,WORD PTR Y+2 ADD AX,BX ADC DX,CX

编写汇编语言程序,用8086指令实现两个32位无符号数相加
assume cs:csegcseg segment hextab db '0123456789ABCDEF' A dd 11118888H b dd 33339444H c dd 0start: mov ax, cseg mov ds, ax mov ax, word ptr a add ax, word ptr b mov word ptr c, ax mov ax, word ptr a+2 adc ax, word ptr b+2 mov word ptr ...

在汇编语言中如何计算两个双精度数的和?
8086汇编中,先最低位的字或字节用ADD加,剩余全部用带进位加ADC,将从低位上来的进位一起整进去,就可以了。例如,X,Y,Z是双字(32位)数,求Z = X + Y X DW 1234H, 5678H Y DW 2222H, 4444H Z DW 0, 0 MOV AX, X ADD AX, Y MOV Z, AX MOV AX, X+2 A...

汇编语言中如遇到两个dword型的数值相加,指令怎么写 我写了 add dword...
左图,是 CPU 执行 16 位数除以 8 位数时的操作。下面,就用这最简单的除法指令,实现较大数字除法操作。在右图中,被除数有四个字节:1A 2B 3C 4DH,共有 32 位数。除数,是一个字节:BL,仅有 8 位数。很多学习汇编语言的人,包括高手,看到这里,就木了。在他们的思维中,做较大数值的...

求大神帮忙写一个32位的加法运算程序~~~单片机老师布置的作业...
你没描述你用的是什么单片机啊,如果是32位的单片机那就直接加很简单了,如果是8位51单片机的话那就是如下:ORG 0000H CLR C MOV A,30H\/\/被加数低八位 ADDC A,40H MOV 50H,A\/\/最低八位放于50H MOV A,31H\/\/被加数次低八位 ADDC A,41H MOV 51H,A\/\/次低八位...

汇编语言用8086指令集和寄存器做32位有符号数学运算
data2 dw ?data1 dw ?2、以下是加、减、乘、除的4个子程序 ;;32位运算 ;;=== ;32位符号数的加法运算 ;入: DXAX=32位操作数1 ; CXBX=32位操作数2 ;出: DXAX=两操作数的和 ; OF=1: 溢出 ; OF=0: 正常 ;=== subn_add32 proc near add ax,bx adc dx,cx ret s...

汇编语言把两个寄存器中的32位无符号二进制数相乘,其乘积仍在两个寄存器...
; 32位 ×32位 乘法, 结果 64位 。 这是有别于你题目的另一种算法,供参考 ! CODE SEGMENT ASSUME CS:CODE X DD 111111 DD 0 ; 增加 这个是为了左移时有空间 Y DD 11111 Z DD 2 DUP(0) START: PUSH CS POP DS ...

汇编语言中32位CPU多出的两个FS、GS段寄存器,全称是什么啊??
FS、GS 是从 80386 开始增加的,没有全称,取名就是按字母序排在 CS、DS、ES 之后的。而 CS、DS、ES、SS 是有全称的:CS (Code Segment) 代码段 DS (Data Segment) 数据段 ES (Extra Segment) 附加段 SS (Stack Segment) 栈段

汇编程序
FIRST dw 1234h SECONFD dw 4567h THIRD1 dw ?THIRD2 dd ?Data ends Code segment assume cs:Code,ds:Data Start:mov ax,data mov ds,ax mov ax,FIRST add ax,SECONFD;相加 mov THIRD1,ax mov ax,FIRST mul SECONFD;相乘 mov word ptr THIRD2,ax mov word ptr THIRD2+2,dx mov ah...

相似回答