IMUL 指令的用法

leechhui 2010-03-01 03:00:24
最近在读看雪的《加密与解密》一书,为了能看懂里面的汇编代码,我也读了一些汇编方面的书,只不过仅限于汇编指令的用法而已。
今天我反汇编了一个Crackme.exe测试程序,里面有如下的代码:
00401360 |> 33D2 |xor edx, edx
00401362 |. 33DB |xor ebx, ebx
00401364 |. 8A1429 |mov dl, byte ptr [ecx+ebp]
00401367 |. 8A98 30504000 |mov bl, byte ptr [eax+405030]
0040136D |. 0FAFD3 |imul edx, ebx
最后一行imul指令的作用我不太了解,所以就百度搜了一下,但没有找到理想的结果。我在手头的一本书上查了一下,书中说8086中imul指令只有一个操作数,而80x86中有两个乃至三个操作数的用法,但除此之外就没有任何信息了。
希望哪位汇编高手给我讲解一下IMUL指令的详细用法(一定要包括两个操作数的那个)。
...全文
1786 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechhui 2010-03-01
  • 打赏
  • 举报
回复
thank you!!!
zara 2010-03-01
  • 打赏
  • 举报
回复
一个操作数的,只是 8086 级的指令吧。 后来的 cpu,因实际程序设计中的需要,增加了很多的指令;最通俗的就是多媒体方面的指令了;对已有的指令,也多有扩充。
nanlingcg 2010-03-01
  • 打赏
  • 举报
回复 1
imul edx, ebx ;edx=edx*ebx
imul edx, ebx,8 ;edx=ebx*8
一,目的数为16或32寄存器
二,操作数长度相等
三,三操作数依次为目的,源,立即数
四,与单操作数不溢出不同,可能产生溢出

就这样简要述说了...
东方之珠 2010-03-01
  • 打赏
  • 举报
回复
网上看了一下有符号乘法IMUL指令,怎么都是一个操作数啊.
zara 2010-03-01
  • 打赏
  • 举报
回复
可能是你手头的版本不够吧。Masm6 附带的 qh 里对 imul 的解释里就已经有多参数的了。
通常是推荐看那个 intel 的指令集参考手册,网上搜索下,可下载的地方应该很多。

Description
Performs a signed multiplication of two operands. This instruction has three forms, depending on the number of operands.
* One-operand form. This form is identical to that used by the MUL instruction. Here, the source operand (in a general-purpose register or memory location) is multiplied by the value in the AL, AX, or EAX register (depending on the operand size) and the product is stored in the AX, DX:AX, or EDX:EAX registers, respectively.
* Two-operand form. With this form the destination operand (the first operand) is
multiplied by the source operand (second operand). The destination operand is a general-purpose register and the source operand is an immediate value, a general-purpose register, or a memory location. The product is then stored in the destination operand location.

* Three-operand form. This form requires a destination operand (the first operand) and two source operands (the second and the third operands). Here, the first source operand (which can be a general-purpose register or a memory location) is multiplied by the second source operand (an immediate value). The product is then stored in the destination operand (a general-purpose register).
When an immediate value is used as an operand, it is sign-extended to the length of the destination operand format.
zhangliufang 2010-03-01
  • 打赏
  • 举报
回复

imul reg,reg/mem
源操作数与目的操作数必须长度相同,且源操作数必须是通用寄存器,目的操作数可以是寄存器也可以是内存操作数。

若乘积结果目标寄存器不能容纳,则cf/of = 1
西安理工大学 微机原理课件 顾恒 各章知识要点、小结 第一章 微型计算机系统概述 本章知识要点: • 微型计算机的发展。 • 微型计算机的特点。 • 微型计算机系统的组成。 • 微型计算机的主要性能指标。 本章小结: 本章首先介绍了微型计算机的发展、组成。然后对计算机的结构进行了简单介绍,并介绍了微型计算机的3种不同的总线结构。最后,介绍了计算机的软、硬件的概念,区别和联系以及计算机的主要性能指标。 在学习完本章内容之后,需要掌握如下内容。 • 微型计算机的发展阶段和特点。 • 微型计算机属于第四代计算机,为冯•诺伊曼结构。 • 微型计算机系统由硬件和软件组成。硬件由输入设备、输出设备、运算器、存储器和控制器等5部分组成。 • 微型计算机中的软硬件概念、分类、联系以及区别。 • 微型计算机的主要性能指标有字长、存储器容量、运算速度、外部设备配置、系统软件配置、性价比等。 • 1KB=1024B 1MB=1024KB 1GB=1024MB 第二章 计算机中的信息表示 本章知识要点: • 进位计数制及其相互转换。 • 二进制数的运算规则。 • 计算机中带符号数与小数点的表示方法。 • 计算机中的常用码制。 本章小结: 本章着重介绍了计算机中数据的表示方法,重点讲述了二、八、十、十六进制数的相关概念及各类进制数之间相互转换的方法,无符号数和带符号数的机器内部表示以及字符编码和汉字编码等内容。 在学习完本章内容之后,需要掌握如下内容。 • 掌握计算机内部的信息处理方法和特点。 • 熟悉原码、反码、补码等各类数制之间的相互转换。 • 理解无符号数和带符号数的表示方法。 • 掌握各种BCD码的特点及其之间的相互转换。 • 了解循环码和余3码的表示方法。 • 掌握在计算机中如何运用字符的ASCII码表示非数字信息的。 • 了解汉字编码以及在计算机中对汉字的表示方法。 第三章 微处理器 本章知识要点: • CPU的发展过程。 • 80486的内部基本结构。 • 80486的外部基本引脚。 • CPU的内部寄存器。 • CPU的流水线操作过程。 • Pentium CPU的简介和CPU的发展趋势。 本章小结: 本章首先简单介绍了CPU的发展历史,然后以80486为例着重讲解了32位CPU的内部结构和外部引脚。同时介绍了CPU的3种工作方式。对80486的内部寄存器,本章进行了较为详细的讲述。接着介绍了CPU时序的概念和CPU采用的指令流水线技术。在本章的最后,介绍了Pentium CPU的发展和它所采用的新技术,并对CPU的未来发展趋势做了一个展望。 在学习完本章内容之后,需要掌握如下内容。 • CPU的发展阶段和特点。 • 80486内部的8个部件以及它们的功能。 • 80486外部的每个引脚的定义及它们可以实现的功能。 • CPU的3种工作方式和为什么要采用不同工作方式。 • CPU内部9组寄存器,每个寄存器的功能。 • 时序的定义,能够区分3种周期,即指令周期、总线周期和时钟周期。 • CPU的指令流水线操作和它的5个步骤。 • 对CPU的最新发展要有所了解。 第四章 指令系统 本章知识要点: • 80x86指令的基本格式。 • 80x86常见的寻址方式。 • 80x86的指令系统。 本章小结: 指令系统是表征一台计算机性能的重要因素,它决定了计算机的基本功能。指令系统的格式和功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件和机器的适用范围。因此,学习指令系统不仅是学习汇编语言的重要内容而且也是理解机器基本功能以及进行接口程序设计的重要基础。 本章全面系统地介绍了80x86指令系统的寻址方式、指令格式和各类指令的功能及应用。该指令系统的特点是:指令格式灵活,采用可变长度指令格式,指令长度可在1~6个字节之间变化;寻址能力强,对操作数的寻址有7种不同的寻址方式,这不仅为程序设计提供方便而且有利于提高程序运行效率;具有处理多种数据类型的能力,可以对8位/16位数,带符号数和不带符号数,压缩的和非压缩的BCD码十进制数进行处理;还提供了字符串操作指令;为支持构成多处理器系统,还专门提供了一组指令(WAIT、ESC)。 通过本章学习,要求重点掌握以下内容。 • 理解指令指令系统、寻址方式及有效地址EA、物理地址PA、逻辑地址、位移量等基本概念。 • 了解80x86指令的基本格式,包括指令的机器码表示和各种指令的汇编格式,并区分二者的异同。 • 熟悉80x86指令系统按功能分类及各类指令的持点和常用指令的基本使用方法。重点是数据传送指令、逻辑运算指令和条件转移指令用法。 • 熟悉那些与CPU引脚信号有关的指令及其使用方法,如IN、OUT、LOCK、WAIT、ESC指令。 • 熟悉各种寻址方式的含义及指令的汇编格式,了解常

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧