匯編語言中的一些問題


  總結一下關於匯編的一些問題:

  首先,匯編的最終目標是轉換為機器碼,所以其實所有操作都是對邏輯內存的操作。

  1.寄存器尋址和間接尋址:

  設寄存器rax,rdx。rdx中儲存的地址為0x11,rax中儲存的地址為0xaa,0xaa中儲存的值為0xbb

%rax    //代表寄存器尋址,即返回寄存器rax的地址 (寄存器中的值)
(Adress)   //()代表取Adress地址中值的引用即解引用*Adress,Adress為寄存器時代表間接尋址,Adress為操作數組合時代表變址尋址
(%rax)      //代表間接尋址,即返回存儲在寄存器rax中的地址的值的引用(寄存器中值所代表的地址的值
)
movb %rdx,%rax        //將寄存器rdx中的值復制到寄存器rax中,rax中值為0x11,地址0xaa中的值為0xbb

movb %rdx,(%rax)      // //將寄存器rdx中的值,轉移到寄存器rax中值所對應的地址,rax中儲存值為0xaa,0xaa中儲存值為0x11

 

  2.leaq指令

  leaq指令是加載有效地址load effective address的縮寫,q代表四字8個字節。是一個二元操作符,指令的作用類似於C++中的取地址&。

  

leaq S,D        //相當於取S的地址加載到D,相當於C++中的取地址&,D=&S
//下面兩個指令等效
movq %rax,%rbx;               //將rax中的值賦值給rbx
leaq (%rax),%rbx;         //將rax中地址所對應值的地址賦值給rbx

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM