IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 汇编语言_一些寄存器与寻址方式 -> 正文阅读

[嵌入式]汇编语言_一些寄存器与寻址方式

Dosbox的基本使用

安装与配置

网上下载Dosbox虚拟机,安装。
在这里插入图片描述
下载调试,编译,连接的程序,放到同一个目录下(这里是D盘下的ASM目录)
在这里插入图片描述
然后打开dosbox,在里面输入
mount c d:\ASM\ (这里我的是ASM,根据自己放上面三个程序的位置写)
在这里插入图片描述
这样就挂载成功将d:\ASM\挂载到C盘上了,接下来进入虚拟机的C盘,
输入C:
在这里插入图片描述
一般来说这两步我们每次都要用,所以我们可以把它写到虚拟机开机自启的文件里,这样就不用每次打开dosbox都要输一遍了。
找到跟这个窗口一起弹出来的另一个窗,打开下面框出来的文件。
在这里插入图片描述
在最后添加下面两行,也就是之前输入的那两个
在这里插入图片描述
保存退出,再打开dosbox,他就自动执行这两句了。

在这里插入图片描述

基本指令

debug指令:这篇总结比较到位debug基本命令

汇编简介

计算机基本结构

在这里插入图片描述
可以简单地看成CPU通过一些线与存储器,和io设备(就是有数据交流地设备,比如鼠标、键盘什么的)相连
在这里插入图片描述
这张图先挂这,以后再讲。

寄存器

8086/8088中共有14个16位寄存器,寄存器在CPU内部,所以访问速度快。但容量小。寄存器就是存东西的地方
在这里插入图片描述
寄存器概览
在这里插入图片描述
这就是8086汇编要用的到的所有寄存器,先混个眼熟。

数据寄存器

就是用于数据计算用的,其中有两个比较特殊,BX(还可用于寻址),CX(还可用于循环),然后这四个16寄存器(一次可以存16位数)有两个8位寄存器组成,一个高(H),一个低(L),这两个可以分开使用。
看一下,两个寄存器的独立性:
输入指令
在这里插入图片描述
在执行第一个指令前,我们看到ax,bx都是0
在这里插入图片描述
两个赋值操作后,al,bl被赋值
在这里插入图片描述
相加后可以看到溢出的1并没有出现到ah上,而是不知道跑哪去了
在这里插入图片描述
但是如果我们把最后一句改为add ax,bx,进位就跑到ah上了
在这里插入图片描述
这说明两个8寄存器既是16寄存器一部分又是相对独立的。
AX,DX还有一些联系,这在后面讲乘除时会讲。

寻址方式

在这里把后面有些寄存器一起讲了
首先谈一下物理地址和逻辑地址的问题,物理地址顾名思义就是本来的地址,但是这个我们一般不用,因为电脑存东西的时候是乱取的,在物理地址上不连续。所以我们给我们申请的地址编号,这样他们就连续了,这就叫做逻辑地址,我们一般直接操作逻辑地址。
然后再给出一些常识:

  1. 8086最小的操作单位是是字节(8位),不能像一些单片机(比如51,32)一样实现位操作
  2. 8086是小端系统,就是一个字(比如说16位)有两个字节,那么我村这个字的时候,连续占16位地址,低8位放在低的8位地址上,高8位放到高的8位地址上
  3. 8086的地址有段地址和偏移地址组成
    解释一下第三点:
    还记得这张图吗,由于CPU内部的寄存器是16位的,而外部的地址线有20根(即有220个内存单元(字节))那显然一个寄存器无法表示全部地址。
    在这里插入图片描述
    解决方法是用两个寄存器,由于16+16=32>20,我们必须设计一种对应的方式使两个16位的得到20位的地址。那么我们就让第一个寄存器乘8(24)让它变成20位,然后再加上第二个寄存器,第一个寄存器就叫做端地址寄存器,第二个叫做偏移地址寄存器,两个寄存器的值用:隔开,像这样:在这里插入图片描述

当然这里的数都是16位数。然后一个逻辑地址有很多种段地址和偏移地址的组合方式只要算出来结果是他就行了。
一个段里最多有264个字节,因为偏移地址有16位嘛

这种方式有点像什么呢,相当于是告诉你第几层后在走几步来确定房间。

具体操作时的寻址

简单的说就是如何给他地址,是直接给呢还是用寄存器

直接寻址方式(direct addressing)

[]里没有寄存器
在这里插入图片描述

寄存器间接寻址方式(register indirect)

[]只有一个寄存器
在这里插入图片描述

寄存器相对寻址方式(register relative)

[]只有一个寄存器和一个数字
在这里插入图片描述

基址变址寻址方式(based indexed…)

[]只有两个寄存器
在这里插入图片描述
注意[]里只能放BX,BP,SI,DI四个寄存器其他寄存器不能放,而且将BX,BP作为基地址寄存器,SI,DI作为变址寄存器,[]最多只能放一个基址和一个变址寄存器,基址同时出现或变址同时出现都会报错。还有[]里放BP时默认的段地址寄存器为SS,需要改为其他段地址寄存器要在前面加上DS:[BP+2H](以DS为例)指定为其他段地址寄存器

相对基址变址方式(relative based indexed…

[]里有两个寄存器和数字
在这里插入图片描述

段寄存器

在这里插入图片描述
首先命令和数据同时存在内存中,我们用CS作为段地址寄存器指向存有命令的段,IP作为偏移地址寄存器指向命令。SS指向用作栈的段,SP(偏移地址寄存器)作为栈顶指针,DS,ES作为数据的段地址寄存器搭配上面的5种寻址方式。
另外,不是通用寄存器的寄存器不能直接用mov赋值,要赋值的话一般有下面两种方式:

  1. 通用寄存器作为媒介:mov ax,1 mov ds,ax
  2. 把数据放到内存中,然后把内存赋给非通用寄存器 mov ds,[1000H]

标志位

简介

当CPU做了一次运算,我们可以通过标志位来得知有没有特定的状况发生。还有一些控制信息。
在这里插入图片描述

CF

在这里插入图片描述
把运算的两个对象当作无符号数,看看有无进位,有的话这个符号位为1,否则为0
在这里插入图片描述

OF

在这里插入图片描述

把运算的两个数当作有符号数,看看结果会不会溢出,溢出的为1
电路设计的话就是看高两位的异或,高两位同时进位则溢出否则没溢出
在这里插入图片描述

ZF

在这里插入图片描述
运算结果是否为0,是的话这个符号位为1
在这里插入图片描述

SF

在这里插入图片描述

有符号数据利用最高有效位表示数据的符号。
所以,最高有效位就是符号标志的状态,就是结果最高位为1,他就为1,否则为0
在这里插入图片描述

PF

在这里插入图片描述

当运算结果最低字节中“1”的个数为偶数时,PF = 1;否则PF = 0
在这里插入图片描述

AF

在这里插入图片描述

运算时D3位(低半字节)有进位或借位时,AF
= 1;否则AF = 0。
就是第4位有进位就为1,否则为0
在这里插入图片描述

DF

先不讲

IF

先不讲

TF

先不讲

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:26:44  更:2021-10-09 16:26:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:18:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码