2015-04-20 2 views
0

У меня есть код, который работает правильно, но я хочу знать разницу между с использованием mov al, byte ptr [esi] и mov al,[num]. Также почему мне нужно определить переменную указателя до dd вместо определения db. Вот кодВ чем разница между mov al, byte ptr [esi] и mov al, [num]

.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 
+0

Err, они делают разные вещи? Вы прочитали руководство по процессору? – EJP

+0

_ "Почему мне нужно определить переменную-указатель в' dd' вместо define 'db'? _ _ _ Поскольку адрес не будет помещаться в один байт. – Michael

ответ

2

Учитывая, что num эквивалентно адресу, сохраненному в esi, нет никакой практической разницы между ними.

Вам необходимо определить переменную-указатель dd (данные двойные), поскольку вы назначаете 32-битное смещение. db (байт данных) предназначен только для 8-битных присвоений. Также учтите, что существует dw (слово данных).

Смежные вопросы