技术

ICS 与 8086 复习附录:考前速查与易错点

ICS 与 8086 汇编复习 · 速查附录 系列目录 · 上一篇

这份附录适合在完成正文后检查遗漏。遇到不能解释的条目,应回到对应篇目重做算例;能背出结论而不能写出位宽和平台前提,仍容易在变式题中出错。

高频计算关系

主题 计算关系或判定规则 对应篇目
w 位无符号范围 0…2^w-1 03
w 位补码范围 -2^(w-1)…2^(w-1)-1 03
补码真值 最高位1时,无符号值-2^w 03
8086 段基址 段值×10H 05
8086 物理地址 段值×10H+有效地址,边界按相应环境处理 05—06
IA32 比例变址 基址+变址×比例+位移 11
binary32 规格化值 (-1)^s×(1+F/2^23)×2^(E-127) 04
binary32 最小正值 非规格化 2^-149;规格化 2^-126 04
binary64 最小正值 非规格化 2^-1074;规格化 2^-1022 04
一维数组元素地址 首地址+i×元素大小 14
二维连续数组地址 对 T a[R][C],首址+(i×C+j)×sizeof(T) 14
结构体成员对齐 按指定 ABI 将当前偏移上取整到成员对齐倍数 14
PC 相对重定位 按题设重定位类型计算,常见形式 S+A-P 15

公式中的 w 是总位数,F 是小数字段的无符号整数值。算地址时十进制与十六进制应明确标出;重定位的 P、A 等符号也必须以相应 ABI 定义为准。

条件跳转速查

以下针对 CMP A,B 所完成的 A-B;这是 Intel 目的在前的书写顺序。AT&T 通常写源 B 在前、目的 A 在后。

关系 无符号 有符号
等于 JE,ZF=1 JE,ZF=1
不等于 JNE,ZF=0 JNE,ZF=0
大于 JA,CF=0且ZF=0 JG,ZF=0且SF=OF
大于等于 JAE,CF=0 JGE,SF=OF
小于 JB,CF=1 JL,SF≠OF
小于等于 JBE,CF=1或ZF=1 JLE,ZF=1或SF≠OF

CF 与 OF 含义不同;比较之前若有其他指令改写标志,跳转就可能不再反映原 CMP。具体标志定义见正文07、08、12及各篇官方参考。

容易失分的区别

容易混淆的两项 应怎样区分
位模式与真值 先确定有无符号、位宽、整数或浮点,再解释位串
进位与溢出 CF服务无符号进借位,OF服务有符号范围
机器截断与 C 有符号溢出 不能把加法器低位结果当作普通 C 的保证
MOV 与 LEA MOV取得操作数内容,LEA计算有效地址
OFFSET 与变量名 在 MASM 中前者求偏移,类型变量常表示内存操作数
段值与段基址 段基址由段值左移四位得到
偏移与物理地址 8086 先算偏移,再选择段并形成物理地址
ASSUME 与初始化 DS ASSUME是汇编时声明,初始化需要运行时指令
END 与程序退出 END结束源文件并可指定入口,不会执行 DOS 退出
不改标志与标志未定义 前者可保留原值,后者不能继续推断
LOOP 与 DEC/JNZ 循环效果可近似,但标志影响不同
REPE 的第一次与后续比较 CX非零即可开始第一次;后续根据新ZF决定重复
CX为零与字符串相等 最后一个字符也可能失败,要结合ZF和长度
堆与栈 heap和stack是不同区域,中文“堆栈”常指stack
CALL 与函数序言 CALL保存返回地址;局部空间和寄存器保存由代码及约定处理
ELF节与装载段 链接视图看节,装载映射主要看程序头中的段
COMMON 与弱符号 历史合并规则、编译选项与ELF符号绑定应分开

原材料中的重点勘误

以下仅列会直接影响做题的项目,来源页码与正文对应。

原材料位置 正确规则或修正
汇编第2章第22页 BX可作8086基址寄存器,不能与AX、CX、DX一并排除
汇编第2章第39页 FS、GS属于后续处理器,不属于8086
汇编第2章第49页 16位端口地址有65536个取值,最大地址FFFFH
汇编第3章第20页 一般内存操作数地址含BP时默认段为SS
汇编第3章第42页 该例物理地址求和应为31220H
汇编第3章第98页 非零移位计数时,CF保存最后移出的位;计数为零则保留原标志
汇编第3章第113—114页 LODS只取源串;REPE/REPNE首次操作不先检查旧ZF
ICS数据表示第98页 双精度最小正非规格化数为2^-1074
ICS数据表示第188页 0.1的误差题须区分截断与默认就近偶数舍入
ICS指令系统第68页 stack与heap分开,“堆栈”不表示由两者组成
ICS指令系统第83页 16位DX/AX操作应使用匹配宽度;移两位后的OF未定义
DEBUG文档第16页 O为写端口,示例的命令字母不应写成I

最后一遍复习的检查顺序

先独立完成每篇三道自测,再检查错误属于哪一类:概念混淆、进制换算、地址计算、位宽遗漏、标志选错、边界未处理或平台假设错误。按错误类别重做相应算例,通常比从第一页重新背课件更有针对性。

程序题应先保证条件与边界正确,再检查寄存器分工,最后检查语法和运行环境。对于源代码输出题,先排除未定义行为,再讨论给定平台上可确定的结果。对于链接题,先列符号和所属文件,再算重定位;对于栈帧题,先画压栈顺序,再标地址。

系列导航

CONTINUE / PATH

从这里继续

顺着当前内容继续,或者换到另一个板块。

讨论这篇文章

关于《ICS 与 8086 复习附录:考前速查与易错点》的补充、不同意见或延伸话题,都可以留在这里。

滚动到这里时自动载入留言。