将 32 位寄存器 [esi] 的内存地址移动到汇编语言 x86 中的 8 位低位寄存器

Moving the memory address of a 32 bit register [esi] into an 8 bit low register in Assembly language x86

是否可以将 32 位寄存器 [esi] 的内存地址移动到 8 位 AL 寄存器中?你能解释一下它是如何工作的吗?这是我的代码,它通过 1 到 6 的 for 循环显示数字数组:

TITLE printing          (printarray.asm)                     (special.asm)

;This  
;Last updated 92.15.2016 Written by dr scheiman
INCLUDE Irvine32.inc
.data
   arrayb byte 1,2,3,4,5,6
   l dword lengthof arrayb
   space byte "     ",0
   x dword 3
.code
main PROC
    mov edx,offset space
    mov eax,0  ; clear ecx of garbage
    mov ecx, l ; loop counter 
    mov esi,offset arrayb ; start of the array's memory
    myloop:
       mov al,[esi] ;how do you move the memory address of a 32 bit into an 8 bit register?
       call writedec
       call writestring
       inc esi
     loop myloop
     call crlf

 exit

main ENDP

end main

MASM 根据 AL 的大小推断 byte ptr [esi] 操作数大小,并从 32 位指针指向的内存中加载 8 位。方括号是对寄存器的取消引用。

您可以对这 8 位进行零扩展以用 movzx eax, byte ptr [esi] 填充 EAX。 (那么你就不需要提前将 eax 归零)。