3 寄存器(内存访问)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fallfeather/article/details/78307439

1、内存中字的存储
CPU用16位存储器来存储一个字,高八位存放高位字节,低八位存放低位字节
内存中字的存储
我们用0和1两个内存单元存放数据20000(4E20H)
Q:0地址单元中存放的字节型数据是多少?
A:20H。
Q:0地址字单元中存放的字节型数据是多少?
A:4E20H。
Q:1地址字单元中存放的字节型数据是多少?
A:124EH。
2、DS和[address]
先给段代码:
mov bx,1000H
mov ds,bx
mov al [0]
解释(顺序不分先后):
[0] 0代表内存单元的偏移地址,既然有偏移地址,那么内存单元一定缺少段地址咯,所以段地址是直接读取ds中的数据!
ds寄存器通常用来存放要访问数据的段地址。
8086CPU不支持将数据直接送入段寄存器的操作(这属于8086CPU硬件设计的问题)。
ds[address]与C语言中的数组有些相像,都是前面存放首地址,后面偏移地址然后间接引用(就是将里面的数值取出)。
3、mov add sub的基本参数用法
以mov举例 有:
mov 寄存器,数据(mov ax,8)
mov 寄存器,寄存器(mov ax,bx)
mov 寄存器,内存单元(mov ax,[0])
mov 内存单元,寄存器(mov [0],ax)
mov 段寄存器,寄存器(mov ds,ax)
相应的可以拓展出:
mov 寄存器,段寄存器(mov ax,ds)
mov 内存单元,段寄存器(mov [0],ds)
mov 段寄存器,内存单元(mov ds,8[0])
mov add sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令。


4、8086CPU的入栈出栈操作都是以为单位进行的。
5、栈顶的段地址存放在段寄存器SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。push和pop指令执行时,CPU从SS和SP中得到栈顶的地址。
6、push pop用法:
push 寄存器 //将一个寄存器中的数据入栈
push 段寄存器//将一个段寄存器中的数据入栈
push 内存单元//将一个内存单元处的字入栈(栈操作都是以字为单位)
pop 寄存器 //出栈 用一个寄存器接受出栈的数据
pop 段寄存器 //出栈 用一个段寄存器接受出栈的数据
pop 内存单元//出栈 用一个内存字单元接受出栈的数据
push的执行步骤:
SP = SP-2;
向SS:SP指向的字单元中送入数据。
pop的执行步骤:
从SS:SP指向的字单元中读取数据;
SP = SP+2。
push pop实质上是一种内存传送指令。

猜你喜欢

转载自blog.csdn.net/fallfeather/article/details/78307439
今日推荐