如何在8086的内存地址中存储数组的元素

问题描述 投票:2回答:1

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

我对寻址数组的元素感到困惑。

assembly x86-16 emu8086
1个回答
1
投票

将数据大小更改为BYTE后,总和的计算将是正确的。

 xor  al, al
 lea  si, arr
 mov  cx, 10
Sum:
 add  al, [si]
 inc  si
 loop Sum

我对寻址数组的元素感到困惑。

要寻址地址,您需要设置一个段寄存器并指定一个偏移量(主要使用地址寄存器,例如SIDIBX)。要在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

© www.soinside.com 2019 - 2024. All rights reserved.