汇编指令寻址方式

一条指令的寻址方式决定了这个操作如何利用指令中所携带的数据

去寻找真正的操作数据。这里,按最直观的理解分做4大类。

(1)立即寻址:真正的操作数就包含在指令当中。

MOV EAX,1

这条指令的写法就是立即寻址,操作数就是1,指令的含义是把1赋给EAX。

(2)寄存器寻址:操作数据在寄存器内。

MOV EAX,EBX

这条指令的写法就是寄存器寻址,操作数放在EBX内,指令的内含义是把EBX

内的数据赋给EAX。

(3)直接寻址:操作数的地址被直接写在指令内。

MOV EAX,[0x1000]

这条指令的写法就是直接寻址,操作数放在0x1000指向的内存地址内,指令的含义

是把地址为0x1000的数据赋给EAX。

(4)间接寻址:操作数的地址需要经过某种运算才能得到,这种运算可能是从

一个寄存器读取,也可能是把某几个寄存器中的数据相加,等等。

MOV EAX,【EBX】

含义是把EBX里的数据作为一个地址,然后从这个地址得到

数据赋予EAX。

MOV EAX, 【EBX+4】

含义是把EBX里的数据作为一个地址,将这个地址加4后得到新地址,从新地址获取

数据赋给EAX。

MOV EAX, 【EBX+EDX】

含义把EBX里的数据与EDX的数据之和作为地址,从这个

地址获取数据赋给EAX。

MOV EAX,【EBX+ECX*4+4】

含义把EBX里的数据与ECX*4的数据之和作为地址,将这个地址加上4后得到新地址,从

新地址获取数据赋给EAX。

这里ECX*4并非表示CPU在做寻址操作的时候可以同时做乘法,而只是将ECX扩大了4倍,

表示这个数组元素都是32位长整数。

写在[ ] 内的最多只能是3个部分的和,你可以理解为基址、变址和常数偏移。

时间: 2024-12-24 02:24:29

汇编指令寻址方式的相关文章

Android 图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了. 微小的幸福就在身边,容易满足就是天堂. 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章<Android ARM常用的汇编指令合集> 再来继续我们的学习,我们先来看张图. 这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要看得懂,理解这个指令即可,接下来我们就来分析下这些指令分别有什么作用吧. 先引入 概念性 东西,免得大家

学习linux内核时常碰到的汇编指令(1)

 转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvg.html 80X86 汇编指令符号大全 +.-.*./∶算术运算符. &∶宏处理操作符.宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了. $∶地址计数器的值——记录正在被汇编程序翻译的语句地址.每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值. ?∶操作数.在数据定义语句中,操作

16位汇编第六讲汇编指令详解第二讲

16位汇编第六讲汇编指令详解第二讲 1.比较指令 CMP指令 1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状态标志 2.CMP指令执行的功能与SUB指令(相减指令)一样,但是不同的是CMP指令之根据结果设置标志位 而不修改值 可以操作的指令格式 CMP reg,imm/reg/mem CMP mem,imm/reg 上面是CMP指令的语法,具体的也可以查询帮助文档,inter手册 inter手册查的办法 第一个框代表了CMP指令的所有语法 比如 reg,reg 表示可以比较寄存器

&lt;&lt;ASM&gt;&gt; x86汇编指令浅析

学习研究系统/软件底层机制的朋友,汇编是必修课之一.由于汇编具有低级语言固有的特性,使得前期的学习掌握异常困难.本文将着重介绍一些常用而又关键的汇编指令,借此提携那些还在苦苦攀援的“初学者”们. 目前市场上主流的汇编教材中,王爽所著的<汇编语言(第二版)>比较受读者的青睐.笔者自学汇编所选的汇编教材则是杨继文所著的<80x86汇编语言程序设计教程>和<汇编语言程序设计——从DOS到Windows>张雪兰/谭毓安:根据书的厚度就可知其难易程度.读者若初次接触汇编,可以考虑

汇编指令大全

blt   小于跳转 tst r0,#02 bne sleep ldr  r1,#0 解释:位比较,先进行and运算,如果r0第2位不为1,则与的结果为0,设置标志位zero=1,继续下面的ldr指令.反之,zero=0,跳转到sleep执行. bne指令: 非零则跳转 个人总结:tst 和bne连用: 先是用tst进行位与运算,然后将位与的结果与0比较,如果不为0,则跳到bne紧跟着的标记(如bne sleep,则跳到sleep处). tst 和beq连用: 先是用tst进行位与运算,然后将位

ARM汇编指令的一些总结-转

ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch dog timer mov r1, #0x53000000 //立即数寻址方式mov r2, #0x0str r2, [r1] MOV 没有什么好说的,只要掌握几个寻址方式就可以了,而且ARM的寻址方式比386的简单很多.立即数寻址方式,立即数要求以“#”作前缀,对于十六进制的 数,还要求在#后面

ARM汇编指令汇总

1.ARM汇编的格式:    在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写:有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错.常量定义需要顶格书写,不然,编译器同样会报错.    2.字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号.    3.在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同

汇编指令及其特点

基础知识 指令与伪指令 汇编指令:CPU机器指令的助记符,编译后得到1和0组成的机器码,由CPU读取执行 伪指令:本质上不是指令,由编译环境提供,谜底在于知道编译过程,最终不会生成机器码 不同的ARM风格 ARM官方汇编风格:指令一般大写,windows IDE开发环境常用.(譬如:LDR.STR) GNU风格的ARM汇编:指令一般小写,linux中常用.(譬如:ldr.str) ARM汇编的特点 ARM汇编特点1:LDR和STR架构 ARM采用RISC架构,CPU不能直接读取内存,需要将内存内

8086汇编指令速查手册

一.常用指令 二.算术运算指令 三.逻辑运算指令四.串指令 五.程序跳转指令------------------------------------------ 计算机寄存器分类简介: 32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1.数据寄存器数据寄存器主要用来保存操作数和运算结