Arrays 在汇编语言x86中将32位寄存器[esi]的内存地址移动到8位低位寄存器
是否可以将32位寄存器[esi]的内存地址移动到8位AL寄存器中?你能解释一下这是怎么回事吗?下面是我的代码,它通过for循环1到6显示一个数字数组: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
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是如何推断操作数大小的。