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)
据我了解,我们必须用值增加指向数组的指针,但是为什么我们要加2而不是1?
如果我理解正确,则BX指向包含16位值的数组中元素的地址。
该指令mov ax, [bx]向您显示元素是16位值,而不是8位或32位值。16位值是2个字节长。
在大多数CPU(有TMS 320或TMS 9900之类的例外)上,数组中两个元素的地址之间的差异在于元素长n为n字节。
因此,如果x是包含16位值的数组中元素的地址,并且y是下一个元素的地址,则y-x=2。
因此,必须添加两个BX以获取下一个元素的地址。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |