文章目录

  • 内存中字的存储
  • DS和[address]
  • 字的传送
  • 操作符X ptr

俗话说的好,温故而知新!

内存中字的存储

8086CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放。比如我们从0地址开始存放20000,图示:

上图中,我们用0、1两个内存单元存放数据20000(4E20H),0、1两个连续的内存单元用来存储一个字,这两个连续的内存单元可以看作一个起始地址为0的字单元

问题:

  • 1地址字单元中存放的字型数据是多少?
  • 2地址字单元中存放的字型数据是多少?
  • 2地址单元中存放的字节型数据是多少?
  • 0地址字单元中存放的字型数据是多少?
  • 0地址单元中存放的字节型数据是多少?

分析:

  • 1地址字单元中存放的字型数据是:124EH
  • 2地址字单元中存放的字型数据是:0012H
  • 2地址单元中存放的字节型数据是:12H
  • 0地址字单元中存放的字型数据是:4E20H
  • 0地址单元中存放的字节型数据是:20H

DS和[address]

8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址,比如我们要读取10000H单元的内容,可以用如下程序段进行:

mov bx,1000H
mov ds,bx
mov al,[0]               ; “[...]”表示一个内存单元,“[...]”中的0表示内存单元的偏移地址。; 指令执行时,8086CPU自动取ds中的数据为内存单元的段地址

其中 mov al,[0] 代表:将一个内存单元(字节单元)送入al,完成数据从1000:0单元到al的传送。这条指令执行时,ds中的内容应为段地址1000H,所以在这条指令之前应该将1000H送入ds寄存器。

问题:
如何将al中的数据送入内存单元10000H中?

分析:

mov bx,1000H
mov ds,bx
mov [0],al                ; 将al中的数据送入内存单元10000H中

字的传送

前面我们用mov指令在寄存器和内存之间进行字节型数据的传送。因为8086CPU是16位结构,有16根数据线,所以可以一次性传送16位的数据,也就是一次性传送一个字(两个字节或16比特),如下:

mov bx,1000H
mov ds,bx
mov ax,[0]                ; 1000:0处的字型数据送入ax
mov [0],cx                ; cx中16位数据送到1000:0处

问题:
内存中的情况如下,写出下面的指令执行后寄存器ax,bx,cx中的值?

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

分析:
指令执行后,ax=1123H,bx=2211H,cx=6622H

mov ax,1000H
mov ds,ax
mov ax,[0]                ; 将1000:0处字单元的内容送入ax,此时ax=1123H
mov bx,[2]                ; 将1000:2处字单元的内容送入bx,此时bx=6622H
mov cx,[1]                ; 将1000:1处字单元的内容送入cx,此时cx=2211H
mov bx,[1]                ; 将1000:1处字单元的内容送入bx,此时bx=2211H
mov cx,[2]                ; 将1000:2处字单元的内容送入cx,此时cx=6622H

操作符X ptr

在没有寄存器名存在的情况下, 用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte,如下:

;下面的指令中,用word ptr指明了指令访问的内存单元是一个字单元
mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2;下面的指令中,用byte ptr指明了指令访问内存单元是一个字节单元
mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2

但有些指令默认了访问的是字单元还是字节单元,比如:push [1000H] 就不用指明,因为push指令只进行字(两个字节)操作。

汇编之寄存器(内存访问)之字与字节的传送相关推荐

  1. 寄存器(内存访问)---汇编学习笔记

    寄存器(内存访问) 序言 第二章,我们主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构.形成物理地址的方法.相关的寄存器以及一些指令. 这一章,我们从访问内存的角度继续学习几个寄存器. 3 ...

  2. mysql 访问寄存器_汇编寄存器(内存访问)基础知识之三---mov指令

    1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1) ...

  3. 汇编寄存器(内存访问)基础知识之三---mov指令

     1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1 ...

  4. 汇编语言学习-寄存器(内存访问)

    内存中字的存储: 两个16进制位是一个字节! 0号单元是低地址单元,1号单元是高地址单元. 0地址单元中存放的字节型数据是多少? 注意区别:"0地址单元"指向的就是:20H 0地址 ...

  5. 汇编语言:第三章 寄存器(内存访问)

    3.1内存中字的存储 CPU中寄存器是16位的,可以用高低字节存储一个字,但是每个内存单元是8位的,只能存储一个字节, 所以内存中用相邻2个内存单元存储一个字的高低字节 如:20000数值(4E20H ...

  6. 汇编寄存器之内存访问

    1.内存中字的存储:   在CPU中用一个16位寄存器来存储一个字, 高8位存高字节,低8位存低字节 如AX寄存器存在一个字,那么AH存高字节,AL存低字节 在内存中存储字时是用两个连续的字节来存储字 ...

  7. ARM指令寻址方式之: 内存访问指令寻址

    4.2  内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种. ① 字及无符号字节的Load/Store指令的寻址方式. ② 杂类Load/Store指令的寻址方式. ③ ...

  8. ARMv7和ARMv8中关于内存访问的汇编指令总结对比

    ARMv7和ARMv8中关于内存访问的汇编指令总结对比 文章目录 ARMv7和ARMv8中关于内存访问的汇编指令总结对比 前言 ARMv7下的内存访问指令 寻址模式 多加载/存储 ARMv8下的内存访 ...

  9. 【汇编语言04】第3章 寄存器(内存访问)

    目录 0 前言 1 数据段寄存器 1.1 内存中字的存储 1.2 字的传送 1.3 DS和[address] 1.4 数据段 2 栈段寄存器 2.1 栈的简介 2.2 CPU的栈机制 2.3 SS和S ...

最新文章

  1. HDFS API编程之副本系数
  2. 软件开发的“三重门”
  3. java ruby脚本_Java 程序中直接执行 Ruby 脚本 (JRuby)
  4. 在Ubuntu上安装Drone持续集成环境
  5. Java JDBC中的Statement和PreparedStatement
  6. Jquery 根据value值设置下拉列表(select)默认选中项
  7. PHP常用方法(不定时更新)
  8. wait放弃对象锁_Java线程:notify()和wait()示例
  9. python执行源程序的方式是_python源程序执行的方式
  10. 网络电台mms地址大全(一)
  11. 服务器TPMC值计算
  12. 2018年世界杯助力优酷重返第一,也成为视频行业的分水岭
  13. ipv6的127位掩码如何表示_IPv4地址、子网掩码、详细讲解
  14. standard fifo和fwft fifo的区别
  15. 加拿大计算机工程研究生,加拿大维多利亚大学电子与计算机工程系副教授诚招硕士研究生 - 导师招生 - 小木虫 - 学术 科研 互动社区...
  16. 关系型数据库的物理连接
  17. 计算机电子表格的优点,信息技术《电子表格的特点及应用》的说课稿
  18. 利用Puppeteer来标准化抓站新闻格式
  19. python绘制三重积分图像_三重积分-图解高等数学13 | 文艺数学君
  20. es6 混合commjs_ES6 模块化的时代真的来临了么?Using MJS

热门文章

  1. 将字符串转换成数字的几种方法
  2. 我右下角的小喇叭不见了、救命啊
  3. windows11备忘录便签快捷键:你需要知道的有关它的一切
  4. node爬虫伪造ip与请求头
  5. 一款丧心病狂的API测试工具:Apifox!
  6. Git--(GitHub)
  7. 验证哥德巴赫猜想(C++)
  8. HelloCharts开源图表库(一)之折线图
  9. 深入浅出的讲解傅里叶变换(2)
  10. 13、内存管理—变量作用