汇编语言:四、寄存器(内存访问)
2019-04-27 本文已影响0人
Zidahong
内存字段的存储
8086cpu用16位存储一个字。
高八位存放高字节,低八位存放低字节。
内存单元是字节单元(一个单元存放一个字节)。
一个字用两个连续的内存单元存放。
字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。
高地址存放高字节,低地址存放低字节。
以后,我们将起始地址为N的字单元称为N地址字单元。
DS和[address]
DS寄存器:存放要访问数据的段地址
[addreess]:表示偏移地址
用一个例子来说明:
解析下列指令:
指令1、 将数据1000H存入bx中,对应第一条指令。
2、将bx中的数据存入ds中。
3、将段地址为1000H,偏移地址为0的单元中的数据送入al中。
在这段代码运行过程中,先将1000H存入ds中,存入之后,CPU读取数据时会以ds中的数据地址为段地址。
第三条指令中[0]表示偏移地址为0,只有偏移地址是无法寻址的,CPU将ds中的数据作为段地址读取,这样就知道了其地址=段地址*16+偏移地址。从而将1000:0中的数据送入al中。
字的传送
字的传送例子mov、add、sub指令
mov:移动,mov ax,bx 将bx中的值移动到ax中
add:加,add ax,bx 将ax和bx的值相加然后放到ax中
sub:减,sub ax,bx 将ax中的值减bx然后放到ax中
1、mov的用法
mov的用法2、add和sub的用法
add和sub的用法栈
栈:先进后出;
CPU提供的栈机制
8086CPU提供入栈和出栈两个命令
两个最基本的为:
PUSH:入栈
POP:出栈
8086CPU的栈操作SS和SP寄存器
上文所描述的内容有两点疑问:
1、CPU如何知道我们要用来当作栈使用的内存。
2、执行push,pop时,如何知道哪个是栈顶单元。
CPU通过SS和SP寄存器来解决上诉两个内容
任意时刻,SS:SP指向栈顶元素,ss存放段地址,SP存放偏移地址。
push指令的执行过程栈顶超界问题
8086CPU无法保证我们所设定的栈的范围,所以编程时是否超界要自己注意。