在此代码中添加BX,2的目的是什么?

Ami*_*nis 1 arrays recursion assembly x86-16

我试图理解此递归代码,但对的目的感到困惑add bx, 2。我已经在相关行上打上了标记。据我了解,我们必须用值增加指向数组的指针,但是为什么我们要加2而不是1?

    .model small
    .stack 100
    .data
     arr dw 38, 39, 90, 94, 13, 24, 53, 59, 63
     size dw 9
     result dw ?
    .code
    func proc
     push bp
     mov bp, sp
     push ax
     push bx
     push cx
     push dx
     mov cx, [bp+4]
     mov bx, [bp+6]
     mov ax, [bx]
     cmp cx, 1
     ja more
     mov [bp+6], ax
     jmp done
    more:

     **add bx, 2**

     push bx
     dec cx
     push cx
     call func
     pop dx
     cmp dx, ax
     jg greater
     mov [bp+6], ax
     jmp done
    greater:
     mov [bp+6], dx
    done:
     pop dx
     pop cx
     pop bx
     pop ax
     pop bp
     ret 2
    func endp
Run Code Online (Sandbox Code Playgroud)

Mar*_*nau 5

据我了解,我们必须用值增加指向数组的指针,但是为什么我们要加2而不是1?

如果我理解正确,则BX指向包含16位值的数组中元素的地址。

该指令mov ax, [bx]向您显示元素是16位值,而不是8位或32位值。16位值是2个字节长。

在大多数CPU(有TMS 320或TMS 9900之类的例外)上,数组中两个元素的地址之间的差异在于元素长nn字节。

因此,如果x是包含16位值的数组中元素的地址,并且y是下一个元素的地址,则y-x=2

因此,必须添加两个BX以获取下一个元素的地址。