美文网首页
3.2 80×86汇编乘法和除法指令以及位数扩展

3.2 80×86汇编乘法和除法指令以及位数扩展

作者: 迎风布阵x | 来源:发表于2018-11-12 11:38 被阅读0次

乘法指令

  • mul 源操作数
    源操作数可以是字节,字或双字,而且可以在存储器或寄存器中不能是立即数
    乘积结果以两倍操作数的空间存放

源操作数
字节 ax = al × 源操作数
字 dx:ax = ax × 源操作数
双字 edx = eax × 源操作数

注意:
如果乘积结果高位部分不为零,那么进位标志位CF和溢出标志位OF将置为1

  • imul 源操作数
    可以理解为带符号的mul指令。和mul指令类似,不过是有符号数的乘法指令
    用法与mul指令相同

  • imul 寄存器,源操作数
    源操作数可以在寄存器中,存储器中,或者是立即数
    另一个乘数在寄存器中,它也作为目的地址

  • imul 寄存器,源操作数,立即数
    第一个操作数-寄存器仅用来存放乘积。
    第二个操作数可能在寄存器中或者在存储器中。
    第三个操作数为立即数。
    第一个操作数和第二个操作数长度相同,都是16位或都是32位。如果乘积和目的寄存器长度一致,那么CF和OF清零,否则置1.


除法指令

  • div 源操作数
    无符号数除法指令
  • idiv 源操作数
    有符号数除法指令
    源操作数就是除数,除数可以存放在寄存器或存储器中,但不能是立即数。idiv和div使用隐式的被除数(该操作数被除)。

单操作数除法指令
被除数长度默认是源操作数长度的两倍。例如,若源操作数是一个字长,则双字长度的被除数高16位存放在DX寄存器中,低16位存放在AX寄存器中

源操作数(除数) 第二个操作数(被除数) 余数
字节 AX AL AH
DX:AX AX DX
双字 EDX:EAX EAX EDX


除法指令的两种常见错误

  1. 除数为零
  2. 商太大而不能存入单倍长的目的地址中(这时就要用到位数扩展)


位数扩展(cdw,cwd,cdq用于有符号的除法指令)

  • 正的被除数高位必须用0扩展,负的被除数高位必须用1扩展
指令 含义
cbw(字节转换为字) 将AL寄存器中的二进制补码数扩展位AX中的字长
cwd(字转换为双字) 将AX寄存器中的二进制补码数扩展为DX和AX中的双字
cdq(将双字转换为四字) EAX -> EDX:EAX
cwde(字 to 双字) AX -> EAX(不和除法指令配套使用)
movzx 寄存器,源操作数 用0来扩展源操作数
movsx 寄存器,源操作数 复制符号位来扩展源操作数

说明:

  1. movzx和movsx指令源操作数可以存放在寄存器或存储器,源操作数可以是8位,16位,目的地址寄存器可以是16位或32位

相关文章

  • 3.2 80×86汇编乘法和除法指令以及位数扩展

    乘法指令 mul 源操作数源操作数可以是字节,字或双字,而且可以在存储器或寄存器中不能是立即数乘积结果以两倍操作...

  • 关于Java的跨平台性,字节码和汇编码

    我们知道,C和C++是将源代码编译成平台相关的汇编指令(比如x86架构汇编指令,arm架构汇编指令),这就导致了已...

  • 汇编指令

    X86和X87汇编指令大全(有注释) ---------- 一、数据传输指令 ------------------...

  • movsx

    movsx 汇编语言数据传送指令MOV的变体。带符号扩展,并传送。 例如: MOV BL,80HMOVSX AX,...

  • 2018-09-17js变量

    1.代码的执行过程 (1)指令:指令级集,分为精简指令集和复杂指令集。 注:计算机是没有减法运算,也没有除法和乘法...

  • 寻址相关

    相关链接:X86-64 架构指令解析 汇编中的指令详解 Intel AMD x64软件约定 x86/x64 指令编码内幕

  • 编译与链接—探究目标文件文件

    前言 大学时期有一门课程叫 《微机原理》, 主要讲述 80x86 intel CPU以及 x86汇编, 其中就提到...

  • AT&T汇编-函数实例

    AT&T 基于x86架构处理器汇编指令一般有2种格式:Intel汇编和AT&T汇编,通过对8086汇编的学习包括对...

  • 汇编基础知识六

    0x01 简介 这里开始熟悉汇编的指令格式 下图为X86版本的指令格式,X64的指令格式和X86差不多后面有需要的...

  • nasm

    nasm简介 NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编...

网友评论

      本文标题:3.2 80×86汇编乘法和除法指令以及位数扩展

      本文链接:https://www.haomeiwen.com/subject/tqgxfqtx.html