汇编语言中的一些问题

  总结一下关于汇编的一些问题:

  首先,汇编的最终目标是转换为机器码,所以其实所有操作都是对逻辑内存的操作。

  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

 

 

 

 

  

 

posted @ 2021-09-11 12:15  放不下的小女孩  阅读(513)  评论(0编辑  收藏  举报