1 字在寄存器中的存储
8086 CPU可以一次性处理字节(byte)和字(word)两种尺寸数据。
2 AL AH是独立的寄存器,CPU在执行指令时,认为AH AL是两个不相关的寄存器。
若 AL = 90 H ADD AL,90H 则AX = 20H, 产生的进位不会存储在AH中。
3 8086 CPU读写内存步骤:
1) CPU中的相关部件提供两个16位的地址:段地址和偏移地址;
2) 段地址和偏移地址通过内部总线送入地址加法器;
3) 地址加法器将两个16位地址合成一个20位物理地址;
4) 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
5) 输入输入控制电路将20位地址送入地址线;
6)20位物理地址呗地址总线送入外部存储器。
4 物理地址 = 段地址 *16 +偏移地址 的本质含义
段地址包含着“段”的概念,但这种说法对我这种初学者产生了误导,误以为内存被划分成了一个一个的段,每一个段有一个段地址,我上学时就一直这么认为的,但这是错误的理解。
内存并没有分段,段的划分来自CPU,CPU用“段地址 *16 +偏移地址”的方式管理内存。因此段的概念只是用来寻址的,不是用来划分内存的。段地址+偏移地址只是一种寻址方式。
在编程时刻根据需要,将若干地址连续的内存单元看做一个段。
偏移地址是16位,所以一个段的长度最大为64KB
序号 | 物理地址 | 段地址 | 偏移地址 |
1 | 21F60H | 2000H | 1F60H |
2 | 21F60H | 2100H | 0F60H |
结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。
5 段寄存器:CS DS SS ES
6 CS IP
CPU从内存CS*16+IP段元开始,读取一条指令并执行。读取一条指令后,IP的值自动增加。
CPU工作过程:
1) 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
2) IP=IP+所读取指令的长度,从而指向下一条指令;
3) 执行指令,转到步骤1) 。
结论:读取指令后,IP自动增加后,执行指令。
7 汇编学习环境的搭建:
我搭建一个练习汇编的学习环境。软硬件配置如下:
硬件平台:x86 i7 处理器
操作系统:Win8.1
所需软件:DOSBOX MASM
由于我家电脑是64位处理器和64位的操作系统,导致DOS系统的masm程序和debug程序无法运行,因此必须安装DOSBOX软件。在DOSBOX下运行MASM和debug软件进行程序程序编译和调试。
DOSBOX使用方法:http://jingyan.baidu.com/article/ceb9fb10dc75c38cad2ba098.html
8 debug功能简介
1)用R命令查看、改变CPU寄存器内容;
2)用D命令查看内存中的内容;
3)用E命令改变内存中的内容;
4)用U命令将内存中的机器指令翻译成汇编指令;
5)用T命令执行一条机器指令;
6)用A命令以汇编指令的格式在内存中写入一条机器指令。