8086汇编学习第3篇---寄存器(内存访问)

举报
CodeAllen 发表于 2021/10/30 01:14:58 2021/10/30
【摘要】 目录 3.1 内存中字的存储 3.2 DS和[address] 3.3 字的传送 3.4 mov、add、sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制 3.8 栈顶超界的问题 3....

目录

3.1 内存中字的存储
3.2 DS和[address]
3.3 字的传送
3.4 mov、add、sub指令
3.5 数据段
3.6 栈
3.7 CPU提供的栈机制
3.8 栈顶超界的问题
3.9 push、pop指令
3.10 栈段

引言

在第2章中,我们主要从 CPU 如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。

这一章中,我们从访问内存的角度继续学习几个寄存器。

3.1 内存中字的存储

在0地址处开始存放20000(4E20H):(高对应高地址位)
在这里插入图片描述
注意:0号单元是低地址单元,1号单元是高地址单元。

问题:
(1)0地址单元中存放的字节型数据是多少?
20H (一个内存地址存放的就是一个字节)
(2)0地址字单元中存放的字型数据是多少?
4E20H
(3)2地址字单元中存放的字节型数据是多少?
12H
(4)2地址单元中存放的字型数据是多少?
0012H(字型考虑两个字节)
(5)1地址字单元中存放的字型数据是多少?
124EH

结论
任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。

3.2 DS和[address]

CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址;
在8086PC中,内存地址由段地址和偏移地址组成。
8086CPU中有一个 DS寄存器,通常用来存放要访问的数据的段地址。

例如:我们要读取10000H单元的内容可以用如下程序段进行:
mov bx,1000H
mov ds,bx
mov al,[0]

上面三条指令将10000H(1000:0)中的数据读到al中。

mov al,[0]
已知的mov指令可完成的两种传送功能:
(1)将数据直接送入寄存器;
(2)将一个寄存器中的内容送入另一个寄存器中。

除此之外,mov 指令 还可以将一个内存单元中的内容送入一个寄存器。

从哪个内存单元送到哪个寄存器中呢?

mov指令的格式:
mov 寄存器名,内存单元地址

“[…]”表示一个内存单元, “[…]”中的0表示内存单元的偏移地址。

那么内存单元的段地址是多少呢?
执行指令时,8086CPU自动取DS中的数据为内存单元的段地址。
如何用mov指令从10000H中读取数据?
10000H表示为1000:0(段地址:偏移地址)
将段地址1000H放入ds
用mov al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中)

如何把1000H送入ds?
传送指令 mov ax,1
相似的方式 mov ds,1000H?
8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。
(硬件设计的问题)
mov ds,1000H 是非法的。

问题:
写几条指令,将al中的数据送入内存单元10000H?(思考后分析)

分析问题本质:
怎样将数据从寄存器送入内存单元?
结论:mov bx,1000H
mov ds,bx
mov [0],al (一种合理的回答)

3.3 字的传送

因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位的数据,也就是一次性传送一个字。
比如:

在这里插入图片描述
ds为段地址
ax 是偏移地址 【0】 ,ax就是十六进制

问题3.3:内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值。
在这里插入图片描述
debug的使用
R命令查看、改变CPU寄存器的内容;
D命令查看内存中的内容;
E命令改写内存中的内容;
U命令将内存中的机器指令翻译成汇编指令;
T命令执行一条机器指令;
A命令以汇编指令的格式在内存中写入一条机器指令。

实际操作:
先把数据存进去:
e 1000:0 23 11 22 66

在这里插入图片描述
开始操作步骤:
可以先看下,是没有数据的,可以随意更改

在这里插入图片描述
写入内存,偏移地址100
在这里插入图片描述
输入:
在这里插入图片描述
查看答案:
在这里插入图片描述
问题3.4:内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值。
在这里插入图片描述
在这里插入图片描述
写入并查看数据:
在这里插入图片描述
cs ip是073F
开始写入:

在这里插入图片描述
被坑了,注意是十六进制还是十进制
继续:

在这里插入图片描述

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/98524228

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。