第二章 寄存器
(1) 字数据在寄存器中的存放
一个字由两个字节组成,可以存在一个16位寄存器中。
字的高8位 → 存放于通用寄存器的高8位寄存器
字的低8位 → 存放于通用寄存器的低8位寄存器。
例:十进制数据: 20000 → AX
对应的二进制: 100 1110 0010 0000 B
对应的十六进制: 4E20 H
(2) 8086CPU给出物理地址的方法
8086在内部用两个16位地址 通过计算合成得到一个20位的物理地址。 计算合成由CPU内部的地址加法器实现。
段地址 × 16 + 偏移地址 = 物理地址
(3) 段的概念
「段」是8086为解决用16位寄存器表示20位的物理地址而引入的一个逻辑上的概念。 可以根据需要,将地址连续、起始物理地址为16倍数的一组内存单元(不超过64KB)当作一个「段」使用。
段的划分是灵活的,一个物理地址可以用不同的「段地址: 偏移地址」表示。只要满足段的起始物理地址是16的倍数。
在写法上,地址通常用十六进制表示。表示十六进制的H在「段地址: 偏移地址」中可省略不写。
(4) 寄存器CS和IP的作用、指令执行过程
CS: 代码段段寄存器,用于存放代码段的「段地址」
IP: 指令指针寄存器,用于存放CPU将要读取的指令在代码段中的偏移地址。
CS:IP对应的物理地址存放的是CPU将要读取的指令。
(CS) × 16 + (IP) → 指令的物理地址
计算机工作过程:第1步: CPU基于CS:IP,计算出物理地址,然后到相应的内存单元读取指令,送到指令缓冲区。
第2步: CPU自动修改IP的值,IP = IP + 所读取指令的长度,从而为下一条指令读取做准备;
第3步: 执行指令。 转第1步,重复此过程。
(5) 指令move, add, jmp的基本用法
在mov和add指令中,两个操作对象的位数应一致。
jump:(1) 同时修改CS、IP的内容:jmp 段地址: 偏移地址
(2) 只修改IP的内容:jmp 某一合法寄存器