当前位置: 首页 > 网络应用技术

[从零学习汇编语言] - 注册和内存访问

时间:2023-03-06 11:57:07 网络应用技术

  本系列博客文章基于老师Wang Shuang <汇编语言 第四版> 一本书,您需要自己接受同学的需求:

  链接:https://pan.baidu.com/s/1nagd1z15ltk1buh92xmica提取代码:xlzb

  此外,书中提到的DOSBOX软件不想访问官方网站下载。

  链接:https://pan.baidu.com/s/1o6pnlb_hn-wus2avicnpcw提取代码:xlzb

  在这里,我们需要查看有关登记册的一些基本知识。如果您没有登记册的基础,建议您先阅读此博客:[零学习语言学习]

  还记得我们之前提到的四个16位通用登记册吗?AX,BX,CX,DX,当时,我们进行了一个小实验,以证明这四个十六个登记册分别来自高八个寄存器和第一名。,让我们再次进行此实验:第一步:通过R指令查看寄存器的内容。在这里,我们观察到与此相对应的与AX寄存器相对应的内存数据为16。AH和AL寄存器分别观察斧头寄存器的更改。ff,Al寄存器的值修改为00,然后我们目前观察到斧头寄存器的值,并发现已更新了它到FF00,哪个证明斧头寄存器由AH寄存器和AL寄存器组成。那么设计师为什么将16个寄存器分为两个八个寄存器?实际上,这是为了使寄存器更灵活地适应不同的数据类型长度。记住前面提到的两种类型的数据?

  然后想想我们前面提到的斧头寄存器,由两个八位寄存器组成,因此16位字体数据由两个八个数字字节数据组成。DataA 16-数字的两个字节由高八和低级别的方法形成。在验证我的猜想的过程中,我进行了另一个实验:第一步:到指定内存的输入指令以观察数据组合。在这里,我们可以在2000:0000地址观察01和02的两个位置。八个位置内存数据组合构成了我们输入的1122。这里的仔细合作伙伴可以观察到一个现象:16位数字1122中的22个范围放在内存中。为什么?这主要是由于内存中字体数字的排序规则是高数字+低数字。这里的高数字是指在相邻内存中具有较大地址编号的较大较大的数字。

  还记得我们之前介绍的细分寄存器吗?

  PS:如果您忘记了您的朋友或未知的朋友,建议首先查看登记册的基本知识:[零 - 学习的集会语言研究] - 登记册的详细说明

  当CPU想要读取和编写一个内存单元时,必须先给出内存单元的地址。在8086CPU中,内存地址由段地址和偏移地址组成。段落地址。在寄存器的四个部分中,DS寄存器主要负责存储要访问的数据段地址。1000H单元的内容,我们可以使用以下方式:

  在这里,我们解释了我们对不是很好的小朋友所做的

  如果您不知道该说明的含义的含义,建议观看以下博客文章以进行学习:[从零 - 学习汇编语言学习]

  小心的同学应观察一个新的知识点:[0]指令[0]中[0]的概念,这实际上是[地址]的表达式,其中记忆单元的物理地址。物理的表达方法地址是段地址×16+偏移地址,其中该段的地址存储在DS段寄存器中,偏移地址对应于[地址]中的地址。这次,我们回顾了刚运行的过程,我们了解什么吗?

  我在演示中经常使用MOV说明,但我没有详细谈论此说明的含义。在那段时间的学习时间里,我相信同学已经有足够的基础来理解交易所的指示。MOV指令是什么?MOV指令是传输指令,这意味着一个字节的操作数量,单词或双字符从源位置传输到目标位置。它可以表示为:MOV目标位置,源位置和源位置操作编号不会发生。

  当然,我们还需要注意一些特殊的MOV说明:

  在这里,我们只需测试AX寄存器的值,然后将AX的值提供给BX:

  什么是添加指令?添加的含义是两个添加(不包括进气)并将操作员授予目标寄存器。添加指令支持的格式也与MOV相似:因为添加指令和MOV指令基本相同除语义外,我们简单地演示了添加指令的效果:分配斧头寄存器1,分配BX寄存器2,计算AX+BX的值

  与添加说明相反,子指令是组件中的减法操作。除语义外,几乎没有差异,因此我们直接研究了效果:分配AX 2,BX分配1,计算AX-BX,计算AX-BX

  今天,我们介绍了通过段寄存器的偏移地址直接访问内存单元的方法,并介绍了此阶段使用频率最高的三个指令。我希望在阅读它之后,加深印象。嗯,这是当今内容的终结。那些有疑问的人欢迎在评论领域留下消息或私人信件博客。博客作者将尽快为您回答。代码字并不容易。我觉得收获的朋友记得要注意博客作者的一个屁股和三个连续的公司。

  原始:https://juejin.cn/post/7099637923414278174