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

时间:2016-09-21 03:09:14

标签: 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 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

1 个答案:

答案 0 :(得分:2)

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

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