日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 END

    32位匯編程序下

    ???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位匯編程序有以下不同

  • 如果是將源操作數給一個16/8位的寄存器,那么這個寄存器所在的64位寄存器的高48/56位不會置0。
  • 如果是將源操作數給一個32位寄存器,那么這個寄存器所在的64位寄存器的高32位會被置0。

  • 總結

    以上是生活随笔為你收集整理的MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。