8086 CPU 寻址方式灵活。有以下几种

idata 表示常量

1.   [ idata ] 用一个常量来表示地址,可用于直接定位内存单元,但是在 MASM中要显实在的说明 ds 段寄存器, 比如 mov ax, ds:[0]  ,表示把 ds 寄存器中所在段的地址+偏移地址 0 的内存单元中的值赋给ax  , 不能用

mov  ax, [0] ,这样在masm 中会当作mov ax, 0,   在windows的 debug 和 nasm 中可以用 mov ax, [..] 的方式定位内存,段地址默认放在 ds 中。

2.   [bx]  用一个变量来表示内存地址,可用于间接定位一个内存单元。 比如 mov ax, [bx] ,段地址默认放在ds 中

3.  [bx+idata]  用一个变量加常量表示内存地址,可在一个其实地址的基础上用变量间接定位一个内存单元

比如:

mov  ax, [bx+idata]

mov ax, [idata+bx]

mov ax, idata[bx]

都是等价的,相当于高级语言中的数组表示方法。

4.   [bx+si] 用两个变量表示地址。

5.   [bx+di] 等价于 [bx+si].

6.   [bx+si+idata]  用两个变量和一个常量表示地址。

7    [bx+di+idata] 等价于 [bx+si+idata].

关于 bx,si,di,bp

在 8086 CPU 中,只有这四个寄存器可以用在 [...] 中进行内存单元的寻址,比如

mov  ax, [bx]

mov ax,  [bx+si]

mov ax, [bx+di]

mov  ax,[ bp]

mov ax, [bp+si]

mov ax, [bp+di]

在[..]中,bx,di,si,bp,可以单个出现,但是只能以四种组合方式出现

bx和si,  bx和di,  bp和si, bp和di

比如

mov  ax,[bx+bp]

mov  ax,[si+di]

这两条指令是错误的。

只要在[...]中使用寄存器bp, 而指令中没有显实的给出段地址,段地址默认在 ss 中

mov ax, [bp]         段地址在 ss中

mov ax,[bp+idata]      段地址在 ss中

mov ax,[bp+si]           段地址在 ss中

mov ax, [bp+si+idata]      段地址在 ss中

也可以显实的指定段寄存器

mov ax, ds:[bp]

mov ax, es:[bx]

mov ax, ss:[bx]

mov ax ,cs:[bx+si]

-------------------------------------------------------------------------------------------------

寻址方式总结

寻址方式                                                                              名称

[idata]                                                                                直接寻址

[bx]                                                                                      寄存器间接寻址

[si]                                                                                       寄存器间接寻址

[di]                                                                                       寄存器间接寻址

[bp]                                                                                      寄存器间接寻址

[bx+idata]                                                                            寄存器相对寻址
                [ si+idata]                                                                            寄存器相对寻址

[di +idata]                                                                           寄存器相对寻址

[bp+ idata]                                                                           寄存器相对寻址

[bx+si]                                                                                 基址变址寻址

[bx+di]                                                                                 基址变址寻址

[bp+si]                                                                                 基址变址寻址

[bp+di]                                                                                 基址变址寻址

[bx+si+idata]                                                                        相对基址变址寻址

[bx+di+idata]                                                                        相对基址变址寻址

[bp +si +idata]                                                                      相对基址变址寻址

[bp+di+idata]                                                                        相对基址变址寻址

8086 CPU 寻址方式的更多相关文章

  1. 8086 CPU 寄存器简介

    转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...

  2. Intel 8086 CPU

    一.8086概述 Intel8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标).资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配 ...

  3. [转帖]8086 CPU 寄存器简介

    8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...

  4. 8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?

    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢? 这是因为,8086地址线是20位,段寄存器是16位,将段寄存器*16实际上就是向左移动4位,形成20位和8086的二十位地址线匹配. I ...

  5. 8086 CPU 寄存器简介(超详细,图文并茂)

    http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html

  6. linux 内核源代码情景分析——Intel X86 CPU 系列的寻址方式

    当我们说一个CPU是"16位"或"32"位时,指的是处理器中"算数逻辑单元"(ALU)的宽度.数据总线通常与ALU具有相同的宽度.当Inte ...

  7. 【OS】实模式和保护模式区别及寻址方式

    实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别 ...

  8. [转]CPU的位数与操作系统的位数的区别

    转自:http://weiheyouchou.blog.hexun.com/35564976_d.html 随着近来AMD和Intel的64位CPU以及 Microsoft 64位操作系统的相继发布, ...

  9. 汇编语言--寄存器(cpu工作原理)

    本文地址:http://www.cnblogs.com/archimedes/p/assembly-register.html,转载请注明源地址. 本文主要将介绍的是8086 CPU中的寄存器, 寄存 ...

随机推荐

  1. Http的操作(不传递参数)

    ttpResponse  httpResponse = null;       HttpEntity  httpEntity = null; HttpGet httpGet = new HttpGet ...

  2. InstallShield安装包卸载-完美卸载

    在前面的日志里面介绍了在卸载的时候删除整个安装文件夹的方式.可是当遇到程序生成的文件不是在同一个文件夹下,有时甚至是用户自己定义的文件夹路径,这个时候我们卸载的时候是没有将用户自己定义的文件夹给删除掉 ...

  3. NDK如何调试系统核心动态库(无系统源码的情况)

    版权归薛定諤耗子所有,转载请表明出处. 1,有源码,需要导入符号表 2,没有源码,如何调试 1)运行ndk-gdb:../../ndk-gdb --verbose --launch=com.examp ...

  4. shell中exec解析(转)

    参考:<linux命令.编辑器与shell编程> <unix环境高级编程> exec和source都属于bash内部命令(builtins commands),在bash下输入 ...

  5. Online SVG to PNG/JPEG/TIFF conversion

    Online SVG to PNG/JPEG/TIFF conversion SVG to raster image conversion

  6. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  7. Unity 3D 建立开发环境

    之后的基本方向 ios游戏开发,基础教程http://www.devdiv.com/unity_d_-thread-128068-1-1.html,学习Unity 3D游戏开发. 应该昨天表示,读了一 ...

  8. 终于实现samba可写不可删除

    通过szxsztszk的提示 今天终于实现了linux可写不可删除的要求. 同时运用了POSIX ACL 我们公司的要求是这样的[color=Red](我只做出我公司要求的步骤,不同的要求,稍加改正即 ...

  9. ASP漏洞+SQL注入的入侵方法

    本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下. 首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息.再用nmap -sS IP -P0 -p 139 ,透 ...

  10. 用户界面线程AfxBeginThread的使用

    用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互. AfxBeginThread 函数原型如下: CWinThread *AfxBeginThread ...