- 将C 代码编译为汇编代码。
$ gcc -Og -S code.c
# 产生code.s 汇编文件
2.将C代码生成目标代码文件。
$ gcc -Og -c code.c
# 产生code.o 二进制目标文件
- 数据传送指令 mov 类有4条指令组成:
- movb 传送字节 1字节
- movw 传送字 2字节
- movl 传送双字 4字节
- movq 传送四字 8字节
计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。一个字通常由一个或多个(一般是字节的整数位)字节构成
-
C语言中的指针其实就是地址。
-
间接引用指针就是将改指针放在一个寄存器中,然后在内存引用中使用这个寄存器。
-
通过push 指令操作将数据压入栈中,通过pop指令删除数据。指令只有一个操作数。
栈可以实现为一个数组,操作总是从数组的一端插入和删除元素,这一端称为栈顶。
- 将一个四字值压入栈中,首先要将指针减8。
四字等于8字节。
可以理解为,栈数组的长度必须增大8。
可为什么是减而不是加。 (减法就是特殊加法,相当于X轴,减法就是向左移动一段范围,加法就是向右移动一段范围,但它们都可以取得一段范围的值)。栈向低地址方向增长,所以压栈是减小栈指针的值。
- 加载有效地址指令 leaq (load effective address)实际上是movq的变形。它指令的形式是从内存读取数据到寄存器,但实际上它根本没有引用内存。该指令不是从指定位置读取数据,而是将有效地址写入到目的操作数。
lead 指令能执行加法和有限形式的乘法。
网友评论