第三章 寄存器(内存访问)

3.1 内存中字的存储

CPU中,用16位寄存器来存储一个字.高8位存放高位字节,低八位存放低位字节.在内存存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中.

我们提出字单元的概念:字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成.高地址内存单元中存放字符数据的高位字节,低地址内存单元中存放字符数据的低位字节.

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的子单元中的高位字节单元和低位字节单元.

3.2 DS和[address]

CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中,内存地址由段地址和偏移地址组成.8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址.比如,我们要读取10000H单元的内容,可以用如下的程序段进行.

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

上面的三条指令将10000H(1000:0)中的数据读到al中.
下面详细说明指令的含义.
mov al,[0]
前面我们使用mov指令,可完成两种传送:

  1. 将数据直接送入寄存器
  2. 将一个寄存器中的内容送入另一个寄存器

也可以使用mov 指令将一个内存单元中的内容送入一个寄存器中.从哪一个内存单元送到哪一个寄存器中呢?在指令中必须指明.寄存器用寄存器名来指明,内存单元则需用内存单元的地址来指明.显然,此时mov指令的格式应该是:mov 寄存器名,内存单元地址.

"[…]“表示一个内存单元,”[…]"中的0表示内存单元的偏移地址.我们知道,只有偏移地址是不能定位一个内存单元的,那么内存单元段地址是多少呢?指令执行时,8086CPU自动读取ds中的数据为内存单元的段地址.

再来看一下,如何用mov指令从10000H中读取数据.10000H用段地址和偏移地址表示1000:0,我们现将段地址1000H放入ds,然后用mov al,[0]完成传送.mov指令中的[]说明操作对象是一个内存单元,[]中的0说明这个内存单元的便宜地址是0,他的段地址默认放在ds中,指令执行时,8086CPU会自动从ds中取出.

mov bx,1000H
mov ds,bx

若要用mov al,[0]完成数据从1000:0单元到al的传送,这条指令执行时,ds中的内容应为段地址1000H,所以这条指令之前应该将1000H送入ds.

3.3 字的传送

前面我们用mov指令在寄存器和内存之间进行字节型数据的传送.

开发日记-20190914 关键词 汇编语言王爽版 第三章相关推荐

  1. 开发日记-20190914 关键词 汇编语言王爽版 第四章

    第四章 第一个程序 4.1 一个源程序从写出到执行的过程 第一步:编写汇编源程序 使用文本编辑器,用汇编语言编写汇编源程序 这一步工作的结果是产生一个储存源程序的文本文件. 第二步:对源程序进行编译程 ...

  2. 开发日记-20190914 关键词 汇编语言王爽版 第七章第八章

    第七章 更灵活的定位内存地址的方法 7.1 and和or指令 (1)and指令:逻辑与指令,按位进行与运算 (2)or指令:逻辑或指令,按位进行或运算 7.2 关于ASCII码 一个文本编辑过程中,就 ...

  3. 开发日记-20190914 关键词 汇编语言王爽版 第六章

    第六章 包含多个段的程序 前面的程序中,只有一个代码段.现在有一个问题是,如果程序需要用其他空间来存放数据,使用哪里呢?在第五章中,我们说0:200~0:2FF是相对安全的,可这段空间的容量只有256 ...

  4. 开发日记-20190914 关键词 汇编语言王爽版 第五章

    第五章 [BX]和loop指令 5.2 Loop指令 loop指令的格式是:loop标号,CPU执行loop指令的时候,要进行两步操作, (cx)=(cx)-1 判断cx中的值,不为零则转至标号处执行 ...

  5. 开发日记-20190914 关键词 汇编语言王爽版 第二章

    第二章 寄存器 一个典型的CPU由运算器,控制器,寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连.前一章所说的总线,相对于CPU内部来说是外部总线.内部中心实现CPU内部各个器件之间的联系 ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第十一章

    第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...

  7. 开发日记-20190915 关键词 汇编语言王爽版 第十三章

    第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...

  8. 开发日记-20190915 关键词 汇编语言王爽版 第十章

    第十章 CALL和RET指令 call 和ret指令都是转移指令,他们都修改IP,或同时修改CS和IP.他们经常被共同用来实现子程序的设计. 10.1 ret和retf ret指令用栈中的数据,修改I ...

  9. 开发日记-20190915 关键词 汇编语言王爽版 第九章

    第九章 转移指令的原理 可以修改IP或同事修改CS和IP和指令统称为转移指令.概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086CPU的转移行为有以下几类: 只修改IP时,称为段 ...

最新文章

  1. Systemd 笔记
  2. java获得项目绝对路径
  3. Java学习笔记10
  4. PCM转MP3工具的封装
  5. WSUS专题之二:部署与规划1
  6. JS 判断滚动底部并加载更多效果。。。。。。。。。
  7. 602B. Approximating a Constant Range
  8. JavaIO15FileReader和FileWriter源码分析及介绍使用
  9. [OpenCV学习笔记3][图像的加载+修改+显示+保存]
  10. python写脚本的优势_python写脚本的优势玩被叫
  11. NTKO控件安装:“文件存取错误”问题
  12. 全彩控制器的编程软件有哪些_可编程LED控制器-MINI全彩控制器软件(DC-Color)v1.08 官方版-腾牛下载...
  13. 颜色的RGBnbsp;指数
  14. 艾美捷-临床数量排名前20的药物靶点分析-磷酸二酯酶(PDEs)抗体
  15. 知道文件扩展名,如何获得在系统中该文件类型的图标
  16. Android NFC读MifareClassic卡获取卡片ID 类型 扇区 存储空间
  17. windows环境下安装python安装pygame安装
  18. 快速解决Solving environment: failed with initial frozen solve. Retrying with flexible solve
  19. 关系代数(数据库笔记)
  20. Python redis 使用教程

热门文章

  1. java 线程假醒_Java并发基础05. 传统线程同步通信技术
  2. 双智机器人 珠海_美的集团:“双智”战略加速推行,加强发展机器人业务
  3. Jmeter自定义函数和引入外部文件的几种方法
  4. 阿里云服务centOS7下安装rabbitmq
  5. jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming (2011
  6. xampp配置xdebug
  7. php添加gd扩展,centos下为php添加gd扩展
  8. 设计点击左侧切换页面进出_Axure教程:(初级)导航中的页面切换
  9. 多租户系统技术实现mysql_SaaS “可配置”和“多租户”架构的几种技术实现方式...
  10. ios动态效果实现翻页_动画:UIKitAnimation 简单动画学习 iOS (一) 渐变 、 移动 、翻页、来回翻转 | 学步园...