首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

x86 AT&T 語法彙編:mov (%eax), %eax 與 mov %eax, (%eax) 的區別詳解

     編輯:程式設計疑難解答

指令對比

指令操作方向含義Intel 語法對應
mov (%eax), %eax內存 → 寄存器將 EAX 寄存器值作為地址,從該內存單元讀取 32 位數據存入 EAXMOV EAX, [EAX]
mov %eax, (%eax)寄存器 → 內存將 EAX 寄存器的值寫入以 EAX 為地址的內存單元MOV [EAX], EAX

記憶口訣

「AT&T 語法:源在左,目的在右。括號表示間址,% 表示寄存器。」

  • (%eax) = 內存操作數,地址來自 EAX;
  • %eax = 寄存器操作數;
  • 指令格式:mov 源, 目的。

執行示例

; 假設初始 EAX = 0x00401000
; 內存 0x00401000 處存值 0x12345678

mov (%eax), %eax
; 執行後 EAX = 0x12345678 (從內存讀取)

mov %eax, (%eax)
; 執行後 內存 0x00401000 = 0x12345678 (寫入內存,EAX 不變)

常見陷阱

  • 兩條指令連續執行會導致「讀取剛寫入的值」或「寫入剛讀取的值」,需注意邏輯順序;
  • 若 EAX 指向不可讀/不可寫頁面,將觸發 Page Fault (段錯誤);
  • 64 位模式下對應 RAX,括號語法相同 mov (%rax), %rax。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved