将 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 归零)。
是否可以将 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 归零)。