
x86-64汇编学习
文章平均质量分 51
Jounsh
记录学习。
展开
-
3.算术和逻辑操作
例如,指令类ADD由四条加法指令组成:addb、 addw、 addl 和addq,分别是字节加法、字加法、双字加法和四字加法。大多数操作都分成了指令类,这些指令类有各种带不同大小操作数的变种(只有leaq 没有其他大小的变种)。操作被分为四组:加载有效地址、一元操作、二元操作和移位。二元操作有两个操作数,而一元操作有一个操作数。事实上,给出的每个指令类都有对这四种不同大小数据的指令。至于使用的细节,后面有时间再更新。原创 2023-09-21 00:32:01 · 179 阅读 · 0 评论 -
2. 栈的操作
最后两个数据传送操作,可以将数据压入程序栈中,以及从程序中弹出数据。栈在处理过程中起到至关重要的作用。pushq 指令的功能是把数据压人到栈上,而popq 指令是弹出数据。将一个四字值压人栈中,首先要将栈指针减8, 然后将值写到新的栈顶地址。他们之间的区别是在机器代码中pushq指令编码为1个字节,而上面那两条指令一共需要8个字节。栈可以实现为一个数组,总是从数组的一端插入和删除元素。栈向下增长,这样一来,栈顶元素的地址是所有栈中元素地址中最低的。通过push操作,把数据压入栈中,通过pop操作删除数据;原创 2023-09-21 00:13:10 · 81 阅读 · 0 评论 -
1. x86-64汇编之数据传送指令MOV
这些指令的寄存器可以是16个寄存器有标号部分中的任意一个。寄存器部分的大小必须与指令最后一个字符(‘b’,’w’,‘l’或‘q’)指定的大小匹配大多数情况中,mov指令只会更新目的操作数指定的那些寄存器字节或者内存位置。唯一的例外是movl指令意寄存器作为目的时,它会把该寄存器的高四字节设置为0(x86-64的惯例,任何为寄存器生成32位值得指令都会把该寄存器的高位部分置成0)。首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令。原创 2023-09-06 23:23:33 · 3923 阅读 · 0 评论