《深入理解计算机系统(第二版)》CSAPP 第三章 家庭作业
这一章介绍了AT&T的汇编指令 比较重要 本人完成了《深入理解计算机系统(第二版)》(以下简称CSAPP)第三章的家庭作业,并与网上的一些答案进行了对比修正。
感谢博主summerhust的整理,以下贴出AT&T常用汇编指令
AT&T常用汇编指令
数据传送指令
指令 | 效果 | 描述 |
---|---|---|
movl S,D | D <-- S | 传双字 |
movw S,D | D <-- S | 传字 |
movb S,D | D <-- S | 传字节 |
movsbl S,D | D <-- 符号扩展S | 符号位填充(字节->双字) |
movzbl S,D | D <-- 零扩展S | 零填充(字节->双字) |
pushl S | R[%esp] <-- R[%esp] – 4;M[R[%esp]] <-- S | 压栈 |
popl D | D <-- M[R[%esp]];R[%esp] <-- R[%esp] + 4; | 出栈 |
算数和逻辑操作地址:
指令 | 效果 | 描述 |
---|---|---|
leal S,D | D = &S | movl地版,S地址入D,D仅能是寄存器 |
incl D | D++ | 加1 |
decl D | D-- | 减1 |
negl D | D = -D | 取负 |
notl D | D = ~D | 取反 |
addl S,D | D = D + S | 加 |
subl S,D | D = D – S | 减 |
imull S,D | D = D*S | 乘 |
xorl S,D | D = D ^ S | 异或 |
orl S,D | D = D | S | 或 |
andl S,D | D = D & S | 与 |
sall k,D | D = D << k | 左移 |
shll k,D | D = D << k | 左移(同sall) |
sarl k,D | D = D >> k | 算数右移 |
shrl k,D | D = D >> k | 逻辑右移 |
特殊算术操作:
指令 | 效果 | 描述 |
---|---|---|
imull S | R[%edx]:R[%eax] = S * R[%eax] | 有符号64位乘 |
mull S | R[%edx]:R[%eax] = S * R[%eax] | 无符号64位乘 |
cltd S | R[%edx]:R[%eax] = 符号位扩展R[%eax] | 转换为4字节 |
idivl S | R[%edx] = R[%edx]:R[%eax] % S;R[%eax] = R[%edx]:R[%eax] / S; | 有符号除法,保存余数和商 |
divl S | R[%edx] = R[%edx]:R[%eax] % S;R[%eax] = R[%edx]:R[%eax] / S; | 无符号除法,保存余数和商 |
注:64位数通常存储为,高32位放在edx,低32位放在eax。
条件码:
条件码寄存器描述了最近的算数或逻辑操作的