X86主要的几种寻址方式
一、首先
P33:
严格来说有三种寻址方式
- 与数据有关的寻址方式
- 与转移指令或过程调用指令有关的寻址方式
- 与IO指令有关的寻址方式
这篇博客只讲1.2两条
二、然后
1. 与数据有关的寻址方式
数据
,这个东西主要来自寄存器
,立即数
,内存
,知道这个,就比较好办了
以下表格顺序与书本中不同。
寻址方式 | 讲解 |
---|---|
立即寻址 | 指令所需的操作数直接包含在指令代码中,就是常说的立即数 注意,立即数有8/16位两种,在使用时要求与另一个操作数长度匹配 且只能出现在源操作数位置 |
直接寻址 | 操作数来源于(指令中直接指出的地址所指向的内存)MOV AX [2000H] ,这个方括号的意思是“以括号内的值作为地址,(所指向的内存)中存储的值”MOV AX,x 这里的这个x是之前在数据段定义的变量,当汇编程序被汇编时,汇编器会计算出x的偏移值,然后替换掉原来的x所以在DEBUG模式下,看到的就不是变量名,而是变量名在数据段中的偏移地址 |
寄存器寻址 | 操作数来源于某个寄存器/是这个寄存器里存储的值 比如我要把某个16位的数从BX复制到AX,那么我可以用 MOV AX,BX 这里的两个操作数都是寄存器寻址 |
寄存器间接寻址 | 这就很好理解了,现在括号里放的不是立即数了,放的是寄存器了,代表操作数在内存中,它的地址的括号内的寄存器中 不过这个间接寻址有几个注意点: 1. 寄存器一般使用的是基址寄存器BP\BX或变址寄存器SI\DI 2. 完整的形式应该是[段地址]:[段内偏移] 3. 当未显式指定段寄存器时,BX\SI\DI中是相对于DS段的偏移地址,BP是相对于SS段的偏移地址 |
寄存器相对寻址 | 操作数的地址 = 间址寄存器+偏移量 同直接寻址一样,偏移量可以是一个常量也可以是一个符号名或变量名 例如 MOV AX,[SI+10H] 或MOV AX,ARRAY[SI] |
基址变址寻址 | 操作数地址 = 基址寄存器+变址寄存器 例如 MOV AX,[BX+SI] |
2.与转移地址有关的寻址方式
这四种寻址方式主要运用于转移指令JMP
和过程调用指令CALL
首先要了解这两个东西:
标号,过程名(自己看,不讲了)
寻址方式 | 讲解 |
---|---|
段内直接 | 就是说我们现在程序运行到这里需要发生一个转跳 去执行其他地方的一些代码 辣么这些代码在哪里呢 我们进行了一些运算,用当前IP的值加上指令中指定的偏移量,得到了一个地址 然后我们就要跳到那里去 比如 JMP func1 偏移量可以是8位或者16位,相对的我们就要使用 SHORT func1 或者NEAR PTR func1 |
段间直接 | 这个和段内直接 的区别是什么呢就是一个X86汇编程序,可能有几个代码段,当使用段间直接寻址时,需要改变段地址的值,相当于跳到了另一个代码段,开始执行新的代码 比如 JMP FAR PTR func1 |
段内间接 | 跟段内直接的区别是:要转跳的地址放在了寄存器里,而不是一个标号 (参考一下2里的寄存器简介寻址吧) |
段间间接 | 类似于段内间接,但是,间接寻址的地址不能直接放在寄存器里,只能放在内存单元中,而且是一个双字 |
可以简单看看这个博客:
https://blog.csdn.net/b_h_l/article/details/28866267
X86主要的几种寻址方式的更多相关文章
- ARM的九种寻址方式
文章目录 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 4.寄存器偏移寻址 5.寄存器基址变址寻址 6.批量寄存器寻址 7.相对寻址 8.堆栈寻址 9.块拷贝寻址 寻址方式就是CPU根据指令中的 ...
- ARM寄存器的8种寻址方式01
一.立即数寻址 操作数由指令本身给出 MOV r0,#0x0F //是所有寻址方式里面速度最快的,但是受到合法立即数的限制 立即数要求以#和$开头 十六进制,#后跟0x:十进制,#后直接加:八进制,# ...
- ARM的9种寻址方式
立即寻址 操作数是立即数,以“#”为前缀,表示 16 进制数值时以“0x”表示. 例: MOV R0,#0xFF00 ;0xFF00 -> R0 SUBS R0,R0,#1 ...
- ARM 内核 汇编指令 的 8种 寻址方式
str: store register ->指令将寄存器内容存到内存空间中, ldr: load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...
- X86 寻址方式、AT&T 汇编语言相关知识、AT&T 与 Intel 汇编语言的比较、gcc 嵌入式汇编
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- C语言的本质(29)——C语言与汇编之寄存器和寻址方式
x86的通用寄存器有eax.ebx.ecx.edx.edi.esi.这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中.但也有一些指令规定只能 ...
- x86汇编程序基础(AT&T语法)
一.简单的汇编程序 以下面这段简单的汇编代码为例 .section .data .section .text .globl _start _start: movl $, %eax movl $, %e ...
- X86/X64处理器体系结构及寻址模式
由8086/8088.x86.Pentium发展到core系列短短40多年间,处理器的时钟频率差点儿已接近极限.尽管如此,自从86年Intel推出386至今除了添加一些有关流媒体的指令如mmx/sse ...
- x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式
目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二 ...
随机推荐
- PyQt5--QCheckBox
1 # -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys ...
- 启动android monitor报错解决办法
再这汇总一下这段时间使用android monitor新遇到的问题,特汇总对应问题解决办法如下: 1.确保JDK和Android studio位数相同,比如JDK使用的是64位,studio也要是64 ...
- Articulate Presenter文字乱码的排除
Articulate Presenter乱码的问题如何设置? 字体乱码的设置: 1.首先如果ppt中有中文内容,肯定需要将Articulate Presenter的Character Set设置为No ...
- 难度并不NOIP的NOIP模拟赛
今天老师请了前几届的学长来讲课,可是讲课为什么要考试呢... 学长说难度是NOIP,于是我就naive的跟着参加了,然而T3难度并不友好,感觉确实不是很适合我们现在做......不过课本来也不是给我们 ...
- BZOJ4892:[TJOI2017]dna(hash)
Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表 ...
- 微信发红包 PHP 实现
最近做生日营销,需要微信发红包,特此从网上找了一篇教程 首先你的有个服务号,并且开通了微信支付,我在这就不说怎么去申请和开通了,我是看了微信官方文档后,想看官方文档的朋友可以到下面这个链接 https ...
- 【FRM123】Wrong Way Risk
https://www.investopedia.com/articles/investing/102015/introduction-wrong-way-risk.asp https://www.r ...
- 使用docker-compose运行Django
1.新建空目录 2.进入该目录新建Dockerfile文件,并在该Dockerfile文件添加如下内容 FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir / ...
- Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs
在部署工程时,没有加入javax.servlet-api.jar(3.0.1) 和 standard.jar(1.1.2)两个jar包导致此问题. 另外,如果原来容器中有javax.servlet-a ...
- pyspider爬取数据存入es--2.测试数据库连通性
写一个简单案例测试能否将数据写入es #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2017-10-27 08:35:57 ...