是否可以将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
答案 0 :(得分:2)
MASM根据AL的大小推断byte ptr [esi]
操作数大小,并从32位指针指向的内存中执行8位加载。方括号是寄存器的解引用。
您可以对这8位进行零扩展以使用movzx eax, byte ptr [esi]
填充EAX。 (那么你不需要早点零eax。)