在装配中添加不同大小的数字

时间:2013-11-30 11:18:33

标签: assembly x86 addition x86-16

我被要求编写一个程序来添加一个字节大小的数组元素。前2个字节是数组中元素的数量。

数组可能包含数千个数字,所以我应该将总和放在32位寄存器中(例如ax:dx),但问题是我不知道如何从内存中取一个字节然后将其添加到一个32位寄存器(或内存中的双变量)。

我尝试在内存中使用16位寄存器和字变量进行添加。这是代码:

array db 07, 00, 30, 10, 77, 14, 9, 54, 100
sum dw ?


lea ax, data
mov ds, ax
mov es, ax

lea bx, array
mov cx, [bx] 
mov bx, 0002h
mov dx, 0000h
Addition:
mov dl, [bx]
mov dh, 00h
add sum, dx
add bx, 1
loop Addition 

mov ax, 4c00h
int 21h 

它正常工作。但我想知道如何使用32位寄存器和双变量。

我使用的是emu8086

1 个答案:

答案 0 :(得分:3)

要将BL中的8位值添加到DX:AX中的32位和:

xor bh,bh  ; Clear BH (effectively zero-extends BL into BX)
add ax,bx  ; Add BX to the lower half of the sum
adc dx,0   ; If the lower half wrapped around (the above addition resulted
           ; in a carry), add 1 to the upper half, otherwise add 0.