汇编语言[王爽]-08 数据处理相关操作[div mul dd dup]
数据处理的两个基本问题
- 处理的数据在哪里
- cpu内部:寄存器,指令缓冲器(立即数)
- 内存
- 端口
- 处理的数据有多长
- 通过寄存器指明
- 通过标注指明:
inc byte ptr [bx]
inc word ptr [bx]
- 有些指令默认指明:
push [1000H]
只进行 字操作
div指令
运算数 | 位数 | 位置 |
---|---|---|
除数 | 8/16 | reg或mem |
被除数 | 16/32【除数的两倍】 | AX/DX:AX |
商和余数 | 8/16 【和除数一样】 | AL:AH/AX:DX |
由于被除数、商和余数都是隐含寻址,所以在使用的时候只需要制定除数的位置和大小就可以了
div reg
div mem ;需要指明大小
例子
;计算100001/100
;100001 = 186A1H
mov dx.1
mov ax,86A1h
mov bx,100 ;32bit/16bit
div bx
;计算1001/100
mov ax,1001
mov bl,100 ;16bit/8bit
div bl
mul指令
被乘数 | 乘数 | 积 |
---|---|---|
al | reg/mem | ax |
ax | reg/mem | dx:ax |
由于被乘数、乘数和积都是隐含寻址,所以在使用的时候只需要制定乘数的位置和大小就可以了
mul reg
mul mem ;需指明大小
例子
;计算100*10
;100和10小于255,用8位乘法
mov al,100
mov bl,10
mul bl
;结果 (ax) = 1000(03E8h)
;计算100*10000
;1000大于255,必须用16位乘法
mov ax,100
mov bx,10000
mul bx
;结果 (ax) = 4240h , (dx) = 000Fh , (F4340h = 1000000)
伪指令dd
dd
:定义Byt数据,8bitdw
:定义Word数据,16bitdd
: 定义Double Word, 32bit
例子:
mov ax,data
mov ds,ax
mov dx,data:[2]
mov ax,data:[0]
div word ptr data:[4]
mov data:[6],ax
小端存储,高位在高地址
dup
用来数据重复
db 3 dup (0) ; 等价于 db 0,0,0
db 3 dup(0,1,2) ; 等价于 db 0,1,2,0,1,2,0,1,2
; dw 和 dd 同理