16位汇编第第四讲常用的7种寻址方式

常用的7中寻址方式

昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式.

(注意,这个属于简陋版的,写了4个小时的博客,也就是第一版,保存了一下,但是博客出问题了,重新打开后发现保存的内容没了,让我很无语

所以我星期六星期天重新编辑这一张,现在发出这些先简单的预习一下谢谢)

1.操作码,操作数,位移量,立即数的概念

  8086的寻址方式,这个寻址方式是什么意思,是让我们书序8086汇编指令的格式,

尤其是其中的操作数的表达方法

  操作码: mov add ....等指令,暂时就先把这些认定为mov即可.后面会一一讲解指令

  操作数, 例如 mov ax,1234 那么操作数就是 ax,和 1234 其中 1234成为源操作数,ax成为目标操作数

为什么这样说,因为我们要把源操作数 通过 mov 传送指令, 传送给 目标操作数ax

对于操作数而言

  1.操作数可以是一个具体的值(也就是 立即数,其中立即数是后面翻译过来的,叫做(imm缩写))

  2.操作数可以是存放数据的寄存器(上面也说了, ax目的地操作数)

  3.操作数可以是存储器的地址(怎么理解,可以理解为 mov ax,[2000])可以是一个地址

                        常用的7中寻址方式

昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式.

1.操作码,操作数,位移量,立即数的概念

  8086的寻址方式,这个寻址方式是什么意思,是让我们书序8086汇编指令的格式,

尤其是其中的操作数的表达方法

  操作码: mov add ....等指令,暂时就先把这些认定为mov即可.后面会一一讲解指令

  操作数, 例如 mov ax,1234 那么操作数就是 ax,和 1234 其中 1234成为源操作数,ax成为目标操作数

为什么这样说,因为我们要把源操作数 通过 mov 传送指令, 传送给 目标操作数ax

对于操作数而言

  1.操作数可以是一个具体的值(也就是 立即数,其中立即数是后面翻译过来的,叫做(imm缩写))

  2.操作数可以是存放数据的寄存器(上面也说了, ax目的地操作数)

  3.操作数可以是存储器的地址(怎么理解,可以理解为 mov ax,[2000])可以是一个地址

立即寻址

      mov ax,2000h

格式是:

      操作码  立即数

      操作码则是mov  立即数就是后面的数

寄存器寻址方式

mov ax,1234h

mov bx,ax

机器代码格式

操作码

89 操作码和操作数

存储器寻址方式

  • 8086设计了多种存储器寻址方式

1、直接寻址方式

2、寄存器间接寻址方式

3、寄存器相对寻址方式

4、基址变址寻址方式

5、相对基址变址寻址方式

五种寻址方式,加上上面两种总共其中

直接寻址方式

mov ax,[2000h]

反汇编:

机器代码格式

      操作码 立即数

      A1         0020

寄存器间接寻址方式

有效地址存放在基址寄存器BX或变址寄存器SI、DI中

默认的段地址在DS段寄存器,可使用段超越前缀改变

MOV AX,[SI] ;AX←DS:[SI]

机器码格式

操作码 寻址方式,目的寄存器

8B 04

      04拆分为二进制为  0000 0100 00(寻址方式) 000(目的寄存器) 100 (源操作数)

可以对应下方的表格

查找 (mod 寻址方式 )

由此得出源操作数是SI

寄存器相对寻址

有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI

有效地址=BX/BP/SI/DI+8/16位位移量

段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变

mov ax,[di +  06h]两种不同的形式,如过06是8位的话那么寻址方式是不同的.

操作码  寻址方式/目标寄存器/源操作数    位移量

8B         45                                          06

45 得出寻址方式目的寄存器,和源操作数

01 000  101

代表了DI 要加一个8位的偏移量即可.

基址变址寻址方式

有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:

有效地址=BX/BP+SI/DI

段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

mov ax,[bx+si] 基址寄存器(bx bp) 变址寄存器(SI DI)

操作码 寻址指令/目标寄存器,源操作数

8B        00

基址变址,相对寻址

mov ax,[bx + si +06h]

操作码 寻址公式/目标寄存器/源操作数  位偏移

8B           40                                    06

拆分40得出 0100 0000 

表示BX + SI 还需要家后面的8位偏移量6

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

一图读懂JVM架构解析

本文阐述了JVM的构成和组件,配图清晰易懂,是学习Java开发者的入门必读文章。 每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行。但他们或...

2258
来自专栏我的博客

CI基础知识笔记

1.知识点 $config[‘url_suffix’] = ”;//url后缀 $config[‘enable_query_strings’] = FALS...

2853
来自专栏阮一峰的网络日志

汇编语言入门教程

学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机...

3434
来自专栏用户画像

4.2.2 常见的数据寻址方式

如单地址的指令格式,就不是明显地在地址字段中指出第二操作数的地址,而是规定累加器ACC作为第二操作数,指令格式明显指出的仅是第一操作数的地址。因此,累加器ACC...

962
来自专栏小狼的世界

PHP手册阅读笔记

学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些时间,完成了对PHP手册的通读。除了函数参考部分没有每个都看,其他的章节基本上都看...

1884
来自专栏orientlu

FreeRTOS 消息队列

上面这几中方式中, 除了消息通知, 其他几种实现都是基于消息队列。消息队列作为主要的通信方式, 支持在任务间, 任务和中断间传递消息内容。 这一章介绍 Fre...

4872
来自专栏Ryan Miao

redis学习之二from github

大概敲了一遍基本命令,熟悉了redis的存储方式。现在开始进一步系统的学习。学习教程目前计划有三个,一个是github上的https://github.com/...

3446
来自专栏H2Cloud

C++中消息自动派发之三 About JSON Encode

  《C++ 消息自动派发》系列上篇介绍了IDL解析器,生成的C++代码只支持JSON转C++ struct。 经过新的重构,这次增加了对C++ struct ...

4505
来自专栏我有一个梦想

C++服务器开发之笔记三

为什么需要原子性操作? 我们考虑一个例子: (1)x++这个常见的运算符在内存中是怎样操作的? 从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内...

2057
来自专栏Petrichor的专栏

git: .gitignore文件 (忽略文件)

Note: 切记目录名后面 一定要加 反斜杠 / ,不然会当成 单文件 处理。

1812

扫码关注云+社区

领取腾讯云代金券