您的位置:首页 > 其它

<学习笔记>王爽汇编语言__再论寄存器

2011-09-12 18:15 344 查看
在上篇文章中,我们主要从CPU的角度复习了8086CPU的逻辑结构,形成物理地址的方法和相关的一些寄存器。这篇文章我们一内存访问的角度来继续学习几个寄存器。

内存中字的存储:

CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节,8位),则一个字节要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。高地址单元和低地址单元组成了字单元。

DS和[address]:

CPU在读写一个内存单元时,必须给出这个内存单元的地址,在8086CPU中,内存地址单元有段地址和偏移地址组成。DS寄存器通常用来存放要访问数据的段地址。比如我们要访问10000H单元的内容,可以用如下的程序段进行:

mov bx,10000H
mov ds,bx
mov al,[0]


注意,DS寄存器不支持直接将数据放入其中,需要用一个寄存器作为中间变量。

mov al,[0] = mov al,ds:[0] 即将10000H:0处内存单元的内容存入al中。

mov ,add ,sub指令:

mov指令有以下几种形式:

mov 寄存器 , 数据 例如:mov ax , 8

mov 寄存器 , 寄存器 例如:mov ax , bx

mov 寄存器 , 内存单元 例如:mov ax , [0]

mov 内存单元 , 寄存器 例如:mov [0] . ax

mov 段寄存器 , 寄存器 例如:mov ds , ax

add和sub指令同mov一样,都有两个操作数,它们可以有以下几种形式:

add 寄存器 , 数据 例如:add ax , 8

add 寄存器 , 寄存器 例如:add ax , bx

add 寄存器 , 内存单元 例如:add ax , [0]

add 内存单元 , 寄存器 例如:add [0] , ax

sub 寄存器 , 数据 例如:sub ax , 9

sub 寄存器 , 寄存器 例如:sub ax , bx

sub 寄存器 , 内存单元 例如:sub ax,[0]

sub 内存单元 , 寄存器 例如:sub [0] , ax

CPU提供的栈机制:

8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)。

CPU如何知道栈顶的位置?显然,也应该有相应的寄存器来存放栈顶的地址。8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。

push和pop指令有以下几种格式:

push 寄存器 ;将一个寄存器的数据入栈

pop 寄存器 ;出栈,用一个寄存器接收出栈的数据

push 段寄存器 ;将一个段寄存器中的数据入栈

pop 段寄存器 ;出栈,用一个段寄存器接收出栈的数据

push 内存单元 ;将一个内存单元中的数据入栈

pop 内存单元 ;出栈,用一个内存字单元接收出栈数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: