汇编语言乘指令 MUL、IMUL的具体使用
MUL: 无符号乘
==================================================
;影响 OF、CF 标志位
;指令格式:
;MUL r/m ;参数是乘数
;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX
;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX
;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX
当乘积的高半部分(AH、DX、EDX、RDX)中存有结果的有效数字,则CF=OF=1,否则CF=OF=0。
=======================================================
IMUL: 有符号乘
=======================================================
;影响 OF、CF 标志位
;第一种指令格式:
;IMUL r/m ;单操作数
;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX
;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX
;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX
;以上这些都是和 MUL 一样的, 只是运算结果有时一样、有时不一样.
;IMUL 还有另外两种指令格式:
;IMUL r16/r32, r16/r32/m16/m32/i ;双操作数, (1)*(2) -> (1)
;IMUL r16/r32, r16/r32/m16/m32, i ;三操作数, (2)*(3) -> (1)
;其中常数 i 的位数可以 <= 但不能 > 其他操作数
=======================================================
简单应用
=================================================
imul edx, ebx ;edx=edx*ebx
imul edx, ebx,8 ;edx=ebx*8
一,目的数为16或32寄存器
二,操作数长度相等
三,三操作数依次为目的,源,立即数
四,与单操作数不溢出不同,可能产生溢出
就这样简要述说了...
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
汇编语言常见错误信息中文注解
本文的目标是收集大部分汇编中常见错误信息及对其的中文注解,方便大家在写汇编程序时能够快速地定位错误并解决问题. ml.exe错误信息: 复制代码 代码如下: FATAL 严重错误 cannot open file不能打开文件 I/O error closing fileI/O错误 正在关闭文件 I/O error writing fileI/O错误 正在写文件 I/O error reading file I/O错误 正在读取文件 out of memory
-
从汇编看c++中默认构造函数的使用分析
c++中的源程序: 复制代码 代码如下: class X {private: int i;}; int main() { X x;} 上面的类X没有定义构造函数,仅仅有一个int i. 下面为其汇编程序: 复制代码 代码如下: ; 7 : int main() { push ebp;ebp为一个寄存器,总是指向一个函数调用堆栈的栈底,作为基址,用偏移量来访问该调用栈上的变量,但这里没有任何变量要访问,因此不起作用 mov ebp, esp;这两句的作用是为了
-
从汇编看c++的默认析构函数的使用详解
c++中,如果没有为一个类提供析构函数,那么编译器会为这个类提供默认的析构的函数.由于析构函数的功能和构造函数相反,因此和默认的构造函数类似,编译器也会提供无用的默认的析构函数,和非无用的析构函数.两者的分析情况一样(对于默认的构造函数分析,请参看<从汇编看c++中默认构造函数的使用分析>).并且编译器会提供非无用的默认析构函数情形和默认构造函数类似: 1 类含有虚成员函数(类继承自虚基类或者继承的基类含有虚成员函数,也属于这种情况) 2 类继承自一个基类,基类含有自定义析构函数(如果基类没有
-
汇编语言 口算异或xor小结
复制代码 代码如下: 123 145 167 189 1AB 1CD 1EF 246 257 28A 29B 2CE 2DF 347 356 38B 39A 3CF 3DE 48C 49D 4AE 4BF 58D 59C 5AF 5BE 68E 69F 6AC 6BD 78F 79E 7AD 7BC
-
汇编优化提示
你需记住的最重要的事情就是代码花费的时间!不同的方法可以加速你的代码或者不能,所以你要多多尝试.因而计算代码花费的时间来看看你尝试的每个方法是否可以提速是件很重要的事情. :=========================初级========================= <1>释放所有8-CPU寄存器,以使它们用于你自己的代码中 复制代码 代码如下: push ebx push esi push edi push ebp :必须在改变ESP之前完成 :装载ESI.EDI和其他传递栈中值
-
汇编语言无效指令错误概述
问题:cmpxchg8b 指令比较一个8字节值edx和EAX带有8字节值内存( 目的地操作数). 只有有效目标操作数用于此指令是内存 操作数. 如果目标操作数是一个寄存器处理器应产生一个 无效OpCode例外,执行的指令cmpxchg8b应当停止和 处理器应该执行无效OpCode异常处理程序. 此错误发生是 锁定前缀为使用cmpxchg8b指令与一个(无效)寄存器目的地 操作数. 在这种情况下,处理器可能无法启动执行无效OpCode 异常处理程序,因为总线已锁定. 这将导致系统挂起. 提示:如果
-
汇编语言超浓缩教程
所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样).某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了.为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ--).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP.WINRAR-依次压迫,嘿嘿!
-
汇编语言rep movsd 的使用详解
mov esi,offset @s1mov edi,offset @s2 mov ecx,10cld rep movsd 1.rep movsd 每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动ds:[si] 到es:[di],在32位汇编下可以用esi代替si,edi代替di 2.同时由于在一般exe中ds = es 程序起始位置所以另esi = offset @s1就可以找到变量s1 ,edi= offset @s2就可以找到变量s2 3.movsd此类指令有个性质
-
汇编语言乘指令 MUL、IMUL的具体使用
MUL: 无符号乘 ================================================== ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数 ;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX 做乘数, 结果放在 EAX ;如果参数是 r32/m32, 将把 EAX 做乘数, 结果放在 EDX:EAX 当乘积的高半部分(AH.DX.EDX.RDX)中存有结果的有效数字,则CF=
-
详解汇编语言各种指令的解释与用法
[数据传输指令] 一.通用数据传送指令 1.传送指令MOV(move) 指令的汇编格式:MOV DST,SRC 指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址.指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令.指令的执行对标志位的影响:不影响标志位.指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器:目的操作数DST不能是CS,也不能用立即数方式. 2.进栈指令 PUSH(push onto the sta
-
汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)
汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. XOR 指令在两个操作数的对应位之间进行(按位)逻辑异或(XOR)操作,并将结果存放在目标操作数中: XOR dest
-
汇编语言lea指令使用方法解析
这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令. 表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加
-
汇编语言mov指令及基本用法
在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的).其特点是不破坏源地址单元的内容. 例如: MOV AX,2000H:将16位数据2000H传送到AX寄存器 MOV AL,20H:将8位数据20H传送到AL寄存器 MOV AX,BX:将BX寄存器的16位数据传送到AX寄存器 MOV AL,[2000H]:将2000H单元的内容传送到AL寄存器 需要注意的是: (1)两个存储单元之间不能直接传送数据,即:MOV
-
详解汇编语言MOV指令
在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的). 32位指令集 1.一般传送指令 MOV指令: 格式: MOV目的-->除CS.IP以外的寄存器或存储器 源-->寄存器.存储器.立即数 ex : MOV ECX ,EDX ; EDX->ECX ECX =00000034H EDX =00000052H 指令执行结果: ECX = 00000052H, EDX不变,标志寄存器也不变. MOVSX
-
汇编语言MIPS指令分类及寻址模式原理概念
目录 一.相关概念 二.MIPS操作数之32个寄存器 三.MIPS汇编语言指令类型及寻址方式 1. R型指令 2. I型指令 3. J型指令 四.MIPS类型及寻址方式分析 1. MIPS字段命名 2. 指令类型 3. MIPS寻址方式 一.相关概念 指令集:一个给定的计算机体系结构所包含的指令集合. 存储程序概念:多种类型的指令和数据均以数字形式存储于存储器的概念,存储程序型计算机即缘于此. 二.MIPS操作数之32个寄存器 寄存器名字 寄存器编号 寄存器功能 $zero $0 恒等于零 $a
-
汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作
AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中: AND destination,source 下列是被允许的操作数组合,但是立即操作数不能超过 32 位: AND reg, reg AND reg, mem AND reg, imm AND mem, reg AND mem, imm 操作数可以是 8 位.16 位.32 位和 64 位,但是两个操作数必须是同样大小.两个操作数的每一对对应位都遵循如下操作原则:如果两个位都是 1,则结果位等于
-
什么是汇编语言
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. 许多汇编程序为程序开发.汇编控制.辅助调试提供了额外的支持机制.有
-
16位汇编语言寄存器及指令整理(小结)
寄存器 通用寄存器 8位寄存器 16位寄存器 32位寄存器 寄存器名称 AH,AL AX EAX 累加寄存器 BH,BL BX EBX 基地址寄存器 CH,CL CX ECX 计数器寄存器 DH,DL DX EDX 数据寄存器 SI ESI 源变址寄存器 DI EDI 源目标寄存器 DH,DL DX EDX 基地址寄存器 DH,DL DX EDX 栈顶寄存器 段寄存器 标号 名称 CS 代码段 DS 数据段 SS 栈段 ES 附加数据段 GS,FS 附加数据段(+80386) 专用寄存器 标号
随机推荐
- 深入理解AngularJS中的ng-bind-html指令
- AngularJS实现进度条功能示例
- SqlServer 在事务中获得自增ID的实例代码
- 彻底删除SQL Server注册表的方法
- JS获取IUSR_机器名和IWAM_机器名帐号的密码
- 如何隐藏程序的运行
- 注册表导出管理员密码文件
- asp.net 上传下载输出二进制流实现代码
- PHP中date与gmdate的区别及默认时区设置
- C 语言基础教程(我的C之旅开始了)[三]
- Android应用读取Excel文件的方法
- Python使用tablib生成excel文件的简单实现方法
- JavaScript常用小技巧小结
- 防止ajax重复请求的方法(GET和POST)
- JSP分页显示的实例代码
- jQuery学习笔记之创建DOM元素
- 使用JavaScript开发跨平台的桌面应用详解
- PHP文件读写操作之文件读取方法详解
- PHP5.5和之前的版本empty函数的不同之处
- php实现通过soap调用.Net的WebService asmx文件