簡體   English   中英

這是正確的組裝嗎?

[英]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=10ah=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM