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

内存字段的存储

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的一些用法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 内存中字的存储 数字:20000,十六进制:4E20H。4E20 一共 16 位,我们称之为一个字。CPU中...
    刘桂良阅读 1,344评论 0 1
  • 一、访问内存中的数据 内存地址的表示方式 方式1, 段地址(ds):[偏移地址] 方式2,[偏移地址], 这种写法...
    Rui哥阅读 14,104评论 0 4
  • 一、基础知识 mov ax,bx把BX内容送到AX中。汇编语言有3类指令,汇编指令、伪指令,其他符号。CPU通过地...
    赤果_b4a7阅读 1,887评论 0 1
  • 1 去年这时候,我周末上班路上碰到一个大叔,四五十岁左右很周正,也很有个性。 这个长得还不错的男人踩着摩托自我后方...
    陈止z阅读 287评论 0 8
  • 祖国母亲 今天是你的生日 儿女们举起闪着金星的国旗 举起金色的稻穗,玉米 给您贺喜 恭祝母亲69岁寿辰 恭祝母亲战...
    半盏流年02阅读 198评论 0 0