-
汇编语言寻址方式
2016-09-19 19:32:52汇编语言的寻址方式 MOV 是汇编语言用得最多的语句 他的使用方法 是 MOV 目的地址,源地址 下面便通过MOV来介绍汇编语言的几种寻址方式 1. 立即寻址 MOV AX,1234H 2.寄存器寻址 MOV SI,AX 3.直接寻址 MOV AX,[1234H] ...汇编语言的寻址方式 汇编有7种寻址方式
MOV 是汇编语言用得最多的语句 他的使用方法 是 MOV 目的地址,源地址
下面便通过MOV来介绍汇编语言的几种寻址方式
1. 立即寻址 MOV AX,1234H
2.寄存器寻址 MOV SI,AX 源操作数和目的操作数 同时为寄存器
3.直接寻址 MOV AX,[1234H] ;[]相当于c语言的指针 语句的意思 段值 加上 偏移的1234H
4.寄存器间接寻址 MOV AX,[SI]
5.寄存器相对寻址 MOV AX,[DI+1234H]
6.基址加变址寻址 MOV DS:[BX+SI],AX
7.相对基址加变址寻址 MOV AX,[BX+DI-2]
offset 编译器编译源代码时就执行了
-
80x86汇编语言寻址方式介绍
2019-10-28 15:20:0780x86汇编语言寻址方式介绍 立即数寻址 操作数直接包含在指令代码中,可以是8或者16位。立即数作为指令的一部分,直接从BIU指令队列取出,因此速度更快。唯一缺点:只能作为源操作数。 寄存器寻址 指令中所需的操作...80x86汇编语言寻址方式介绍
立即数寻址
操作数直接包含在指令代码中,可以是8或者16位。立即数作为指令的一部分,直接从BIU指令队列取出,因此速度更快。唯一缺点:只能作为源操作数。
寄存器寻址
指令中所需的操作数在CPU某个寄存器中,可以是8位/16位段寄存器,这个操作完全在CPU内部,因此执行也很快。
以下指令需要CPU以外的东西参与
一个存储单元逻辑地址:段基址:偏移量
段基址由某个段寄存器提供,偏移量也叫有效地址EA(存储单元到基址的距离)直接寻址
用符号或者常数表示
mov bx,var;mov bx,DS:var or mov bx,DS:var+0 mov bx,DS:[64H];常数表示要用方括号括起来,段寄存器不能省略。
寄存器间接寻址
事先将偏移量放在某个寄存器中(BX/BP/SI/DI),如同一个地址指针。指示寄存器所在段的段寄存器可以省略,指令中使用的是BP则隐含使用SS,否则隐含使用DS
mov ax,[bx];mov ax,ds:[bx] mov bh,[bp];mov bh,ss:[bp]
为什么这么规定呢?
BP是栈帧寄存器,子程序用它获取主程序传来的参数。很多子程序都使用堆栈传参,所以非常有用。这也是BP最常见的用途,所以干脆规定:BP默认就是跟SS联用的。
基址/变址寻址
EA=基址分量/变址分量+指令中给出的位移量
指令中使用BX/BP为基址寻址,使用SI//DI为变址寻址
隐含使用规则相同mov ax,10h[si];mov ax,ds:10h[si] mov table[di],al;mov ds:table[di],al;位移量为常数不能加方括号
这两种寻址方式只需要通过改变寄存器内容就可以用一条指令访问不同的存储单元,由于增加了一个位移量数据,因此能够很方便访问数组和表格数据。
基址变址寻址
这是三个地址分量的和。
EA=基址+变址+偏移量
基址选用BX时隐含使用DS,选用BP时选用SS。
基址BX/BP二选一,变址SI/DI二选一方便访问二维数组串操作寻址方式
隐含使用SI/DI
寻找源操作数用SI,目的操作数用DI
传操作完成后会自动修改SI和DI,指向下一个操作数I/O端口寻址
IN/OUT指令
直接端口寻址
如
in al,25h;
间接端口寻址
先送端口地址到DX
-
汇编语言寻址方式总结
2020-10-21 16:59:301 立即寻址 操作数为立即数。 常用于给寄存器或内存单元赋初值 只能用于源操作数,不能用于目的操作数 例: MOV AL, 34H MOV AX, 1234H 2 寄存器寻址 操作数存放在CPU内部的寄存器中。 例: MOV CX, AX 3 直接...1 立即寻址
操作数为立即数。
- 常用于给寄存器或内存单元赋初值
- 只能用于源操作数,不能用于目的操作数
例:
MOV AL, 34H
MOV AX, 1234H
2 寄存器寻址
操作数存放在CPU内部的寄存器中。
例:
MOV CX, AX
3 直接寻址
操作数地址的16位偏移量直接在指令中给出(存放于代码区),而操作数存放在数据区。(操作数的地址为DS左移四位加上该16位偏移量)
例:
MOV AX, [1200H]
4 寄存器间接寻址
操作数在存储器中,操作数地址的16位偏移量在寄存器中(SI、DI、BX、BP)。
- 若以SI、DI、BX间接寻址,操作数在数据段中,操作数地址为DS左移四位加上SI、DI、BX其中之一的内容。
例:
MOV AX, [SI]
MOV AX, [BX]
- 若以BP间接寻址,则操作数在堆栈段区域内,操作数地址为SS左移四位加上BP的内容。
例:
MOV AX, [BP]
- 段超越:SI、DI、BX中储存的偏移量可以与其他段寄存器储存的段基址组合成操作数的地址。
例:
MOV AX, ES:[SI]
或ES:MOV AX, [SI]
5 变址寻址
以SI、DI寄存器的内容,加上指令中给定的8位或16位偏移量作为操作数的地址。(必须要有一个段寄存器作为基地址,如:DS)
- 允许段超越
例:
MOV AX, [DI+60]
或MOV AX, 60[DI]
MOV BX, [SI+1000H]
或MOV BX, 1000H[SI]
6 基址加变址寻址
把BX和BP看做基址寄存器,把SI和DI看做变址寄存器,将这两种寻址方式结合起来形成一种新的寻址方式。
把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中给出的8位或16位的偏移量,从而形成操作数的偏移地址。
默认BX以DS为基地址,BP以SS为基地址。(允许段超越)例:
MOV AX, [BX+SI+1030H]
或MOV AX, 1030H[BX+SI]
或MOV AX, 1030H[BX][SI]
7 注意
内存操作数地址只能由BX、BP、SI、DI给出,它们的组合也不是任意的。
- 寄存器间接寻址
[SI]
、[DI]
、[BX]
、[BP]
。 - 变址寻址
[SI+X]
、[DI+X]
、[BX+X]
、[BP+X]
。 - 基址加变址寻址
[BX+SI+X]
、[BX+DI+X]
、[BP+SI+X]
、[BP+DI+X]
。
-
AT&T汇编语言寻址方式
2017-07-22 21:40:42现在,能够静下心来去读... 想要看懂汇编语言,首先就要熟悉汇编语言各种寻址方式。汇编语言不同的代码格式,本文主要介绍AT&T。Linux 内核使用的就是这样格式,linux 上的工具如gcc和objdump默认生成的代码也是AT&T格现在,能够静下心来去读一段汇编代码的程序员已经不多,因为大多数人的工作中基本用不到。但是能够读懂汇编代码能够提高程序员对程序如何在机器上跑起来的理解和提高程序员的基本功。
想要看懂汇编语言,首先就要熟悉汇编语言各种寻址方式。汇编语言不同的代码格式,本文主要介绍AT&T。Linux 内核使用的就是这样格式,linux 上的工具如gcc和objdump默认生成的代码也是AT&T格式。
简单说一下AT&T汇编,"#"井号开头的是注释行,"."点开始的指令一般都是伪指令,"$"美元符号修饰立即数,"%"修饰寄存器。AT&T 和Intel格式的对比可以参考这篇文章 https://www.ibm.com/developerworks/cn/linux/l-assembly/
汇编语言寻址方式主要有下表几种方式:
1. 立即数寻址
把常数放到寄存器或存储器中
movl $2, %ebx # 把2放到寄存器ebx中
2. 寄存器寻址
把寄存器中的值放到寄存器或存储器中
movl $2, %ebx # 立即数寻址
寄存器寻址, 把ebx的值放到eax中
3. 直接寻址(绝对寻址)
把某个地址上的值放到寄存器中
movl 0x8000, %eax # 把地址0x8000上的值放到eax中
4. 间址寻址
把寄存器上的值所代表的地址所指向的值放到寄存器中
movl $0x8000, %ebx # 立即数寻址
movl %ebx, %eax # 间址寻址, 把地址0x8000(放在寄存器ebx中)上的值放到eax中
5. 基址寻址
是以寄存器里的数值作为基址,加上一个常数得到最终地址,把地址上的值放到寄存器中
movl $0x8000, %eax # 立即数寻址
movl 4(%eax), %ebx #基址寻址, 把地址0x8004(0x8000+4)上的值放到eax中
6. 变址寻址
是以两个寄存器里的数值之和加上一个常数得到最终地址,把地址上的值放到寄存器中
movl $0x8000, %eax # 立即数寻址
movl $0x4, %ebx # 立即数寻址
movl (%eax,%ebx), %ecx #变址寻址, 把地址0x8004(0x8000+4)上的值放到ecx中
movl 4(%eax,%ebx), %ecx #变址寻址, 把地址0x8008(0x8000+4+4)上的值放到ecx中
7. 比例变址寻址
是以一个寄存器里的数值加上另一个寄存器里的数字 乘以一个比例因子(1,2,4,8)再加上一个常数得到最终地址,把地址上的值放到寄存器中
movl $0x2000, %eax # 立即数寻址
movl $0x2, %ebx # 立即数寻址
movl (,%eax,4), %ecx #比例变址寻址, 把地址0x8000(0x2000 *4)上的值放到ecx中
movl 6(,%eax,4), %ecx #比例变址寻址, 把地址0x8006(0x2000 *4+6)上的值放到ecx中
movl (%ebx,%eax,4), %ecx #变址寻址, 把地址0x8002(0x2000*4+2)上的值放到ecx中
movl 6(%ebx,%eax,4), %ecx #变址寻址, 把地址0x8008(0x2000*4+2+6)上的值放到ecx中
下面写段汇编代码演示一下几种不同的寻址方式
as test.s -o test.o
ld test.o -o test./test
echo $? -
汇编语言寻址方式(Linux)
2016-03-08 10:28:39索引寻址 直接寻址 立即数寻址 简介寻址 寄存器寻址 基址寻址 -
汇编语言寻址方式在结构化数据访问中的应用
2015-09-10 16:18:48汇编语言(第二版)中实验 7.寻址方式在结构化数据访问中的应用,将代码记录下来,方便日后查看。 -
X86处理器架构------汇编语言寻址方式
2013-12-01 16:17:13寻址方式是指寻找指令中操作数或者指令转移地址的方式,分为数据寻址方式和指令转移地址方式两类。 指令系统是指机器所支持的所有指令的集合。 数据寻址方式有:立即数寻址,寄存器寻址,存储器寻址等方式; ... -
汇编语言之寻址方式
2017-07-04 06:41:18简要介绍汇编语言的寻址方式,每种都有样例。 -
汇编语言的寻址方式
2017-10-10 22:11:46Intel 汇编立即寻址方式MOV AH, 80H (直接给寄存器赋值)寄存器寻址方式(源或者目的有一个是寄存器)源操作数是寄存器寻址方式如: ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。 其中: VARD、VARW和VARB是双字,字和... -
汇编语言数据寻址方式
2018-12-15 00:13:11数据寻址方式 1、 立即数寻址 立即数寻址:指令需要的操作数紧跟在操作码之后称之为指令机器码的一部分,并随着处理器的取址操作需要从主存进入指令寄存器。这些操作数用常量形式直接表达,从指令代码中立即得到立即... -
汇编语言七种寻址方式
2020-05-15 00:17:16汇编语言七种寻址方式 1.立即寻址方式 操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数。 MOV AL, 6 2.寄存器寻址方式 操作数直接包含在寄存器中,由指令指定寄存器号... -
汇编语言——寻址方式
2020-05-07 14:06:16FLAG:标志寄存器 3、存储器操作数 存放在存储单元的操作数 类型可以是字节或者字 注:不允许两个操作数的类型均为存储器操作数 寻址方式 指令中指定操作数所在位置的方法,一般指源操作数 寻址方式分类 1、立即数... -
微机原理-汇编语言不同寻址方式运用-实验报告.pdf
2021-01-02 15:06:40微机原理-汇编语言不同寻址方式运用-实验报告,有代码,有注释,完全看得懂的那种 -
80X86汇编语言的寻址方式和指令
2010-11-28 14:19:09比较详尽的综合了80X86汇编语言程序的各种寻址方式、指令及相关说明。 -
ARM汇编语言学习笔记(二)---ARM汇编的寻址方式
2016-11-17 18:01:39ARM处理器的寻址方式 立即寻址 MOV R0,#12345 @R0 = 12345立即数以#开头,十六进制表示为 #0xFF 寄存器寻址 MOV R0,R1 寄存器移位寻址LSL:逻辑左移,移动后寄存器空出低位补0 LSR:逻辑右移,移动后寄存器空出高位... -
AT&T汇编语言及其寻址方式
2017-11-22 13:24:00汇编语言论风格来分主要是两类,一类是Intel汇编,一类是AT&T汇编,分别被Windows和Linux作为主流风格。因为我博客以推荐Linux系统为主,所以以后多以Linux汇编为主要描述语言。 简单说一下AT&T汇编,"#"井... -
汇编语言的寻址方式,初学者
2016-09-04 03:38:15mov ax,1234H mov bx,5678H add ax,bx 前两句是不是立即数寻址方式 第三句是不是寄存器寻址方式 -
汇编语言的七种寻址方式
2017-10-14 15:25:44汇编语言的七种寻址方式 -
汇编语言 指令系统和寻址方式
2013-09-15 15:14:22汇编 指令系统 寻址方式 -
汇编语言的寻址方式(针对16位寻址)
2018-05-16 09:55:52寻址方式 立即寻址 mov ax,3064H(操作数放在指令的下一个单元中) 寄存器寻址 mov ax,bx,(操作数放在寄存器中) 前两种地址都是基于本代码段的 直接寻址 mov ax,[2000H],(操作数放在内存中,指令中直接给出...
-
区块链DEFI系统软件开发的重要训练阶段
-
enterprisesg-cw:暂存:https:enterprisesg-cw-staging.netlify.app | 生产:https:enterprisesg-cw-prod.netlify.app-源码
-
WordPress 5.7新功能(功能说明和屏幕截图)
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
Ubuntu启动Xilinx Vivado
-
C++代码规范和Doxygen根据注释自动生成手册
-
1057 数零壹(PAT乙级 C++实现)
-
电报:有关电报使用情况的有趣统计信息!-源码
-
【Python-随到随学】FLask第二周
-
深究字符编码的奥秘,与乱码说再见
-
基于TI C6678 DSP + Xilinx Kintex-7 FPGA评估板|DSP RTOS案例开发——总目录
-
ACFD作业1_2018311045.pdf
-
PPTP_NNN 服务生产环境实战教程
-
python字符串
-
spark大数据分析与实战
-
Git设置分支保护实现CodeReview卡点
-
龙芯实训平台应用实战(希云)
-
深度学习认知计算综述
-
Spark的广播变量
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)