汇编语言:四、寄存器(内存访问)

内存字段的存储

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无法保证我们所设定的栈的范围,所以编程时是否超界要自己注意。

PUSH和POP指令

push、pop的一些用法

你可能感兴趣的:(汇编语言:四、寄存器(内存访问))