中国海洋大学2023计算机系统基础复习大纲(3章)
第三章 程序的机器级表示与处理
程序转换概念
机器指令与汇编指令
数据类型及其格式
寄存器组织及寻址方式
定点寄存器组
8个通用寄存器,2个专用寄存器,6个段寄存器
定点通用寄存器是指没有专门用途的可以存放各类定点操作数的寄存器

标志寄存器
6个条件标志,3个控制标志
寻址方式
立即寻址:指令中直接给出操作数
实地址模式 保护模式
基址+比例变址+位移
``
常用指令类型及其操作
传送指令
通用传送指令
mov:一般传送,包括movb,movw和movl等
movs:符号扩展传送:如movsbw、movsbl、movswl等
movz:零扩展传送:如movzbw、movzbl、movzwl等
xchg:数据交换
push/pop:入栈/出栈,如pushl、pushw、popl、popw等
地址传送指令
lea:加载有效地址
入栈
;push ebp
subl $4, %esp
movl %ebp,(%esp)
出栈
;pop ebp
movl (%esp),%ebp
addl $4,%esp
定点算数运算指令
加减运算
add addb $4, %al
sub subw $4, %ax
后面的寄存器保存结果。ax = ax-4
例题
自增,自减
inc incl %eax
dec
取负运算
neg negb %bh
比较运算
cmp cmpl %eax, %ebx
乘法运算
可给出一个、两个或三个操作数
mul:无符号乘法
imul:带符号乘法
若给出一个操作数SRC,则另一个源操作数隐含在AL/AX/EAX中,将SRC和累加器内容相乘。记过存放在AX(16位)或DX-AX(32位)或EDX-EAX(64位)中。DX-AX表示32位乘积的高、低16位分别放在DX和AX中。(n位 * n位 = 2n位)
若给出两个操作数DST和SRC,则将DST和SRC相乘,结果在DST中。(n位 * n位 = n位)
immul %ebx ,%edx
;结果保存在edx中
若给出三个操作数REG、SRC和IMM,则将SRC和立即数IMM相乘,结果在REG中。(n位 * n位 = n位)
imull -16, (%eax,%ebx,4), %eax
;R[eax] ← (-16) × M[R[eax]+R[ebx]×4]
例题
对于无符号乘,直接计算即可
对于带符号乘,如积只取低n位,则和无符号相同;若取2n位,则采用布斯乘法
布斯乘法:乘数末尾加0。连续出现0或1不做人格和运算,出现10做加法,出现01做减法。(从右向左看,每次移一位,得到的+1,-1,0序列与乘数相加得到新的乘数)
除法运算
只明显指出除数
div:无符号除法
idiv:带符号除法
若为8位,则16位被除数在AX寄存器中,商送回AL,余数在AH
若为16位,则32位被除数在DX-AX寄存器中,商送回AX,余数在DX
若为32为,则被除数在EDX-EAX寄存器中,商送回EAX,余数在EDX
按位运算指令
逻辑运算
NOT;非 不影响标志
AND:与
两个位都为1时,结果才为1
OR:或
两个位都为0时,结果才为0
XOR:异或
两个位相同为0,相异为1
TEST:做”与“操作测试,仅影响标志
移位运算
SHL/SHR:逻辑左移
SAL/SAR:算数左移
ROL/ROR:循环左移
RCL/RCR:带进位循环左移
控制转移指令
无条件转移指令
JMP DST
条件转移
Jcc DST
条件设置
SETcc DST
调用和返回指令
CALL DST:返回地址RA入栈,转DST处执行
RET DST
中断指令
条件转移指令
- 根据单个标志的值转移
jc:有进位转移
je:相等转移
js:是负数转移
jo:有溢出转移
- 按无符号整数比较转移
ja/jnbe
jae/jnb
jb/jnae
jbe/jna
- 按带符号整数比较转移
jg/jnle
jge/jnl
jl/jnge
jle/jng
;eax小于等于edx则跳转
cmpl %edx,%eax
jbe .L3
C语言程序的机器级表示
过程调用的机器级表示
调用者保存寄存器:EAX、EDX、ECX
当P调用Q的时候,Q可以直接使用这三个寄存器,不用将它们的值保存到栈中
如果P在从Q返回后还要用这三个寄存器的话,P应在转到Q之前先保存,并在Q返回后先回复它们的值再使用
被调用者保护寄存器:EBX、ESI、EDI
Q必须先将它们的值保存到栈中再使用它们,并在返回P之前回复它们的值
所以为了减少准备和结束阶段的开销,每个过程应该优先使用EAX、ECX、EDX寄存器
函数参数:从左到右,从下到上
选择语句的机器级表示
if~else
switch~case
循环语句的机器级表示
do-while
while
for
递归
复杂数据类型的分配与访问
数组和指针的分配与访问
数组的定义
数组与指针

浙公网安备 33010602011771号