Here is the question我正在尝试在emu8086中编写一个程序。该程序有关内存操作和数组。内存传输操作必须在数据段上完成。而且我必须将元素存储在内存地址中。(例如:从DS:[2000h]到DS:[2009h])
data segment
arr db 1,2,3,4,5,6,7,8,9,10
ends
code segment
start:
xor ax , ax
lea si ,arr
mov cx , 10
add:
add ax,[si]
add si,2
loop add
ends
我对寻址数组的元素感到困惑。
将数据大小更改为BYTE后,总和的计算将是正确的。
xor al, al
lea si, arr
mov cx, 10
Sum:
add al, [si]
inc si
loop Sum
我对寻址数组的元素感到困惑。
要寻址地址,您需要设置一个段寄存器并指定一个偏移量(主要使用地址寄存器,例如SI
,DI
或BX
)。要在DS:[2000h]中存储数组和和,必须首先设置DS
段寄存器。并且由于您需要同时在数组的原始位置进行寻址,因此需要设置2个段寄存器。
mov ax, data ;Source is the array in the program
mov es, ax
mov ax, 3000h ;Destination is the designated memory
mov ds, ax
我们可以移动数组并同时计算总和!
xor al, al
lea si, arr ;Source offset (using ES)
mov di, 2000h ;Destination offset (using DS)
mov cx, 10
MoveAndSum:
mov dl, es:[si]
inc si
mov [di], dl
inc di
add al, dl
loop MoveAndSum
mov [di], al ;Store the sum at DS:[200Ah] ?????
原始任务描述告诉您将总和存储在DS:[2010h]
这是not所附附图显示的内容!
您可能需要写mov [2010h], al
而不是mov [di], al
。