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

Arrays 在汇编语言x86中将32位寄存器[esi]的内存地址移动到8位低位寄存器,arrays,assembly,x86,masm,irvine32,Arrays,Assembly,X86,Masm,Irvine32,是否可以将32位寄存器[esi]的内存地址移动到8位AL寄存器中?你能解释一下这是怎么回事吗?下面是我的代码,它通过for循环1到6显示一个数字数组: TITLE printing (printarray.asm) (special.asm) ;This ;Last updated 92.15.2016 Written by dr scheiman INCLUDE Irvine32.inc .data arrayb byte

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

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的大小推断
字节ptr[esi]
操作数大小,并从32位指针指向的内存中执行8位加载。方括号是寄存器的解引用


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

此代码从内存位置加载一个字节,其地址是ESI寄存器中的值。指针是32位的,但指针指向的数据不是。谢谢您的回答。你能把它放在大的答录箱里,这样我就可以给你评分了吗?谢谢这几乎是的复制品,但这更多地说明了当您使用
[symbol]
而不是
[register]
时,MASM是如何推断操作数大小的。