3.程序的机器级别代码表示
大约 10 分钟
考试要求
- 只需关注x86汇编语言;若考察其他汇编语言题目会详细注释
- 题目给出某段简单程序的C语言、汇语言、机器语言表示。能结合C语言看懂汇编语言的关键语句(看懂常见指令、选择结构、循环结构、函数调用)
- 汇编语言、机器语言一一对应,要能结合汇编语言分析机器语言指令的格式、寻址方式
- 不会考:将C语言人工翻译为汇编语言或机器语言
常用汇编指令介绍
相关寄存器
【课件】4.3.1_1高级语言与机器级代码之间的对应
4.3.1_1高级语言与机器级代码之间的对应
00:00
处理器中有 8 个 32 位的通用寄存器。为了向后兼容, EAX、EBX、ECX 和 EDX 的高两位字节和低两位字节可以独立使用, E 为 Extended, 表示 32 位 的寄存器。例如, EAX 的低两位字节称为 AX, 而 AX 的高低字节又可分别作为两个 8 位寄存器, 分别称为 和 。
除 EBP 和 ESP 外, 其他几个寄存器的用途是比较任意的。

提示
指令中未指明长度,默认为 32 位
汇编指令格式
4.3.1_3ATu0026T格式和Intel格式
00:38
【课件】4.3.1_3ATu0026T格式和Intel格式

常用指令
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



注意栈的画法

选择语句的机器级表示
4.3.3选择语句的机器级表示
02:41
【课件】4.3.3选择语句的机器级表示
条件码
- CF: 进(借)位标志。最近无符号整数加(减)运算后的进(借)位情况。有进(借) 位时, ; 否则 。
- ZF: 零标志。最近的操作的运算结果是否为 0 。若结果为 ; 否则 。
- SF: 符号标志。最近的带符号数运算结果的符号。若为负, ; 否则 。
- OF: 溢出标志。最近的带符号数运算结果是否溢出。若溢出, ; 否则 。
注意
- OF 和 SF 对无符号数运算来说没有意义, 而 对带符号数运算来说没有意义。
- 不论是无符号数还是带符号数,都以二进制代码形式无差别地存放在机内,计算机并不知道哪些数是无符号数,哪些数是带符号数。即便是两个带符号数相加,也会导致CF的变动,只是CF的结果对带符号数是没有意义的。同理,两个无符号数相加,也会导致OF和SF的变动,只是OF和SF的结果仅对带符号数有意义。
循环语句的机器级表示
4.3.4循环语句的机器级表示
08:01
【课件】4.3.4循环语句的机器级表示
