您的位置:首页 > 其它

汇编语言笔记02-寄存器(CPU工作原理)

2012-10-15 10:01 363 查看
转载必须注明出处,违者必究。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命令一次性执行到某条命令[类似于断点]。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: