mov al, byte ptr [esi] 和 mov al,[num] 有什么区别

What is the difference between mov al, byte ptr [esi] and mov al,[num]

我有一些代码可以正常工作,但我想知道它们之间的区别 使用 mov al, byte ptr [esi]mov al,[num]。还有为什么我需要将指针变量定义为dd而不是定义db。这是代码

.386
.model flat, stdcall
.stack 1000h

Sleep proto arg1:dword
printf proto c arg1:ptr byte, printlist:vararg


.data
array db "hello" ,0
pointerByte dd offset array
fmtmsg1 db "%c",0

.code
public main

main proc

    mov esi,pointerByte
    mov cl,0
repeat_loop:

    push ecx

    mov al,byte ptr [esi]
    invoke printf,addr fmtmsg1,al

    inc esi

    pop ecx
    inc cl
    cmp cl,5
    jne repeat_loop

    ;done


   ret
main endp

end main

鉴于num相当于esi中存储的地址,两者没有实际区别

您需要使用 dd(双精度数据)定义指针变量,因为您分配的是 32 位偏移量。 db(数据字节)仅用于 8 位赋值。另外,请考虑存在 dw(数据字)。