首页 > 其他分享 >Assembly(四)-寄存器最终章-上半部分

Assembly(四)-寄存器最终章-上半部分

时间:2024-08-09 21:53:19浏览次数:8  
标签:Assembly mov 内存 上半 寄存器 bx ds 单元

上一篇文章我们主要学习了段寄存器:CS和IP
顺便通过实验的形式将debug中常用的指令熟悉过了.
来回顾下

指令作用
R查看修改对应寄存器的内容
D查看对应内存中的内容
E修改对应内存中的内容 包括写入字符 数字 字符串
U将内存中的内容解释为对应的汇编指令
T执行对应内容中的指令(CS:IP)
A以汇编的形式写入内存

本篇文章将讲解剩余的部分

1.1 内存中的字存储

我们知道在8086CPU中,用16位寄存器来存放一个字,高8位(H)存放高字节,低8位(:L)存放低字节,在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),因此一个字要用两个连续的内存空间来存储(每个一个字节,共两个字节,16位,每个空间内存8位,1字节),字的低位字节存放在低地址,高位字节存放在高地址.
在这里插入图片描述
如图所示,不难看出 0,1 两个内存空间所组成的为 20000(4E20H) 其高位字节为4E 存放到1处,低位字节为20H存放到低处0
再来举个例子:18(0012H) 其高位为00 所以存放到3 处 低位为12 存放到2处
一个字单元就是存放一个完整的字所占的内存单元 ,这里的 01 23 都可以算作字单元
将起始地址为N的字单元简称为N地址字单元,如 一个字所占的内存空间为2,3 那么这个字单元就是2地址字单元,像图中的0012
为2地址字单元,4e20为0地址字单元

1.2 思考:

在这里插入图片描述
对于图中的表示,思考以下几个问题:

  1. 0地址单元中存放的字节数据是? 答:20H
  2. 0地址字单元中存放的字型数据是? 答:4E20H
  3. 2地址单元中存放的字节数据是? 答: 12H
  4. 2 地址字单元中存放的字型数据是? 答:0012H
  5. 1 地址单元中存放的字节数据是? 答:4EH
  6. 1 地址字单元中存放的字型数据是? 答:124EH(4686)
    所以这里的问题6就表明了 不一定是固定的两个 如 01 23 可以组成地址字单元 12 也可以

1.3 DS和[address]

我们知道 当cpu想要访问一个内存的单元时,必须要知道其物理地址,我们还知道,在8086CPU中的物理地址由段地址和偏移地址组成.DS寄存器就是存放要访问的段地址.
假设我们要读取10000H处的内容,我们可以用汇编语言来这样实现:

mov bx,10000H
mov ds,bx
mov al,[0]

这段指令的意思时将10000H中的第0块数据读入到AL中
mov指令的功能有:将数据送入寄存器,将一个寄存器的内容送入另一个寄存器.
这里还有一个功能:将内存中的数据送入一个寄存器,
这里的

mov al,[0]

就是用到了这一点
其中[xxx]表示一个内存单元,[0]表示一个内存单元的偏移地址,这个偏移是基于ds寄存器中的内容进行的,cpu在访问时,先去读取ds中的内容,后根据给定的偏移地址进行读取,因此在执行mov 指令将内存中的内容送入寄存器时,要先给出对应内存的地址,并将其送入ds寄存器中.
有人可能就想:为什么不能直接使用

mov ds,10000H

来将内存地址送入ds寄存器中呢?
很抱歉,并不可以,因为这是8086CPU的硬件设计问题,所以在送入ds寄存器中时,要从其他寄存器中传入值,再利用mov指令传送到ds寄存器中

1.3.1 思考

写出指令,将al中的数据送入到内存单元10000H处
答:

mov bx,10000H
mov ds.bx
mov [0],al

总结:mov指令的用法有:
在这里插入图片描述
继续来做问题:

问题1

给定内存空间如图所示,现执行以下指令,思考对应的寄存器变化:
在这里插入图片描述

mov ax,1000H
mov ds,ax
mov ax,[0]
mov bx,[2]
mov cx,[1]
add bx,[1]
add cx,[2]

首先毫无疑问的是 前两条指令是把ds的值变为10000H
随后开始mov ax 注意

mov ax,[0]

所处理的是将低位的值送入al中,高位的值送入ah中,从[0]开始计数,两个内存空间,一个内存空间占一个字节,一个字空间共占两个字节,因此[0]代表着1123
因此在这条指令执行后,ax变为:1123H

mov bx.[2]

执行后bx为6622

mov cx,[1]

执行后cx变为2211

add bx,[1]

bx现在的值为:6622
加上[1]处的2211 变为 8833
具体分析如王爽老师的表格所示
在这里插入图片描述

问题2

内存单元如图所示:
在这里插入图片描述
现有指令:

mov ax,1000H
mov ds,ax
mov ax,11316
mov [0].ax
mov bx,[0]
sub bx,[2]
mov [2],bx

这里的sub指令为相减的作用
具体来说:
sub a,b将a与b相减,结果存在a中.
前两条指令的作用是将10000H存入到ds寄存器中,很常规了
接下来看第三条指令,将11316送入ax中,但是很明显,11316并不是一个16进制数字,而是一个10进制数,这里需要将其转化为16进制数字;2C34H
因此这里的ax为2C34H
随后,将ax中的值送入到[0]处
因此10000H处变为34 10001处变为2C
在这里插入图片描述
然后继续:执行
mov bx,[0]
将2C34送入bx,bx变为2C34H
随后执行:
sub bx,[2]
也就是bx需要与1122做差 变为 1B12H
随后执行
mov [2],bx将bx中的内容存入内存[2]处,因此10003H变为1B 10002H变为12
在这里插入图片描述
下半部分将带来更加精彩的栈问题.以及pop push指令.

标签:Assembly,mov,内存,上半,寄存器,bx,ds,单元
From: https://blog.csdn.net/baidu_33751906/article/details/141071132

相关文章

  • 【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理
    目录STM32IO口取反|寄存器方式|异或运算符|原理1.引言2.GPIO基础知识2.1GPIO概述2.2STM32的GPIO架构2.3GPIO寄存器简介3.GPIO引脚取反原理3.1寄存器操作实现取反3.2异或运算符的应用4.示例代码4.1基础示例:LED闪烁4.2应用实例:继电器控制5.GPIO引脚......
  • LLVM中四种寄存器分配算法及开启选项
    在LLVM编译器中,一共有四种寄存器分配算法:BasicRegisterAllocator、FastRegisterAllocator、PBQPRegisterAllocator、GreedyRegisterAllocator。FastRegisterAllocator这种分配器是局部的,作用于各个基本块,它尽量地将值保持在寄存器中并重用它们。BasicRegisterAl......
  • 步长制药上半年净利润巨降:销售费用居高不下,5700万买酒
    《港湾商业观察》施子夫 李镭作为国内最大的心脑血管中成药生产巨头,步长制药(603858.SH)近年来天价的销售费用引发了外界高度关注。与此同时,从最新2024上半年业绩预告来看,步长制药净利润更是出现了腰斩式下滑。当销售费用连年止不住越来越高之际,连酒的采购三年都超过5700万......
  • 百洋医药上半年利润预增:股权质押下,8.8亿高溢价关联收购引关注
    《港湾商业观察》廖紫雯日前,青岛百洋医药股份有限公司(以下简称:百洋医药,301015.SZ)发布2024年半年度业绩预告,披露今年上半年公司利润端得到一定增长,但相较于2023年上半年利润增速有所下滑。此前7月12日,公司发布公告披露已完成对上海百洋制药股份有限公司共60.199%的股权收购,......
  • 第6章>>实验6:PS(ARM)端Linux RT与PL端FPGA之间(通过Reg寄存器进行通信和交互)-《LabVIEW Z
    1、实验内容       前面第五章入门实验和上一个实验5里面我们向大家展示通过了布尔类型的Reg寄存器通道实现了ZYNQPS端ARM和PL端FPGA二者之间的开关量交互,抛砖引玉。       从本节实验开始,接下来4个实验我们将着重向大家讲解更为通用和更为全面的4种交互方......
  • 嵌入式控制器(STM32)->栈指针累寄存器
    全局变量和局部变量从存储角度理解全局变量具有固定的地址,每次读写都是一个地址,而且它的存储区域从使用到使用结束一直存在局部变量再RAM中的地址不固定,采用先进后出的RAM区域,称为栈区寄存器分为通用寄存器(R0-R12)和特殊寄存器(R13-R15)ARM基本指令系统数据传送,数据操作,跳......
  • 74HC165移位寄存器的作用
        74HC165是一种8位串行输入并行输出移位寄存器,常用于扩展微控制器的输入引脚数量。它能够将多个输入信号通过少数几个控制引脚读取,从而节省微控制器的输入引脚资源。以下是其主要功能和应用:主要功能 输入扩展:可以读取多个数字输入信号。串行数据传输:将多个并行......
  • 第二章 寄存器
    第二章寄存器一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。在CPU中:运算器进行信息处理。寄存器进行信息存储。控制器控制各种器件进行工作。内部总线连接各种器件,在它们之间进行数据的传送。2.1通用寄存器AX、BX、CX、DX这4个寄存器通......
  • HDLBits答案(1)_移位寄存器+更多电路
    前言    由于开发板教学内容部分,代码涉及到状态机内容,HDLBits题库只刷到了计数器,因此后续3至4天决定继续刷题,刷完状态机和全部HDLBits题库。今天刷完移位寄存器+更多电路,以下是书写的代码。题库Question1:构建一个4位移位寄存器(右移),具有异步复位、同步加载和使能......
  • 使用GG获取函数寄存器地址
    此方法是从神秘老师(一只神秘)的视频得到的灵感,分享出来也是经过其本人的同意视频如下也希望大家多多支持神秘老师捏多的不说,少的不唠,也是进入正题我们先找到需要获取的函数然后进行分配内存页,保存该地址然后在函数头进行如下的操作码修改意思就是:把该地址传给r1再......