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

在上篇文章中,我们主要从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 内存单元    ;出栈,用一个内存字单元接收出栈数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值