《汇编语言》第二章 寻址方式与指令系统

本贴最后更新于 2793 天前,其中的信息可能已经时移俗易

u指令格式

Ø机器语言指令格式

8086指令系统采用1到6个字节组成的变字长指令格式,有操作码、寻址方式、操作数三部分组成,如下图,  

blob.png

一般是指令的第1个字节为操作码,规定指令的操作类型。第2个字节规定操作数的寻址方式,第3到6字节是可变字节,指出存储器操作数地址的位移量或立即数。

Ø汇编语言指令格式

汇编语言指令的基本格式:操作助记符   目的操作数   源操作数

操作助记符指出计算机进行什么样的操作;目的操作数有两个作用——参于指令操作与暂存操作结果。除立即寻址方式外,其他寻址方式均适用于目的操作数。源操作数提供原始数据或操作对象,面向所有寻址方式。

u寻址方式

1.数据寻址方式

1)立即寻址方式中,指令操作码和操作数都在存储器代码段中。

汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)

功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。

图形表示: 

指令
n

2)寄存器寻址方式的操作数在指令指明的寄存器中。

汇编格式:R,其中R表示寄存器名。

功能:操作数直接存放在寄存器R中。

3)变址寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中。

汇编格式:X[R](X表示位移量,是8位或16位二进制补码表示的有符号数)

功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。

图形表示:

blob.png

4)寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。

汇编格式:[R]

功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。

5)寄存器相对寻址

  寄存器相对寻址指的是操作数的偏移地址是一个基址寄存器或变址寄存器加上指令中给出的8位或16位位移量。

实际上就是在寄存器间接寻址的基础上,再加上一个位移量。

6)基址变址寻址

基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容与变址寄存器内容的和。

7)基址变址相对寻址

基址变址相对寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容、位移量X三项之和,操作数在存储器中。

汇编格式:X [BR+IR]

功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。

图形表示:

blob.png


    8)I/O端口寻址

I/O端口寻址有两种:直接端口寻址与间接端口寻址。

u  转移地址寻址方式

1)段内直接寻址:程序转移的有效地址是当前IP内容加上指令中给出的8位或16位位移量。当位移量为8位时,称为短转移,在符号地址前加操作符SHORT;当位移量为16位时,称为近转移,在符号地势前加操作符NERAPTR。

2)段内间接寻址:程序转移的有效地址是在寄存器或存储单元中。

3)段间直接寻址:与段内直接寻址不同,在指令中给出了转移地址的段地址和偏移地址的内容。

4)段间间接寻址:类似于段内间接寻址,只是在间接寻址时转移地址必须放入存储单元中。

u  MOV ( Move ):传送

Ø  一般形式

       MOV dest, src; dest = src。将源操作数src复制到目的操作数dest,src不变。

Ø  语法格式

       MOV reg/mem/seg, reg/mem/seg/imm

    对标志位的影响:无。

Ø  说明

 dest与src不能作如下搭配:

              MOV     mem, mem ; 错误

              MOV     seg, seg ; 错误

              MOV     seg, imm ; 错误

 dest不能是CS。

 dest与src必须类型匹配,即同时是字节、字或双字类型。

u  MOVSX

Ø  一般形式

       MOVSX dest, src; src符号扩展为dest;386新增

      语法格式:

             MOVSX reg16, reg8/mem8

             MOVSX reg32, reg8/mem8/reg16/mem16

Ø  功能描述

MOVSX是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或32位数,或者将16位数符号扩展为32位数。

Ø 

CBW和CWDE的功能可由MOVSX指令实现。

              movsx ax, al ; 等价于cbw

                  movsx eax, ax ; 等价于cwde

                  movsx eax, al ; 等价于顺序执行cbw与cwde

u  XCHG ( Exchange ):交换

Ø  一般形式:

       XCHG oprd1, oprd2; 交换oprd1与oprd2的内容

Ø  语法格式:

       XCHG reg/mem, reg/mem

    对标志位的影响:无。

Ø  说明:

oprd1与oprd2不能作如下搭配:

       XCHG    mem, mem  ; 错误

oprd1与oprd2类型必须匹配。

Ø   

       xchg ebx, edx

       xchg [ebp][eax*4], edx

u  堆栈操作指令

Ø  80x86系统的堆栈具有如下特点:

堆栈是在内存的堆栈段中,具有“先进后出”的特点。

堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单元。

堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反。


堆栈操作只能以字或双字为单位。

SS:SP指向栈顶。

Ø  PUSH与POP:进栈与出栈

  语法格式:

       PUSH  reg16/seg/mem16/ reg32/mem32

         POP   reg16/seg/mem16/ reg32/mem32; 操作数不能是CS

       PUSH  imm; 286新增

  功能描述:

       PUSH指令(16位):

              SP = SP - 2

              SS:[SP] = 16位操作数

       POP指令(16位):

              16位操作数 = SS:[SP]

              SP = SP + 2

       PUSH指令(32位):

              SP = SP - 4

              SS:[SP] = 32位操作数

       POP指令(32位):

              32位操作数 = SS:[SP]

              SP = SP + 4

    对标志位的影响:无。

Ø  PUSHF与POPF:标志寄存器进栈和出栈

 语法格式:

       PUSHF ; FLAGS进栈

       POPF ; 栈顶字出栈到FLAGS

对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。  

  

设SP = 100H, EBX = 12345678H, 给出下列指令依次执行后的结果。

      push  bx;  ss:[00ffh] = 56h, ss:[00feh] = 78h, sp = 0feh

      pop  ax;  ax = 5678h, sp = 100h

      push  ebx; ss:[00feh] = 1234h, ss:[00fch] = 5678h, sp = 0fch

      pop  ax;  ax = 5678h, sp = 0feh

      pop  ax;  ax = 1234h, sp = 100h  

    【例】交换AX与CX的值。

              push  ax

              push  cx

              pop   ax

              pop   cx

u  符号扩展与零扩展指令

对标志位的影响:无。

(1)CBW、CWD、CWDE与CDQ

语法格式:

      CBW; AL符号扩展为AX

      CWD; AX符号扩展为32位数DX:AX

     CWDE; AX符号扩展为EAX;386新增

     CDQ; EAX符号扩展为64位数EDX:EAX;386新增

【例】设AL = 0FEH,给出依次执行下列指令后的结果。

            cbw;  ax = 0fffeh

            cwd;  dx = 0ffffh, ax不变,即dx:ax = -2

            cwde;  eax = 0fffffffeh(-2)

            cdq;  edx = 0ffffffffh, eax不变,即edx:eax = -2




相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
idxiu
show me the code, change the world! 北京

推荐标签 标签

  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 200 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 59 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 50 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖 • 3 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 514 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 643 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 356 关注
  • danl
    89 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 703 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 391 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 524 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 446 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    14 引用 • 7 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 689 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 19 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 611 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    28 引用 • 66 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 711 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖 • 1 关注