gpt4 book ai didi

assembly - NASM - 如何将 8 位寄存器移动到完整的 32 位寄存器?

转载 作者:行者123 更新时间:2023-12-01 09:53:40 24 4
gpt4 key购买 nike

我正在编写 NASM 汇编代码,并且必须进行一些索引寻址。我将索引存储在 $al 中,但是 x86 不会让您使用 $al 作为索引寄存器,而且我已经在使用 $bl,所以我不能使用 $bx。所以我需要将我在 $al 中的字节放入一个 32 位的寄存器,例如 $ecx,但是,当我尝试时,它会抛出一个 invalid combination of opcode and operand 错误。有没有办法做到这一点?

    sub     al, 97                  ; char - 97

push ecx ; b/c al cant be used as indexing register
mov ecx, al ; move byte in al into ecx

mov bl, [table + ecx] ; value_at(first_table_addr + char) -> bx

pop ecx

最佳答案

使用 MOVZX instruction :

movzx ecx, al  ; move byte to doubleword, zero-extension

如果您希望 al 中的值被视为已签名,还有 MOVSX

零扩展意味着目标操作数的高位将设置为零,而符号扩展意味着目标操作数的高位将设置为源操作数的符号位。一些例子:

mov al,0x7F
movzx ebx,al ; ebx = 0x0000007F
movsx ebx,al ; ebx = 0x0000007F

mov al,0x80
movzx ebx,al ; ebx = 0x00000080
movsx ebx,al ; ebx = 0xFFFFFF80

关于assembly - NASM - 如何将 8 位寄存器移动到完整的 32 位寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com