2023-02-17 14:00阅读: 360评论: 1推荐: 0

指令系统(三)

目录

寻址方式(二)

转移地址的寻址方式

程序的执行顺序由CSIP的内容决定。正常情况下,CPU每执行一条指令,IP的内容自动加 1,使之指向下一条指令。当遇到转移指令时,通过自动改变 CSIP 的内容,达到改变程序执行地址的目的。

实现转移的指令:无条件转移指令 JMP,它表示转移到指定的地址。

image-20230217101820195

段内寻址表示转移在本段内完成,段间寻址表示转移在不同段之间完成。

段内寻址

程序开始转移后,只有 IP变化,通过直接寻址或间接寻址寻找偏移地址是多少,然后传送给 IP

直接寻址(相对寻址)

段内直接寻址是指直接在指令中给出转移目的地址(16位偏移地址,使用标号描述),转移在同一个段内完成

下面分析,转移指令JMP

image-20230217111738258

程序汇编后,JMP L1所占字节为,一个字节的操作码+?个字节的相对位移量

下面再看这个相对位移量是多少

image-20230217111746982

  1. 在执行完跳转前,因为程序汇编自上而下进行,IP指到上图位置,汇编会自动计算标号 L1JMP的相对位移量,当满足两个条件

    • 负向转移

    • 相对位移量 < -128

​ 此时汇编后的相对位移量占1个字节,如果 -32768 > 相对位移量 > -128,此时汇编后的相对位移量占2个字节

  1. 假设,标号 L1JMP下方,由于当程序编译到 JMP时不知道相对位移量是多少,此时汇编后的相对位移量占2个字节。

如果你知道标号 L1JMP的相对位移量不会超过 +128字节,怎么让相对位移量占1个字节呢?

解决,把代码改成:

JMP SHORT L1

SHORT型转移说明,负向转移不超过128,正向转移不超过127

总结

  1. JMP指令占2-3个字节,当相对位移量在上图红色区间时或定义为 SHORT型时,占2个字节;当相对位移量在绿色区域内占3个字节
  2. 转移到目的地的IP=当前 IP+相对位移量

8086指令系统中,所有的 条件转移指令只能是段内转移,且只能是 -128~+127。如果我只能使用条件转移,又想转移到段外怎么办呢?

解决:JMP搭桥。条件转移到段内某标号-->使用 JMP

例:8086CPU执行 JZ L1,指令时 IP=0100Hdisp=FDH,指令执行后 (IP)=?。(JZ是条件转移指令)

-----------------------------------------------------------------------分割线----------------------------------------------------------------------

分析:

  • JZ L1占2个字节,执行完后 IP=0100H+2H=0102H

  • 注意disp=FDH是一个带符号数,因为计算机中带符号数是用补码表示,因为-3的补码是 FDH,所以 disp=-3

    补码:

    • 正数的补码=原码
    • 负数的补码=原码(除符号位外)取反+1
  • (IP)=当前IP+disp=0102H+(-3)=00FFH

间接寻址

段内间接寻址是指转移目的地址(16位偏移地址)保存在寄存器或存储单中,转移也在同一个段内完成

例1:

    MOV BX, OFFSET L2
    JMP BX;(BX)-->IP,段内间接寻址
    .
    .
L2:

例2:

TABLE DW L2
    .
    .
    JMP TABLE;以TABLE变量直接寻址的段内间接寻址
    ;或
    MOV BX, OFFSET TABLE
    JMP WORD PTR [BX];以BX寄存器作间接寻址方式的段内间接寻址
    .
    .
L2:

段间寻址

直接寻址

段间直接寻址是指直接在指令中给出转移目的地址(16 位偏移地址和 16 位段地址),转移在不同段之间完成。指令中用JMP <标号>表示,当然这里的标号与该指令处在不同的段。

间接寻址

段间间接寻址是指转移目的地址(32位地址)保存在存储单元中,转移在不同的段之间完成,在指令中指出存储单元的偏移地址,可以采用以上介绍的 5 种存储器寻址方式。存储单元必须是双字型变量第一个字用于存放目的地址的段内偏移地址,第二个字用于存放目的地址的段地址

寻址方式总结

image-20230217144256480

本文作者:打不死の小强丶

本文链接:https://www.cnblogs.com/x-qiang/p/17129914.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   打不死の小强丶  阅读(360)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 我的名字 焦迈奇
我的名字 - 焦迈奇
00:00 / 00:00
An audio error has occurred.

作词 : 焦迈奇

作曲 : 焦迈奇

编曲 : 李天衣/许蔚天

制作人 : 许蔚天

拜托你轻声重着我的名字

拜托你轻声重着我的名字

拜托你轻声重着我的名字

我学大人的语气应着你

庆幸自己没跑太久

还活在弹丸之地

纯粹的以为世界等同于你

拜托你大声怒斥我的名字

拜托你大声怒斥我的名字

我要赌气向远方跑去

如果没有这些声音

我还搞不清

多远才算是离开的距离

在死缠烂打的青春日子里

在死缠烂打的青春日子里

无非挣扎得也就那么几个问题

我习惯在包里藏一瓶百无聊赖

我习惯在包里藏一瓶百无聊赖

打发人间的白云和苍狗

设计睡着的未来

我庆幸那些难堪正中我的下怀

让我怀疑我的存在

最后笑了起来

拜托你轻声重着我的名字

拜托你轻声重着我的名字

我学大人的语气应着你

庆幸自己没跑太久

还活在弹丸之地

纯粹的以为世界等同于你

我习惯在包里藏一瓶百无聊赖

我习惯在包里藏一瓶百无聊赖

打发人间的白云和苍狗

设计睡着的未来

我庆幸那些难堪正中我的下怀

让我怀疑我的存在

最后笑了起来

我会懂得舍得记得

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

我会懂得舍得记得

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

你是我是你的

我会懂得舍得记得

拜托你轻声重着…

拜托你轻声重着…

鼓 : hayato

鼓 : hayato

贝斯 : 崔文正

吉他 : 周坤

录音师 : 李卓@TC Faders

混音师 : 李卓@TC Faders

音频编辑 : 李卓@TC Faders

母带制作 : 周天澈

录音棚 : 55 TEC Studio