中国海洋大学2023计算机系统基础复习大纲(3章)

第三章 程序的机器级表示与处理

程序转换概念

机器指令与汇编指令

image-20250113151930145 image-20250113154637972 image-20250113154715198

数据类型及其格式

image-20250113152606854

寄存器组织及寻址方式

定点寄存器组

8个通用寄存器,2个专用寄存器,6个段寄存器

定点通用寄存器是指没有专门用途的可以存放各类定点操作数的寄存器

image-20250113153517805

标志寄存器

6个条件标志,3个控制标志

寻址方式

立即寻址:指令中直接给出操作数

实地址模式 保护模式

image-20250113154055307 image-20250113154247277

基址+比例变址+位移

image-20250113154412829

``

常用指令类型及其操作

传送指令

通用传送指令

mov:一般传送,包括movb,movw和movl

movs:符号扩展传送:如movsbw、movsbl、movswl

movz:零扩展传送:如movzbw、movzbl、movzwl等

image-20250113155444166

xchg:数据交换

push/pop:入栈/出栈,如pushl、pushw、popl、popw等

地址传送指令

lea:加载有效地址

入栈
image-20250113155713245
;push ebp
subl $4, %esp
movl %ebp,(%esp)
出栈
image-20250113155845767
;pop ebp
movl (%esp),%ebp
addl $4,%esp

定点算数运算指令

加减运算

add addb $4, %al

sub subw $4, %ax

后面的寄存器保存结果。ax = ax-4

例题
image-20250113162633835 image-20250113162958396
自增,自减

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] 
例题
image-20250113164244173

对于无符号乘,直接计算即可

image-20250113164308249

对于带符号乘,如积只取低n位,则和无符号相同;若取2n位,则采用布斯乘法

布斯乘法:乘数末尾加0。连续出现0或1不做人格和运算,出现10做加法,出现01做减法。(从右向左看,每次移一位,得到的+1,-1,0序列与乘数相加得到新的乘数)

image-20250113165903865
除法运算

只明显指出除数

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:带进位循环左移

image-20250113212650213 image-20250113212700469

控制转移指令

无条件转移指令

JMP DST

条件转移

Jcc DST

条件设置

SETcc DST

调用和返回指令

CALL DST:返回地址RA入栈,转DST处执行

RET DST

中断指令

条件转移指令

  1. 根据单个标志的值转移

​ jc:有进位转移

​ je:相等转移

​ js:是负数转移

​ jo:有溢出转移

  1. 按无符号整数比较转移

​ ja/jnbe

​ jae/jnb

​ jb/jnae

​ jbe/jna

image-20250113213504970
  1. 按带符号整数比较转移

​ jg/jnle

​ jge/jnl

​ jl/jnge

​ jle/jng

image-20250113213518543
;eax小于等于edx则跳转
cmpl %edx,%eax
jbe .L3

C语言程序的机器级表示

过程调用的机器级表示

image-20250113213824451

调用者保存寄存器:EAX、EDX、ECX

当P调用Q的时候,Q可以直接使用这三个寄存器,不用将它们的值保存到栈中

如果P在从Q返回后还要用这三个寄存器的话,P应在转到Q之前先保存,并在Q返回后先回复它们的值再使用

被调用者保护寄存器:EBX、ESI、EDI

Q必须先将它们的值保存到栈中再使用它们,并在返回P之前回复它们的值

所以为了减少准备和结束阶段的开销,每个过程应该优先使用EAX、ECX、EDX寄存器

image-20250113214353157

函数参数:从左到右,从下到上

选择语句的机器级表示

if~else
image-20250113214615069
switch~case
image-20250113214628555

循环语句的机器级表示

do-while
while
for
递归

复杂数据类型的分配与访问

数组和指针的分配与访问

数组的定义
image-20250113214928117
数组与指针
image-20250113215121532

结构体数据的分配和访问

联合体数据的分配和访问

数据的对齐

posted @ 2026-01-21 21:44  Pocon  阅读(39)  评论(0)    收藏  举报