div指令、dd、dup、mul指令

div是除法指令

  1. 除数:有8位和16位两种,在一个寄存器内存单元中。
  2. 被除数:默认放在AXDX和AX中, 如果除数为8位,被除数则为16位,默认在AX中存放; 如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
  3. 结果: 如果除数为8位,则AL存储除法操作的商AH存储除法操作的余数; 如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
;利用除法指令计算100001/100。
;100001D = 186A1H
mov dx, 1
mov ax, 86A1H ;(dx)*10000H+(ax)=100001
mov bx, 100
div bx

;利用除法指令计算1001/100
mov ax, 1001
mov bl, 100
div b1

伪指令dd

db和dw定义字节型数据和字型数据。

dd是用来定义dword(double word,双字)型数据的伪指令

操作符dup

dup在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。 它和db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复

1
2
3
db 3 dup (0)       ;定义了3个字节,它们的值都是0,相当于db 0,0,0。
db 3 dup (0, 1, 2) ;定义了9个字节,它们是0、1、2、0、1、2、0、1、2,相当于db 0,1,2,0,1,2,0,1,2。
db 3 dup ('abc', 'ABC') ;定义了18个字节,它们是abcABCabcABCabcABCC,相当于db 'abc', 'ABC' ,'abc' , 'ABC, 'abc', 'ABC'。

mul 指令

mul是乘法指令,使用 mul 做乘法的时候:相乘的两个数:要么都是8位,要么都是16位。

  • 8 位: AL中和 8位寄存器内存字节单元中;
  • 16 位: AX中和 16 位寄存器内存字单元中。

结果

  • 8位:AX中;
  • 16位:DX(高位)和 AX(低位)中。

格式:mul 寄存器mul 内存单元

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
;计算100*10
;100和10小于255,可以做8位乘法
mov al,100
mov bl,10
mul bl

;结果: (ax)=1000(03E8H) 

12345678
;计算100*10000
;100小于255,可10000大于255,所以必须做16位乘法,程序如下:
mov ax,100
mov bx,10000
mul bx

;结果: (ax)=4240H,(dx)=000FH     (F4240H=1000000)