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位数。然后一个逻辑地址有很多种段地址和偏移地址的组合方式只要算出来结果是他就行了。
一个段里最多有216个字节,因为偏移地址有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

汇编语言_一些寄存器与寻址方式相关推荐

  1. 七种寻址方式(寄存器相对寻址方式)

    操作数在存储器中,其有效地址是一个基址寄存器(BX.BP)或变址寄存器(SI.D I)的内容和指令中的8位/16位偏移量之和.其有效地址的计算公式如公式所示. 在不使用段超越前缀的情况下,有下列规定: ...

  2. 七种寻址方式(寄存器间接寻址方式)

    操作数在存储器中,操作数的有效地址用SI.DI.BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式.该寻址方式物理地址的计算方法如下: 寄存器间接寻址方式读取存储单元的原理如图所示. ...

  3. 汇编语言机器语言c语言区别,高级语言和汇编语言_机器语言的区别

    描述 高级语言简介 高级语言,它是在低级语言的基础上,采用接近于人类自然语言的单词和符号来表示一组低级语言程序,使编程变得更加简单,易学,且写出的程序可读性强. 高级语言的优点 1.高级语言接近算法语 ...

  4. 汇编 标志寄存器 和寻址方式

    原文链接: 汇编 标志寄存器 和寻址方式 上一篇: pyecharts 简单使用 下一篇: 汇编 转移指令 标志位简介: 标志寄存器,又称程序状态寄存器(它的内容是Program Status Wor ...

  5. 寻址方式 寄存器寻址方式 立即数寻址方式 存储器寻址方式: 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式 串操作寻址方式 I/O端口寻址方式

    寻找操作数地址的方法 共有八种: 寄存器寻址方式 立即数寻址方式 存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式) 串操作寻址方式 I/O端口寻址方式 80 ...

  6. 寄存器和存储器的区别_汇编语言 第二章 寄存器

    第二章 寄存器 在 CPU 中: 运算器进行信息处理: 寄存器进行信息存储(主要部分,工作原理): 控制器控制各种器件进行工作: 内部总线连接各种器件,在它们之间进行数据的传送. 不同的 CPU,寄存 ...

  7. 间接寻址级别不同_单片机指令系统与寻址方式

    单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序.程序是由指令组成的,指令的基本组成是操作码和操作数.单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有 ...

  8. 汇编语言 【大练习】寻址方式在结构化访数据访问中的应用

    题源:王爽<汇编语言>第八章 实验七 题目要求 汇编易错点 用mov赋值的时候,操作数左右写反,本来想写mov ax,5 却写成mov 5,ax 不看字节长度就直接写入,覆盖后面数据:比如 ...

  9. gcc汇编汇编语言_什么是汇编语言?

    gcc汇编汇编语言 Assembly Language is the interface between higher level languages (C++, Java, etc) and mac ...

最新文章

  1. 深入了解MyBatis返回值
  2. 【调参实战】如何开始你的第一个深度学习调参任务?不妨从图像分类中的学习率入手。...
  3. 计算机与新闻业未来发展,计算机学院举办“智创未来,谈思维与职业发展”活动...
  4. 三维坐标系带偏航角俯仰角_浅谈三维旋转的三种方法及差异
  5. 学习笔记:首次进行JUnit+Ant构建自动的单元测试(一)
  6. CVPR2020 夜间目标检测挑战赛冠军方案解读
  7. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere(高斯消元)
  8. DotNetCore中异步编程的实用演练
  9. sklearn学习 5.降维算法PCA和SVD
  10. Linux用户和用户组详解
  11. 令程序员们夜不能寐的“噩梦”除了改需求,还有这些…...
  12. CVPR2013感兴趣的文章整理
  13. R计算两列数据的相关系数_【R语言】相关性分析、相关系数的显著性检验及可视化...
  14. vue音乐播放器demo,主要是模仿慕课音乐播放器教程制作的一个小demo
  15. 修改视频属性中的'修改时间'
  16. android动画入门
  17. GNU、GCC与G++的区别
  18. 智能人物画像综合分析系统——Day8
  19. 用Origin将Fluent中的数据导出并绘制云图
  20. 出门在外如何保管毕业证原件_出门在外时如何控制HomeKit智能家居

热门文章

  1. 信用的“刚柔并进”大家信夫的普惠信用
  2. 4.8 IFFT/FFT
  3. c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园
  4. Alpha、Beta、RC、GA、LTS等软件各个版本号的含义
  5. 没有人能够一味地淡定,没有人能够一味地忍受
  6. 夜光 :AGV 导航策略总体方案设计
  7. 2022年G2电站锅炉司炉操作证考试题库及答案
  8. oracle sql outer join,解答Oracle LEFT JOIN和LEFT OUTER JOIN的区别
  9. 4043:GPA排名系统
  10. 踢球游戏-运用list切片