intel汇编指令操作数前后的问题

用objdump反编译执行程序的时候
x = x >> 0x1f;
对应
400ad5: c1 f8 1f sar $0x1f,%eax

但是intel指令集手册里面写的两个操作数先后顺序却是相反的,根据手册所写
SAR r/m32, imm8 Signed divide r/m32 by 2, imm8 times.
所以应该是
sar %eax,$0x1f
为什么会这样呢

1个回答

汇编有at&t格式和intel格式,intel自己的手册用后者写。写法颠倒,但是说的是一回事。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
GNU 汇编指令
GAS中每个操作都是有一个字符的后缀,表明操作数的大小。 C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char* l 4 float s
Intel 32位 X86 汇编指令
本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻辑计算指令、算数运算指令),以及函数的调用规则。个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序。当然,更复杂的指令请参阅Intel相关文档。 1 寄存器. 主要寄存器如下图所示: X86处理器中有8个32位的通用寄存器。由于历
intel 64汇编指令集完整版(原版共3卷)
This document contains the following: Volume 1: Describes the architecture and programming environment of processors supporting IA-32 and Intel® 64 architectures. Volume 2: Includes the full instruction set reference, A-Z, in one volume. Describes the format of the instruction and provides reference pages for instructions. Volume 3: Includes the full system programming guide, Parts 1, 2, and 3, in one volume. Describes the operating-system support environment of Intel® 64 and IA-32 architectures, including: memory management, protection, task management, interrupt and exception handling, multi-processor support, thermal and power management features, debugging, performance monitoring, system management mode, virtual machine extensions (VMX) instructions, Intel® Virtualization Technology (Intel® VT), and Intel® Software Guard Extensions (Intel® SGX).
Intel 8086 汇编指令手册
一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVSX 先符号扩展,再传送.     MOVZX 先零扩展,再传送.     PUSH  把字压入堆栈.     POP  把字弹出堆栈.     PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
Intel汇编指令在线手册
Intel汇编指令在线手册http://faydoc.tripod.com/cpu/index.htm
Intel汇编指令参考手册
Intel汇编指令参考手册 官方文档 pdf 英文
内嵌汇编 - cmpxchgl 指令学习笔记
一、背景又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。 在看nws源码的时候,里面有这样一段代码static __inline__ unsigned long atomic_cmp_set(volatile void *ptr, unsigned long old, unsigned long set) { unsigned l
汇编指令手册(其实Intel的官方文章最好,只可惜是pdf格式的,不方便)
一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVSX 先符号扩展,再传送.     MOVZX 先零扩展,再传送.     PUSH  把字压入堆栈.     POP  把字弹出堆栈.     PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
汇编指令imul 与 操作数
最近在练《天书夜读》,在2.3 C语言的数组与结构 章节里有如下代码(注:我用的是VS2005): --- e:\practice\visual studio 2005\projects\reverseme\reverseme\reverseme.c ---- // ReverseMe.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" typed
intel汇编指令
反汇编引擎的目的就是要把机器码翻译成汇编语言的格式,主要的汇编格式有Intel格式、AT&T格式,一般在window环境中使用的大多数都是intel格式的汇编语言。这里从官方手册的介绍中总体介绍这两部分的内容,只有知道机器码的格式,汇编指令的格式,才能在其上架起一座桥梁汇编或反汇编。这里我们习惯称汇编指令为Intruction operand,而称机器码为Intruction Opcode。
Intel 8086/8088系统寻址方式
<br /><br />计算机的指令集合称为指令系统。一条指令主要包括操作码和操作数。<br /> <br />操作码表示该指令要完成的操作,如传送、加、减、乘、除等。操作数字段表示操作码所需操作数的来源和操作结果的去向。<br /> <br />寻址方式是规定如何对指令中操作数字段作出解释以找到操作数的方法。8086/8088有以下几种寻址方式:<br /> <br />寄存器寻址方式、立即数寻址方式、存储器寻址方式(直接寻址方式、寄存器间接寻址方式、变址和基址寻址方式、基址变址寻址方式)、串操作寻址方式
汇编MOVSX指令详解
  MOVSX说明:带符号扩展传送指令  符号扩展的意思是,当计算机存储某一个有符号数时,符号位位于该数的第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展MOVZX是一样的,将扩展的高位全赋为0.   例子:MOV BL,80H          MOVSX AX,BL   AX == 0FF80H    可能初学者奇怪80H不是正数吗?FF怎么来的?
Intel 汇编指令手册
Intel 汇编指令手册 来源: ChinaUnix博客  日期: 2008.08.25 15:59 (共有条评论) 我要评论     一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVS
Intel386汇编指令摘要
2.6.4 Intel386汇编指令摘要 在阅读Linux源代码时,你可能遇到很多汇编指令,有些是你熟悉的,有些可能不熟悉,在此简要列出一些常用的386汇编指令及其功能。 1. 位操作指令     指令                                   功能     BT                              位测试        BTC      
64位汇编指令集的变化等
指令集变化 1.地址宽度和操作数宽度前缀      64位模式中,缺省的地址宽度是64位,缺省的操作数宽度是32位。地址宽度和操作数宽度前缀允许32位和64位数据和地址在指令序列中混用。下表(1-7)显示了在IA-32e模式下需要指令前缀地址宽度。注意,在64位模式下不支持1
汇编指令: MOV、MOVSB、MOVSW、MOVSD、MOVSX、MOVZX
 汇编指令: MOV、MOVSB、MOVSW、MOVSD、MOVSX、MOVZX   ||字号 订阅  名称   功能  操作数 操作码 模数 寄存器1 寄存器2 或内存 位移量 立即数 符号 方向 芯片 型号 16位 32位 MOV 传送 累加08 $A0 无 无 无 无 无 无 无 8086 无 $
X86汇编指令集
一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVSX 先符号扩展,再传送.     MOVZX 先零扩展,再传送.     PUSH  把字压入堆栈.     POP  把字弹出堆栈.     PUSHA 把AX,CX,DX,BX,SP,BP,S
neg+sbb指令
neg指令:intel指令手册是这样说明的 IF DEST = 0 THEN CF ELSE CF 就是说,当操作数为0时,cf标志为0,否则cf被置1.(这让我们联想到c语言中很多函数返回0和非0,然后用if来判断0或者非0走不同的分支) neg指令的作用就是对操作数求反,neg eax :用伪代码表示就是 eax = -eax;
学习笔记-----浅谈汇编指令CMP运行机制
在汇编中,CMP和JMP指令常常用于比较操作,而且查看反汇编源码时也发现不管是.IF伪指令还是其他的底层都是用CMP实现的。 指令格式: CMP 目的操作数,源操作数 计算机在遇到CMP指令的时候,CPU将目的操作数和源操作数做减法(即目的操作数-源操作数)从而根据运算结果修改标志位(如OF, CF , ZF, SF等)的值,然后接下来用相应的跳转指令来进行选择执行哪一段代码 另外,操作数
X86汇编指令学习笔记
今天来扒一扒X86汇编指令(IA-32指令),首先看看它的概念: IA-32(Intel Architecture 32bit,英特尔32位体系架构)[1] ,属于X86体系结构的32位版本,即具有32位内存地址和32位数据操作数的处理器体系结构,从1985年面世的80386直到Pentium 4,都是使用IA-32体系结构的处理器。 一、IA-32指令的格式简介 可以看到一条完整的IA
常见汇编指令及范例解释
有两种汇编格式:Intel汇编和AT&T汇编,前者常用于Windows,后者常用于Unix,是GNU汇编器的缺省格式,本文介绍后者(AT&T汇编格式)。 1,常用指令及解释 movl %eax, %edx  ---   数据传递,%eax地址传递给%edx pushl %eax  --- 入栈,分两步:subl $4, %esp(栈向低地址方向增长) + movl %eax, (%esp)
Intel 64汇编指令集中的LOCK指令前缀
(译自intel 64-ia-32-architectures-software-developer-instruction-set-reference-manual) LOCK指令前缀会设置处理器的LOCK#信号(译注:这个信号会使总线锁定,阻止其他处理器接管总线访问内存),直到使用LOCK前缀的指令执行结束,这会使这条指令的执行变为原子操作。在多处理器环境下,设置LOCK#信号能保证某个处理器
转:汇编指令手册(其实Intel的官方文章最好,只可惜是pdf格式的,不方便)
导读: <!--google_ad_client = "pub-7058131363132249";/* 468x15, 创建于 08-6-3 */google_ad_slot = "4187223796";google_ad_width = 468;google_ad_height = 15;//--> <script type="text/javascript"
gcc中的内嵌汇编语言(Intel i386平台)
gcc中的内嵌汇编语言(Intel i386平台)  一.声明  虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇 编源程序中的,特别是Linux的启动代码部分;还有一些则是利用gcc 的内嵌汇编语言嵌在C语言程序中的。这篇文章简单介绍了gcc中的内 嵌式汇编语言,主要想帮助那些才开始阅读Linux核心代码的
intel汇编指令hlp版 带示例
intel汇编指令hlp版 带示例intel汇编指令hlp版 带示例intel汇编指令hlp版 带示例
Intel汇编语言程序设计(第五版)
《国外计算机科学教材系列•Intel汇编语言程序设计(第5版)》全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用C/C++等最新编译器与汇编的混合接口编程;从16位实模式下BIOS、DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计;从磁盘基础知识到Intel指令编码、浮点运算等相关知识都做了深入而细致的讲解。
AT&T 格式Linux 汇编语法
AT&T汇编是UNIX下惯用的汇编格式 l ,w,b是AT&T汇编中用来表示操作属性的限定符 l是长字(4字节), w是双字 b是一个字节 加在指令的后边 相当于intel中的 dword ptr word ptr byte ptr movl 12(%ebp)
intel 汇编指令
intel的汇编指令
Intel 汇编指令
Intel 汇编指令
lock指令
<br />今天看源码发现了一条以前没关注的汇编指令lock,查了一篇日志,解释比较清除,转来参考。<br />以下为转载内容:<br />转载地址:http://ooooooo.blogbus.com/logs/1357939.html<br />今天看L4的代码,其中一个名为L4_KernelInterface的API让我迷惑了很久。其实现如下:<br />void * L4_KernelInterface(<br />         L4_Word_t *ApiVersion,<br />     
intel x86汇编指令
intel x86汇编指令 来自http://tunps.com/assembly-instrunction 数据类型 ************************************************************************************************** 十进制        二进制        十六进制 0      
汇编指令与机器码
 一、状态寄存器 PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0         OF DFIF TF SF ZF   AF   PF   CF 条件码: ①OF(OverflowFlag)溢出
汇编指令查询器.rar
我们在写汇编程序的时候,有时候对指令的意义和操作数不是很熟悉,这个汇编指令查询器就解决了这个问题
双精度移位指令SHLD,SHRD
转:http://www.feiesoft.com/asm/05-2-053.html 双精度移位指令 此组指令有:双精度左移SHLD(Shift Left Double)和双精度右移SHRD(Shift Right Double)。它们都是具有三个操作数的指令,其指令的格式如下: SHLD/SHRD  Reg/Mem, Reg, CL/Imm ;80386+ 其中:第一操
AT&T汇编指令总结
记录一下,方便以后查看~ 1.寄存器引用     引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。      80386有如下寄存器:      8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;      8个16-bit寄存器 它们事实上是上面8个32-bit寄存器的低16
AT&T(GAS)汇编指令小集
GAS中每个操作都是有一个字符的后缀,表明操作数的大小。 C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char* l 4 float s 4 double l 8 long double t 10/12 注意:GAS使用后缀“l”同时表示4字节整数和8字节双精度
Intel Hex Opcodes and Mnemonics
Intel Hex Opcodes and Mnemonics;intel 汇编指令手册;chm版本
80X86寻址方式与常见汇编指令
1、指令      指令:操作码和操作数组成(不定有操作数);      操作码:执行操作,用一个唯一的助记符表示,对应着机器指令的一个二进制编码;      操作数:操作对象,可以是数值,寄存器或存储器地址;      助记符格式:      操作码  目的操作数,源操作数;注释      指令操作数:      r8:任一8位通用寄存器;      r16:任一16位通
嵌入式Linux ARM汇编(三)——ARM汇编指令
一、ARM汇编语言基本结构 AREA Init, CODE, READONLY  ENTRY  Start   LDR R0, =0x3FF5000   LDR R1, 0xFF   STR R1, [R0]   LDR R0, =0x3FF5008   LDR R1, 0x01   STR R1, [R0]   ... ... ... ... ... ...
Intel最新指令手册
intel指令手册,汇编指令,汇编深入,intel架构 深入学习汇编的必备手册,适合坐底成开发的朋友
PAUSE指令
PAUSE指令(翻译自Intel指令)  PAUSE指令提升了自旋等待循环(spin-wait loop)的性能。当执行一个循环等待时,Intel P4或Intel Xeon处理器会因为检测到一个可能的内存顺序违规(memory order violation)而在退出循环时使性能大幅下降。PAUSE指令给处理器提了个醒:这段代码序列是个循环等待。处理器利用这个提示可以避免在大多数
x64内联汇编调用API(需intel编译器,vc不支持x64内联汇编)
#include "stdafx.h" #include STARTUPINFOW StartInfo = {0}; PROCESS_INFORMATION pi = {0}; TCHAR szCommandLine[MAX_PATH] = TEXT("C:\\Windows\\NOTEPAD.EXE D:\\parallel_studio_xe_2013_update4_for_windo
AT&T风格与Intel风格的x86汇编语法区别
无论采用何种语法,都需要有支持该种语法的汇编器负责将汇编源代码“翻译”成x86机器指令,而Intel与AT&T风格的汇编语发差异,只存在于汇编源码层面
指令字长与操作数
     某计算机指令字长为16位,指令有双操作数、单操作数和无操作数3种格式,每个操作数字段均用6位二进制表示,该指令系统共有M条(M  固定码:指令占固定位数。   扩展码:根据操作数的情况采用几种不同位数的指令编码。                         既占用操作数位来增加指令位长实现指令的增多。  本题用扩展码编码方式,双操作数指令最多占(16-6*2)即4位,如不用扩展编
关于JAVA中单目运算符自增(++)自减(--)的分析
虽然在JAVA中有自增(++)自减(--)运算符的存在,但是在实际的开发中很少用到。但是最近准备面试的时候发现很多面试的题目中都有这方面的问题,所以觉得好好研究一下是很有必要的。 虽然我们都知道自增有前自增(++i)和后自增(i++)的情况,自减也是一样。而且我们都是到自增前自增是先加1在进行操作,后自增是先进行相应的操作在进行加1。同样自减的运算也差不多。 但是我们来看一道面试题 pack
Intel指令集中的SETcc指令
所谓Intel指令集中的SETcc指令(cc为condition code的缩写),不是指一条指令,而是指一系列形如SETcc的指令,如:SETNE、SETE、SETNA、SETA、SETNB、SETB等等。这些指令的用途,Intel的指令集参考中是这样描述的:SETcc—Set Byte on ConditionSets the destination operand to 0 or 1 dep
Intel汇编指令
汇编指令 GAS中每个操作都是有一个字符的后缀,表明操作数的大小。 C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char...
AT&T与Intel汇编语法的比较
GCC采用的是AT&T的汇编格式, 也叫GAS格式(Gnu ASembler GNU汇编器), 而微软采用Intel的汇编格式.  语法上主要有以下几个不同.  1、寄存器命名原则 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。 AT&T Intel 说明 %eax
AT&T格式汇编学习
Linux内核代码大量使用内嵌汇编,以进行某些特定功能的实现,或对某功能进行快速实现。使用的汇编格式为AT&T,本文就该种格式的汇编和Intel格式的汇编进行讲述。网络上也有众多文章涉及到这方面,所以本文更多是归纳总结。形成自己的学习笔记。
005-汇编加法指令ADD
一、加法指令 ADD(Addition) 格式 格式:ADD A,B   //A=A+B; 功能:两数相加   1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.   OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数B. 2. A和B均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问