跳至主要內容

3.程序的机器级别代码表示

𝓳𝓭𝔂𝓼𝔂𝓪大约 10 分钟

考试要求

  1. 只需关注x86汇编语言;若考察其他汇编语言题目会详细注释
  2. 题目给出某段简单程序的C语言、汇语言、机器语言表示。能结合C语言看懂汇编语言的关键语句(看懂常见指令、选择结构、循环结构、函数调用)
  3. 汇编语言、机器语言一一对应,要能结合汇编语言分析机器语言指令的格式、寻址方式
  4. 不会考:将C语言人工翻译为汇编语言或机器语言

常用汇编指令介绍

相关寄存器

【课件】4.3.1_1高级语言与机器级代码之间的对应

4.3.1_1高级语言与机器级代码之间的对应

00:00

x86x 86 处理器中有 8 个 32 位的通用寄存器。为了向后兼容, EAX、EBX、ECX 和 EDX 的高两位字节和低两位字节可以独立使用, E 为 Extended, 表示 32 位 的寄存器。例如, EAX 的低两位字节称为 AX, 而 AX 的高低字节又可分别作为两个 8 位寄存器, 分别称为 AH\mathrm{AH}AL\mathrm{AL}
除 EBP 和 ESP 外, 其他几个寄存器的用途是比较任意的。

image.png
image.png

提示

指令中未指明长度,默认为 32 位

汇编指令格式

4.3.1_3ATu0026T格式和Intel格式

00:38
【课件】4.3.1_3ATu0026T格式和Intel格式

image.png
image.png

常用指令

4.3.1_2常用的x86汇编指令

00:36
【课件】4.3.1_2常用的x86汇编指令

过程调用的机器级表示

4.3.5_1Call和ret指令(函数调用的机器级表示)

08:20
4.3.5_2如何访问栈帧(函数调用的机器级表示)

11:59
4.3.5_3如何切换栈帧(函数调用的机器级表示)

00:03
4.3.5_4如何传递参数和返回值(函数调用的机器级表示)

00:52
image.png
image.png
image.png
image.png
image.png
image.png

注意栈的画法

image.png
image.png

选择语句的机器级表示

4.3.3选择语句的机器级表示

02:41
【课件】4.3.3选择语句的机器级表示

条件码

  • CF: 进(借)位标志。最近无符号整数加(减)运算后的进(借)位情况。有进(借) 位时, CF=1\mathrm{CF}=1; 否则 CF=0\mathrm{CF}=0
  • ZF: 零标志。最近的操作的运算结果是否为 0 。若结果为 0,ZF=10, \mathrm{ZF}=1; 否则 ZF=0\mathrm{ZF}=0
  • SF: 符号标志。最近的带符号数运算结果的符号。若为负, SF=1\mathrm{SF}=1; 否则 SF=0\mathrm{SF}=0
  • OF: 溢出标志。最近的带符号数运算结果是否溢出。若溢出, OF=1\mathrm{OF}=1; 否则 OF=0\mathrm{OF}=0

注意

  1. OF 和 SF 对无符号数运算来说没有意义, 而 CF\mathrm{CF} 对带符号数运算来说没有意义。
  2. 不论是无符号数还是带符号数,都以二进制代码形式无差别地存放在机内,计算机并不知道哪些数是无符号数,哪些数是带符号数。即便是两个带符号数相加,也会导致CF的变动,只是CF的结果对带符号数是没有意义的。同理,两个无符号数相加,也会导致OF和SF的变动,只是OF和SF的结果仅对带符号数有意义

循环语句的机器级表示

4.3.4循环语句的机器级表示

08:01
【课件】4.3.4循环语句的机器级表示