转载必须注明出处,违者必究。http://www.cnblogs.com/dennisOne
典型CPU的构成
一个典型的CPU是由运算器、控制器、寄存器等器件构成。在CPU中:
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
- 内部总线连接CPU的各种器件,在它们之间进行数据的传送。
8086CPU的通用寄存器
- 8086CPU的所有CPU都是16位的,可以存放2个字节。
-
为了保证兼容,8086CPU通用寄存器AX,BX,CX,DX可划为两个可独立使用的8位寄存器来使用。
字在寄存器中的存储
8086CPU可以一次性处理两种尺寸的数据。一种是字节(byte),可以存在8位寄存器中,一种是字(word),可以存在16位寄存器中。
几条简单的汇编指令
总结:
- 指令的两个操作对象的位数应当一致。 诸如mov ax bl和mov al 2000都是错误的指令
- ah和al是两个独立的寄存器,CPU在执行指令的时候将ah和al看成两个不相关的寄存器。
- ax和al进位时进位值并不保存在ax和al中,而是保存在标志位中。
物理地址
- 内存地址空间是一个线性空间,每个内存单元都有唯一的地址,称为物理地址。
- CPU通过地址总线送入寄存器的,必须是一个内存单元的物理地址。必须在CPU内部形成物理地址。
-
8086CPU是16位结构的。表现在:
(1). 运算器 一次最多可以处理16位的数据。
(2). 寄存器的最大宽度为16位。
(3). 寄存器和运算器之间的通路是16位的。
-
8086CPU的地址总线宽度为20位,可以传送20位地址,达到1M寻址能力。8086CPU又是16位结构的。8086CPU采用两个16位地址合成的方式来形成20位的物理地址。
段
- 内存并没有分段,而是CPU使用"分段"的方式管理内存。
- 基础地址(段地址DA*16)+偏移地址(EA)=物理地址
- 基础地址(段的起始地址)是16的倍数。偏移地址为16位,所以一个段的最大长度最大为64KB。
- 可以根据需要,将地址连续、起始地址位16的倍数的一组内存单元定义为一个段。
-
"数据在21F60H内存单元中"的表述:
"数据存在内存2000:1F60单元中"或"数据存在内存的2000段中的1F60单元中"
段寄存器
- 8086CPU有4个段寄存器:CS、DS、SS、ES。
-
CS和IP是指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
8086CPU的工作过程:
(1). 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2). IP自动指向下一条指令;
(3). 执行指令。(转到步骤(1), 重复这个过程)
-
修改CS、IP的指令
(1). mov指令不能用于设置CS、IP的值。8086CPU使用jmp命令(转移指令)来改变CS、IP的值。
(2). "jmp 段地址: 偏移地址" 修改CS和IP
"jmp 某一合法寄存器" 修改IP
8086CPU不支持 "jmp 常量"指令。
Debug的几个常见指令
- R命令查看、改变CPU寄存器的内容。
- D命令查看内存中的内容。
- E命令改写内存中的内容。
- U命令将内存中的机器指令翻译成汇编语言。
- T命令执行一条机器指令。A命令以汇编指令的格式在内存中写入一条机器指令。
- P命令执行int 21中断命令。执行到loop指令,Debug会自动重复执行循环中的指令,直到(cx)=0为止。
- G命令一次性执行到某条命令[类似于断点]。