目录 上一页 下一页 下一章

第6章 文字输出与键盘输入 -149-

一个32位的数据,其高16位由DX寄存器保存,低16位由AX寄存器保存。因此使用MUL指令之前应注意保存AH与DX寄存器中的有用数据;
  与乘法指令相对的是除法指令:
助记符:DIV(Divide)
用 途:将两个数相除
格 式:DIV 寄存器
    DIV 存储单元
执 行:两个数相除,得出商与余数。
  除法指令与乘法指令一样有一些特殊的规定:
  ① 被除数只能是16位或32位数据,除数只能是8位或16位数据,且16位的被除数只能由8位的数除,而32位的被除数只能由16位的数除。这好象有些不讲理,但是Intel就是这样规定的。
  ② 32位的被除数要预先放入DX:AX寄存器中,DX寄存器保存高16位;16位的被除数要预先放入AX寄存器中。32位数除以16数据所得的商由AX寄存器保存,余数由DX寄存器保存;16位数据除以8位数据所得的商由AL寄存器保存,余数由AH寄存器保存。
  ③ 与MUL指令一样,DIV指令同样认为相除的两个数都是无符号数,它也不能处理负数。
  ④ 除数不能是0。
  这第四项似乎是一句废话,其实不然。这一项将引出一个很重要的知识点,这个知识点将在后面的章节中加以介绍。
  下面给出了两个试验程序,用于研究乘除法指令的执行过程:
  试验<1>
  C:\ASM\>DEBUG[Enter]
  -a100[Enter]
  13C6:0100 mov al,3
  13C6:0102 mov ah,4
  13C6:0104 mul ah
  13C6:0106 mov bx,-1
  13C6:0109 mul bx
  13C6:010B [Enter]

-g=100 104[Enter] 注意被乘数、乘数均在AX寄存器中
AX=0403BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13C6ES=13C6SS=13C6CS=13C6IP=0104 NV UP EI PL NZ NA PO NC
13C6:0104F6E4MUL AH
  为了计算3x4的值,我们需首先将3放人AL寄存器中,将4放入另一8Bit寄存器中,然后用指令"MUL 寄存器"计算出结果。这个程序特意用AH寄存器保存乘数,主要是想说明运算结果将是一个出现在AX寄存器里的16位的数据。注意我们没给出"MUL 立即数"的用法,这样使用是错误的。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章