我被要求编写一个程序来添加一个字节大小的数组元素。前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
答案 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.