汇编之寄存器(内存访问)之字与字节的传送
文章目录
- 内存中字的存储
- 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指令只进行字(两个字节)操作。
汇编之寄存器(内存访问)之字与字节的传送相关推荐
- 寄存器(内存访问)---汇编学习笔记
寄存器(内存访问) 序言 第二章,我们主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构.形成物理地址的方法.相关的寄存器以及一些指令. 这一章,我们从访问内存的角度继续学习几个寄存器. 3 ...
- mysql 访问寄存器_汇编寄存器(内存访问)基础知识之三---mov指令
1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1) ...
- 汇编寄存器(内存访问)基础知识之三---mov指令
1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1 ...
- 汇编语言学习-寄存器(内存访问)
内存中字的存储: 两个16进制位是一个字节! 0号单元是低地址单元,1号单元是高地址单元. 0地址单元中存放的字节型数据是多少? 注意区别:"0地址单元"指向的就是:20H 0地址 ...
- 汇编语言:第三章 寄存器(内存访问)
3.1内存中字的存储 CPU中寄存器是16位的,可以用高低字节存储一个字,但是每个内存单元是8位的,只能存储一个字节, 所以内存中用相邻2个内存单元存储一个字的高低字节 如:20000数值(4E20H ...
- 汇编寄存器之内存访问
1.内存中字的存储: 在CPU中用一个16位寄存器来存储一个字, 高8位存高字节,低8位存低字节 如AX寄存器存在一个字,那么AH存高字节,AL存低字节 在内存中存储字时是用两个连续的字节来存储字 ...
- ARM指令寻址方式之: 内存访问指令寻址
4.2 内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种. ① 字及无符号字节的Load/Store指令的寻址方式. ② 杂类Load/Store指令的寻址方式. ③ ...
- ARMv7和ARMv8中关于内存访问的汇编指令总结对比
ARMv7和ARMv8中关于内存访问的汇编指令总结对比 文章目录 ARMv7和ARMv8中关于内存访问的汇编指令总结对比 前言 ARMv7下的内存访问指令 寻址模式 多加载/存储 ARMv8下的内存访 ...
- 【汇编语言04】第3章 寄存器(内存访问)
目录 0 前言 1 数据段寄存器 1.1 内存中字的存储 1.2 字的传送 1.3 DS和[address] 1.4 数据段 2 栈段寄存器 2.1 栈的简介 2.2 CPU的栈机制 2.3 SS和S ...
最新文章
- HDFS API编程之副本系数
- 软件开发的“三重门”
- java ruby脚本_Java 程序中直接执行 Ruby 脚本 (JRuby)
- 在Ubuntu上安装Drone持续集成环境
- Java JDBC中的Statement和PreparedStatement
- Jquery 根据value值设置下拉列表(select)默认选中项
- PHP常用方法(不定时更新)
- wait放弃对象锁_Java线程:notify()和wait()示例
- python执行源程序的方式是_python源程序执行的方式
- 网络电台mms地址大全(一)
- 服务器TPMC值计算
- 2018年世界杯助力优酷重返第一,也成为视频行业的分水岭
- ipv6的127位掩码如何表示_IPv4地址、子网掩码、详细讲解
- standard fifo和fwft fifo的区别
- 加拿大计算机工程研究生,加拿大维多利亚大学电子与计算机工程系副教授诚招硕士研究生 - 导师招生 - 小木虫 - 学术 科研 互动社区...
- 关系型数据库的物理连接
- 计算机电子表格的优点,信息技术《电子表格的特点及应用》的说课稿
- 利用Puppeteer来标准化抓站新闻格式
- python绘制三重积分图像_三重积分-图解高等数学13 | 文艺数学君
- es6 混合commjs_ES6 模块化的时代真的来临了么?Using MJS