Assembly 在assembley中添加不同大小的数字

Assembly 在assembley中添加不同大小的数字,assembly,x86,addition,x86-16,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,

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

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.

要将
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.

要将
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.

要将
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.

但是如何将DX:AX添加到内存中的双变量?例如:sum DD?原理相同。首先添加,然后是ADC:
ADD[sum],ax
/
ADC[sum+2],dx
我会试试。谢谢。但是我如何将DX:AX添加到内存中的双变量中呢?例如:sum DD?原理相同。首先添加,然后是ADC:
ADD[sum],ax
/
ADC[sum+2],dx
我会试试。谢谢。但是我如何将DX:AX添加到内存中的双变量中呢?例如:sum DD?原理相同。首先添加,然后是ADC:
ADD[sum],ax
/
ADC[sum+2],dx
我会试试。谢谢。但是我如何将DX:AX添加到内存中的双变量中呢?例如:sum DD?原理相同。首先添加,然后是ADC:
ADD[sum],ax
/
ADC[sum+2],dx
我会试试。谢谢