caspp chapter 3
寄存器
operand form
data movement instructions
mov 指令例子:
0扩展 movz 指令:
Zero-extending data movement instructions是一种计算机指令类型,涉及将数据从一个位置移动到另一个位置,同时通过在最重要的一端添加零位来将数据扩展到更大的大小。这种指令通常用于计算机体系结构中,用于在不同寄存器或内存位置之间操作和传输数据。零扩展操作确保保持原始数据的完整性,同时将其扩展以适应更大的数据大小格式。这种指令通常用于处理不同大小和格式的数据的处理器和汇编语言编程中。
符号扩展mov 指令:
Sign-extending data movement instructions是一种计算机指令类型,用于将数据从一个位置移动到另一个位置,同时通过在最重要的一端添加符号位来将数据扩展到更大的大小。这种指令通常用于计算机体系结构中,用于在不同寄存器或内存位置之间操作和传输数据。符号扩展操作确保保持原始数据的符号位,同时将其扩展以适应更大的数据大小格式。这种指令通常用于处理不同大小和格式的数据的处理器和汇编语言编程中。
指令cltq用于将32位寄存器中的有符号整数扩展为64位寄存器中的有符号整数。在执行cltq指令后,EAX寄存器中的值将被扩展为RAX寄存器中的值,符号位将被复制以填充高32位。这个指令通常用于x86架构的汇编语言中,用于处理有符号整数的扩展。
mov 指令例子:
pushing and poping stack data
pushq 和 popq 指令:
stack 操作介绍:
Arithmetic and Logical Operations
整数算数指令:
Special Arithmetic Operations
control
single-bit condition code registers
Carry flag 是一个标志位,用于标识在进行算术运算时是否发生了进位。在计算机的处理器架构中,carry flag 通常被用于加法和减法运算。
在加法中,如果两个数相加的结果超出了所能表示的范围,就会发生进位。carry flag 在这种情况下会被设置为 1,表示发生了进位;否则被设置为 0,表示没有发生进位。
在减法中,如果被减数小于减数,也会发生借位。carry flag 在这种情况下同样会被设置为 1,表示发生了借位;否则被设置为 0,表示没有发生借位。
carry flag 可以被程序员或者计算机指令集使用,来进行条件判断和控制程序的执行流程。
cmp 和 test 指令
set 指令
set 指令例子:
jump 指令
cmov 指令
control transfer
call和寄存器
figure 3.26对应的代码: