【计组】偏移地址、段地址和寻址方式
一、逻辑地址和物理地址
物理地址可以理解成是某个存储单元的真正的地址,然而地址总线有20位,寄存器们只有16位,无法完全访问到呀。所以就想到一个办法,搞出一个逻辑地址,之后编程都使用逻辑地址。
写法为 aaaa:bbbb
前者为段地址,后者为偏移地址。
物理地址=段地址左移一位+偏移地址。
16进制左移一位相当于2进制左移4位,于是就是16+4=20位了。
(但是据说逻辑地址不唯一,这个地方现在还不太理解,而且这样的话如何避免呢?以后补。)
二、偏移地址和段地址
其实就是把内存人为地分成了好几个段。每个段都有一堆存储单元。
偏移地址就是在这个段的基础上,具体的存储单元位置。
就比如一栋楼有好几个单元(段地址),一个人具体住在几层几号房间(偏移地址)。这样找一户人家就比把所有住户都排好队一个一个找容易多了。
(现在想到的问题是,一个段有多少存储单元?有没有一堆操作数跨越两个段的可能性?如何避免?以后补)
段地址存储在段寄存器中。4个段寄存器:CS DS SS ES
偏移地址则可以用很多方式来表示,接下来会在寻址方式里介绍。
三、寻址方式
什么是寻址方式?就是我需要把某个值交给某个寄存器(可以不只是通用寄存器吗)。有的值直接给出来,有的值具体是多少不知道但是储存在别的地方。所以汇编语言中就有不同的表示方式表示值的位置。然后CPU根据不同的表示方式去找那个值。就是所谓的“寻址”。【但是为什么要寻“址”呢,叫寻“值”方式才会更方便更容易理解吧→_→
(书上用了“操作数”这个词,不知道当初又是怎么翻译的,原因是啥,反正挺误导人啊,这到底是什么还不太清楚。以后补)
寻址方式主要分为三种:
立即寻址;寄存器寻址;存储器寻址
立即寻址
值直接给出来了。所以就直接把这个值交给寄存器就好了。
e.g. MOV AX,1234H
电脑很聪明的所以如果立即数是8位比如12H,而寄存器是16位,会自动把8位看成16位存成0012H。但是立即数位数比寄存器多就不行了,因为它一定哪个也不想放弃吧【笑】
寄存器寻址
直译就好。值储存在另外一个寄存器了。所以就把值直接丢过去就好了。
E.G. MOV AX,BX
不用访问存储器,因为寄存器在CPU里,存储器是一个跟cpu平行的一个硬件部分,在cpu外面。所以这方法执行速度很快。
另外可以在一个寄存器内部传递
e.g. MOV AH,AL
存储器寻址
这个有点麻烦了就。指令明明需要在cpu内执行,然后需要的值在存储器里。这又要引入一些新的名词。
我们的偏移地址(有效地址)=基址+变址+位移量
基址寄存器只有BX BP;变址寄存器只有SI DI
位移量也可以为负值!
要找的值在存储器里,具体在哪明显是个物理地址,然而cpu没法直接通过物理地址找到目标,只能通过逻辑地址找了。
段地址都在段寄存器里,但是偏移地址又有不同的给出方法。
如果偏移地址直接给出,我们称为
直接寻址
MOV AX,[1234H] ;之所以用[]我想就是为了和立即寻址做区分。
注意此情况段地址默认储存在DS中。
----------------------------------------------------------
如果偏移地址存储在另外一个寄存器里,称为
寄存器间接寻址
MOV AX,[BX]
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
如果偏移地址一部分储存在寄存器里(基址或变址),另一部分直接表示(位移量),称为
寄存器相对寻址
可以这样理解,一个人知道某人具体住几单元(基址或变址),然后另一人则知道此人具体住哪间房,两人所知道的合起来就可以确定某人的具体地址了。位移量可以取负,所以想象成这栋楼地上地下都能住人吧。
MOV AX,[BX+1000H]==MOV AX,[BX]1000H
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
如果偏移地址储存在两个寄存器里,就是基址和变址的和了。称为
基址变址寻址
MOV AX,[BX][SI];or MOV AX,[BX+SI]
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
相对基址变址寻址
除了基址、变址,又加上位移量,构成我们的偏移地址。
MOV AX,[BX+SI+1000H]== MOV AX,1000H[BX][SI]
以上是8086的几种寻址方式,386以上就是在不同的位置乘上比例因子(1、2、4、8)
还没弄明白的记得之后补呀!!!!!
困死明天还有早课_(:зゝ∠)_
2015/11/20 凌晨2:09
转载于:https://my.oschina.net/u/2374598/blog/532994
【计组】偏移地址、段地址和寻址方式相关推荐
- 基于8086CPU微处理器的汇编学习之段地址与偏移地址的分析
人的记忆总是不靠谱的,早在几年前就看过汇编语言,由于没有总结下来资料,所以忘记了很多,所以重新梳理下汇编方面的知识,与君共勉. ------------------------------------ ...
- 王爽汇编习题 : 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 ___ 到 ____。
1 答案 : 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH . 2 解题过程: 物理地址=SA*16+EA EA的变化范围为0h~ffffh 物理地 ...
- 1MB等于多少BYTE?8086/8088寻址段地址与偏移地址解释
8086/8088有20条地址线,它的直接寻址能力为1MB.也就是在一个系统中可以有多达1MB的存储器,地址从00000H-FFFFFH.给定任意一个20位物理地址,就可以从中取出需要的指令和操作数. ...
- 为什么要用段地址和偏移地址?
本质含义 对于8086CUP而言 是一个16位结构的CPU 其具有的结构特性: (1)运算器一次最多可以处理16位的数据: (2)寄存器的最大宽度为16位: (3)寄存器和运算器之间的通路为16位 除 ...
- 逻辑地址(段地址,偏移地址)知识点全面回顾
1.什么是逻辑地址? :逻辑地址是用户编程时使用的地址,分为段地址和偏移地址两部分. 逻辑地址表示形式:3020:055AH---------(汇编语言中,数字后面加H表示16进制) 2.为什么要用逻 ...
- 段地址和偏移地址是什么
举个很简单的例子:如果说联合国用01表示中国,02表示美国,这里的01和02表示段地址.而各个国家的首都也是01,这个01就是偏移地址.那么0101就表示北京,0201表示华盛顿,这里段地址加偏移地址 ...
- JMU软件计组期末复习总结
本篇博客是针对JMU软件专业的期末复习进行的知识点总结,知识点来回穿插,会比较凌乱,不适合预习使用. 因是参考老师给的提纲进行的总结,并没有覆盖这本书的所有知识点,有遗漏还请见谅. 本人能力有限,出现 ...
- 【计组理论期末考试模拟题】21级计科专业计算机组成原理
[计组理论期末考试模拟题]21级计科专业计算机组成原理 一.选择题 二.多选题 三.填空题 四.程序填空题 五.编程题 一.选择题 2-1 在定点二进制运算器中,减法运算一般通过()来实现. A.原码 ...
- 【王道计组笔记】Cache高速缓存基本工作原理
缓存器 的引入: [王道计组笔记]高速缓存器:局部性原理及性能分析_muse_age的博客-CSDN博客 1.主存的块放到Cache中哪个位置?CPU向缓存中读取一个数据过程? (1)空位随意放:全相 ...
最新文章
- 利用集群技术实现Web服务器的负载均衡
- spring-boot注解详解(四)
- 可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据
- java中得到classpath和当前类的绝对路径的一些方法(路径中的%20进行替换空格)...
- 华为路由器hilink怎么用_华为无线充电怎么用?MatePadPro无线充电使用方法
- Iterator(迭代器)遍历Collection集合元素
- EMLOG复制网站文字提醒弹窗源码美化版
- SD-WAN三大部署方式 用户现身说法谈优劣势
- 音视频开发(4)---Windows下Red5安装与使用入门
- ofo回应发币传闻:从未参与虚拟货币的发行 与GSE Lab合作已终止
- Geoserver+postSQL+openlayer实现路径规划
- 运行VS2008提示找不到一个或多个组件,请重新安装该应用程序错误的解决方法V
- 【4G模块】-有方科技Neoway-N720
- SQL经典50查询语句案例_3(查询所有同学的学号、姓名、选课数、总成绩)
- 主成分分析结果成分不显著_主成分分析结果
- contiki(官网简介翻译)介绍
- 注册微信小程序账号 APPID的获取
- 【Wing Loss】《Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks》
- 店盈通:如何打造赚钱的拼多多店铺?
- 找单身狗版本2(有两个单身狗)