[英]Is this correct assembly?
我可以在匯編中處理這樣的數組嗎?
db a 10,20,30,40,50
然后說:
mov si,0
然后引用這樣的元素
mov AX,a[si]
從技術上講,是的,但是寫起來會更有效率
mov si, offset a
mov ax, [si]
還有一件事: a
被定義為一個字節數組。 而ax
是 16 位寄存器。 因此, mov ax,[si]
將使ax
包含a
前兩個字節(即al=10
, ah=20
)。
你可能想要的是
mov al, [si]
或者
mov al, a[si]
是的,這是允許/支持的。
@elder_george 至少有些事情是正確的:您更經常希望將地址放入寄存器而不是將其編碼到指令中。 在您遍歷數組的相當典型的情況下,您可能需要以下內容:
mov bx, offset a
xor si, si
next_char:
mov al, bx[si]
; process al
inc si
cmp si, 5
jle next_char
但是,如果可能的話,從頭到尾處理通常會更方便一些:
mov bx, offset a
mov si, 5
next_char:
mov al, bx[si]
; process al
dec si
jnz next_char
或者,您可以反轉 base 和 index 的角色以進行另一個(現在大部分已過時)優化:
mov esi, offset a
mov ecx, 5
next_char:
mov al, esi[ecx]
; process al
loop next_char
但是,您只能使用 32 位寄存器執行此特定技巧- ecx 可以充當“基”寄存器,但 cx 不能(並且循環僅適用於 [e]cx。相反,bx 和 bp 都可以充當基寄存器,但loop
不適用於它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.