• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 8086/88的内存寻址方式

8086/88的内存寻址方式

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了内存寻址方式,内存寻址,内存寻址能力,linux内存寻址,内存操作数及寻址方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>  在学汇编时,很多初学者对PC的寻址方式和很不理解,甚至是很难理解。的确,这方面的知识是很抽象的,需要比较强的空间想象能力。尤其是我们在输入字符串时,那这些字符是如何进行排列的呢?对于,这个问题,我相信很多初学者也是很难想象是如何排列。但是,我可以这样比喻:内存就是有很多栋“楼房”,“楼房”又是由“单元号”,“门户号”组成,那“楼房”就相当于内存地址的段地址,“单元号”就相当于内存的的 偏移地址,“门户号(家)”就相当于“变地址”,而每个单元有16个"门户号(家)",又当我们找到"门户号(家)"后,走进这个"门户号(家)"就会见到里面会有"人",而我们所说的人就是寄存器所指的"内容"了,我画个图给你们看就会一目了然了。

用DEBUG的D命令得出这样的效果:

|---------->0B1F就是"楼房"------>段地址
|
| |------>右边的就是"单元号"--->偏移地址
| |
| | |-------->这部分就是"门户号"----->变地址
| | |<------------------------------------------>|
0B1F:0100 00 80 FF 02 75 05 C6 46-00 00 C3 E8 8C EB B4 3B
0B1F:0110 CD 21 72 39 8B FA 33 C0-8B C8 49 26 34 00 0E 0B
'
'
'
[省略]

看完这个图之后,是不是就很明了呢?但是聪明的人就会有疑问,那我们怎么走进"门户号(家)"呢?问得好,所以了为了可以走进"门户号(家)",就出现了一个叫做"寻址方式"的概念!说白了,就是教你如何找到这个"门户号(家)".呵呵!

好现在都明白了吗?那你们就看看我是怎么理解PC的寻址方式(通俗易懂):
在这我就只介绍比较难理解的:

1:寄存器直接寻址:
你就想成:其实你已经站在你要找的"门户号(家)"面前了,直接敲门进去就OK了!
例子: MOV AX,[2000H]
MOV AX,2000H -->2000H为存放操作数单元号的符号地址
上面两者是不等效的

2:寄存器间接寻址方式:
你就想成:你已经站在你要找的"门户号(家)"的"单元号",你要找到它,必须知道它在当前"单元号"几楼.假如它在6楼,那你就上到6楼就OK了!!注意,最高只有16楼,因为什么呢?那就用DEBUG的D命令看看呀,慢慢数哦,呵呵!!
例子: MOV AX,[BX]

计算公式: 物理地址=16d*(DS)+(BX)
物理地址=16d*(DS)+(SI)
物理地址=16d*(DS)+(DI)
物理地址=16d*(SS)+(BP)

3:寄存器相对寻址方式:
你就想成:你要找的"门户号(家)"其实就在你家的楼上或者楼下,你要找到它,就 必须知道它在你楼上几楼,或者在楼下几楼!就OK了!
例子: MOV AX,COUNT[SI]
MOV AX,[COUNT+SI]
其中 COUNT为位移量的符号地址

计算公式: 物理地址=16d*(DS)+(BX)+8位位移量
或+(SI) 或 16位位偏移量
或+(DI)

物理地址=16d*(SS)+(BP)+8位偏移量

4:基址变址寻址方式:
你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",你要找到它,就必须知道它是该栋的哪个"单元号",并且住在几楼!那样你就可以找到它了 !
例子: MOV AX,[BX][DI]
MOV AX,[BX+DI]

计算公式: 物理地址=16d*(DS)+(BX)+(SI)
或+(DI)
物理地址=16d*(SS)+(BP)+(SI)
或+(DI)

5:相对基址变址寻址方式:
你就想成:你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",它比你高几层楼或者低几层楼,然后用的你目前的楼数+/-就可以得出你要找的住在几楼了!
例子: MOV,AX,MASK[BX][SI]
MOV,AX,MASK[BX+SI]
MOV,AX,[MASK+BX+SI]
以上三个例子是等效的!!

计算公式: 物理地址=16d*(DS)+(BX)+(SI)+8位位移量
或+(DI) 或 16位位偏移量
物理地址=16d*(SS)+(BP)+(SI)+8位位移量
或+(DI) 或 16位位偏移量
---------------------------------------------------------------------
呵呵,终于写完了这篇教程,好累哦!! 是不是觉得我的思维很另类呀,要创新呀!
书上太理论了,我就创新一个,不知道你们看得懂吗?
呵呵,反正你们不要!@##)(#$*!@(@我就行了,我很努力写了!!!

下面,我举个程序例子,让你们加深印象!!!

----------------------------------------------------------------------
编程步骤:
1: 建立缓冲区,为输入字符串(最多能输入9个)
2: 取缓冲区的首地址,以便后面进行"寄存器间接寻址方式"
3: 利用"寄存器间接寻址方式"取得实际输入字符个数,以便确认循环次数
4: 利用"寄存器间接寻址方式"输入字符串的最后一个字符
5: 利用LOOP指令和2号显示功能来进行倒着显示
----------------------------------------------------------------------

;程序功能:任意输入几个字符(最多能输入9个),按回车则倒着输出!

data segment
user_string db 10,0,10 dup(?)
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea dx,user_string ;建立输入字符串缓冲区
mov ah,0ah
int 21h
xor si,si
xor bx,bx
mov bx,dx
mov cx,[bx+si+1] ;看这个就是"寄存器间接寻址方式"
xor ch,ch ;其目的就是取实际输入字符个数
mov di,cx
lop: mov ah,2
mov dx,[bx+di+1];看这又是"寄存器间接寻址方式"
int 21h ;其目的就是取输入字符串的最后一个字符
dec di
loop lop ;依次循环倒着输出字符
mov ah,4ch
int 21h
code ends
end start

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

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 8086/88的内存寻址方式

相关文章

  • 2017-06-28Win32汇编的环境和基础
  • 2017-06-28(汇编源代码 )简单的取系统时间小程序
  • 2017-06-28汇编教程:控制转移(2)
  • 2017-06-28汇编语言的艺术-观念正误(四)
  • 2017-06-17乘运算指令
  • 2017-06-28汇编源代码之简单密码输入
  • 2017-06-17重复汇编
  • 2017-06-28汇编教程:获得结果
  • 2017-06-17子程序的嵌套
  • 2017-06-28汇编语言学习指南(四)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编教程之树型视图控件
    • 汇编语言的艺术-准备工作(一)
    • 存储单元的地址和内容
    • 汇编源代码之GET TIME OF DAY(获取时间)
    • 汇编语言套装软件制作(2)
    • 8086/8088指令系统
    • 8086指令系统
    • 汇编教程之绘制文本
    • MASM的反反汇编技术
    • 如何分析未文档化的数据结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有