当前位置:网站首页>王爽汇编语言详细学习笔记三:寄存器(内存访问)
王爽汇编语言详细学习笔记三:寄存器(内存访问)
2022-07-28 04:34:00 【Deteriorate_Kr】
文章目录
前言
在第2章中,我们主要从 CPU 如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。
这一章中,我们从访问内存的角度继续学习几个寄存器。
3.1 内存中字的存储
1.CPU中,用16位寄存器来存储一个字。
2.高8位存放高位字节,低8位存放低位字节。
3.在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
比如在0地址开始存放20000(4E20H)
在上图中:
1.我们用0、1两个内存单元存放数据20000(4E20H)。
2.0、1两个内存单元用来存储一个字,这两个单元可以看做一个起始地址为0的字单元(存放一个字的内存单元,由0、1两个字节单元组成)。
3.对于这个字单元来说,0号单元时低地址单元,1号单元是高地址单元,则字型数据4E20H的低位字节存放在0号单元中,高位字节存放在1号单元中。
4.同理将2、3号单元看做一个字单元,它的起始地址为2。在这个字单元中存放数据18(0012H),则在2号单元中存放低位字节12H,在3号单元中存放高位字节00H。
3.1.1 字单元
字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
在以后的学习中,我们将起始地址为N的字单元简称为N地址字单元。比如一个字单元由2、3两个内存单元组成,则这个字单元的起始地址为2,我们可以说这是2地址字单元。
3.1.2 问题分析



3.1.3 小结
结论:
任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2 DS和[address]
1.
2.
mov al,[0]说明也可以使用mov指令将一个内存单元中的内容送入一个寄存器中。从哪一个内存单元送到哪一个寄存器中呢?在指令中必须指明。寄存器用寄存器民来指明,内存单元则需用内存单元的地址来指明。显然,此时mov指令的格式应该是:mov 寄存器名,内存单元地址。
“[…]”表示一个内存单元,“[…]”中的0表示内存单元的偏移地址。我们知道,只有偏移地址是不能定位一个内存单元的,那么内存单元的段地址是多少呢?指令执行时,8086CPU自动取ds中的数据为内存单元的段地址。

3.2.1 问题分析


3.3 字的传送

3.3.1 问题分析1

单步跟踪后,结果如下
↓
3.3.2 问题分析2


3.4 mov、add、sub指令
1.mov、add、sub指令都会影响寄存器中的内容
2.而 cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。


1.

如上图,用A命令在一个预设的地址073F:0100处,用汇编的形式 mov ax,ds写入指令,再用T命令执行,可以看到执行的结果,段寄存器ds中的值送到了寄存器ax中。通过验证我们知道,“mov 寄存器,段寄存器”是正确的指令。
2.


自己电脑上的实验结果如下图
↓


3.



10000H中的数据都是0,DS也应该为0,0地址处的数据如上图。


答案是他们不可以对段寄存器操作。
3.5 数据段



3.5.1 问题分析

3.1~3.5小结
- 字在内存中存储时 ,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放再高地址单元中。
- 用 mov 指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
- [address]表示一个偏移地址为address的内存单元。
- 在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
- mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。
- 可以根据自己的推测,在Debug中实验指令的新格式。
检测点3.1
注意,8086CPU的寄存器都是16位,如果超出的话要舍去高位。
3.6 栈


3.7 CPU提供的栈机制
现今的CPU都有栈的设计,8086CPU也不例外。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,在基于8086CPU编程的时候,可以将一段内存当做栈来使用。



3.7.1 两个疑问




可以看出,8086CPU中,入栈时,栈顶从高地址向低地址方向增长。
问题分析 3.6

答案如下:



pop指令的执行过程
pop ax的执行过程与push ax 刚好相反


注意

3.8 栈顶超界的问题

下面两张图描述了在执行push、pop指令后,栈顶超出栈空间的情况。







3.8.1 结论

3.9 push、pop指令




问题3.7


问题3.8


问题3.9


问题3.10



结论



栈的综述


3.10 栈段



问题 3.11



问题3.12


段的综述









检测点3.2
边栏推荐
- 【sylar】框架篇-Chapter8-定时器模块
- MySQL数据库————初识数据库
- 将数据库拿到的数据渲染到elementUI 中的table中去
- could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node
- MySQL partition table transformation
- 【sylar】框架篇-Chapter6-协程调度模块
- CMake使用基础汇总
- 22 openwrt uses external kernel and kernel_ config
- 031 log4j log framework
- pytorch_ Lightning in lightning_ The output of hparams.yaml in logs is null
猜你喜欢

Full resolution of the use of go native plug-ins

Information system project manager (2022) - key content: Project Procurement Management (12)

RN interface jump description

Important SQL server functions - date functions

Idea2022 change the local warehouse and configure Alibaba cloud central warehouse

could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node

Campus stray cat information recording and sharing applet source code

Jupyter notebook installation code prompt function

Render the data obtained from the database to the table in elementui

Password key hard coding check
随机推荐
mysql分区表改造
Nat fundamentals and private IP
RN interface jump description
[practice] use the web animations API to realize a clock with accurate timing
Information system project manager (2022) - key content: Strategic Management (17)
网页源代码查看竟然有这么多方法!你都知道吗?
After login, the upper right corner changes to enter the login status
Go grpc: a solution of connection reset by peer
校园流浪猫信息记录和分享的小程序源码
23 openwrt switch VLAN configuration
What to do when encountering slow SQL? (next)
Fedformer MOE module
[Sylar] framework -chapter12 bytearray module
When import is introduced, sometimes there are braces, sometimes there are no braces. How should we understand this?
Idea start project MVN command terminal cannot recognize "MVN" item as cmdlet
C # cross thread refresh foreground UI
【sylar】框架篇-Chapter10-Address 模块
[Sylar] framework chapter -chapter10-address module
Sort - cardinal sort
【sylar】框架篇-Chapter11-Socket 模块




