MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处
生活随笔
收集整理的這篇文章主要介紹了
MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mov指令原則
64位匯編程序下
???32位匯編程序和64位匯編程序都依照上面的規則,語法也相同,但如果如果是將源操作數給一個32位寄存器,那么這個寄存器所在的64位寄存器的高32位會被置0
例如:
;64位匯編程序模板 (Template) ;聲明一個ExitProcess函數 ExitProcess PROTO .data;在這里聲明變量val1 byte 10h;val2 word 1100h;val3 dword 11110000h;.code main PROC;這里寫自己的代碼mov rax,0ffffffffffffffffh;mov eax,val3; 這里是給一個32位寄存器,但是rax的高32位被置0了。mov ecx,0;call ExitProcess main ENDP END同時,如果是將源操作數給一個16/8位的寄存器,那么這個寄存器所在的64位寄存器的高48/56位不會置0
例如:
;64位匯編程序模板 (Template) ;聲明一個ExitProcess函數 ExitProcess PROTO .data;在這里聲明變量val1 byte 10h;val2 word 1100h;val3 dword 11110000h;.code main PROC;這里寫自己的代碼mov rax,0ffffffffffffffffh;mov eax,val3; 這里是給一個32位寄存器,但是rax的高32位被置0了。mov rax,0ffffffffffffffffh;mov ax,val2; 給一個16位寄存器,rax的高48位沒有被置0mov rax,0ffffffffffffffffh;mov al,val1; 給一個8位寄存器,rax的高56位沒有被置0mov ecx,0;call ExitProcess main ENDP END32位匯編程序下
???32位匯編程序的MOV指令遵循MOV指令原則,上面展示了64位匯編程序MOV指令的特點,下面將測試32位匯編程序的MOV指令是否也有這些特點。
例:
.stack 4096 ;聲明一個ExitProcess函數 ExitProcess PROTO, dwExitCode:DWORD .data;在這里聲明變量val1 byte 10h;val2 word 1100h;val3 dword 11110000h;.code main PROC;這里寫自己的代碼mov eax,0ffffffffh;mov ax,val2; 不會覆蓋高16位(高16位不會置0)mov eax,0ffffffffh;mov al,val1; 不會覆蓋高24位(高24位不會置0)INVOKE ExitProcess,0 main ENDP END main經過測試并不具備64位MOV指令的特點
總結
相同之處:
它們的MOV指令的原則相同。
不同之處:
64位匯編程序對比32位匯編程序有以下不同
總結
以上是生活随笔為你收集整理的MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server-聚焦事务对本地变量
- 下一篇: bzoj2333[SCOI2011]棘手