第三章 程序的转换以及机器级表示
程序转换与汇编指令
test按位与,or按位或,不影响OF和CF,两者均为0
符号扩展movs 带符号数扩展到高位,有符号到有符号。
零扩展movz 无符号数扩展到高位,有符号到高位为正数或无符号。
扩展 b-> l movzbl或movsbl
截断 l-> b movb 只取目的操作数的位数
指令转移目标地址=指令地址+指令字长+偏移量
无符号整数 溢出看CF
带符号整数 溢出看OF
booth乘时注意是否带符号
booth乘法位数太多时,用乘移位法
SHL SHR 逻辑左移,逻辑右移
SAL SAR 算术左移,算术右移
eax = eax & 0x01 l是32位
函数返回,栈帧顶部esp +4 (pop 返回地址)
对齐方式:
pragma pack(n)单个元素对齐
_attribute((aligned(M))) 整个结构体按M个字节对齐
_attribute((packed)) 所有结构体内部元素紧凑对齐 优先
部分练习解析
以后更新…