第8章 数据处理的两个基本问题 其二

8.7  div指令

div是除法指令,使用div做除法的时候:

除数:8位或16位,在寄存器或内存单元中

被除数:(默认)放在ax或dx和ax中

结果:

运算   8位  16位

商    al    ax

余数    ah    dx

div指令格式:

div   reg

div   内存单元

div  byte   ptr   ds:[0]

含义为:al=ax/(ds*16+0)的商

    ah=ax/(ds*16+0)的余数

div  word  ptr  es:[0]

含义为:

ax=(dx*10000H+ax)/(ds*16+0)的商

dx=(dx*10000H+ax)/(ds*16+0)的余数

 

 利用除法指令计算100001/100.

我们首先分析一下,被除数100001大于65535,不能用ax寄存器存放,所以我们要用dx和ax两个寄存器联合存放100001,也就是说要进行16位的除法。

除数100小于255,可以在一个8位寄存器中存放,但是,因为被除数是32位的,除数应为16位,所以要用一个16位寄存器来存放除数100.

因为要分别为dx和ax赋100001的高16位值和低16位值,所以应先将100001表示为十六进制形式:186A1H

程序如下:

mov  dx,1

mov ax,86a1h;

mov bx,100

div bx

利用除法指令计算1001/100.

我们首先分析一下被除数1001可用ax寄存器存放,除数100可用8位寄存器存放,也就是说,要进行8位的除法。程序如下:

mov ax,1001

mov bl,100

div bl

程序执行后,al=0ah(商为10),ah=1(余数为1)

8.8伪指令dd

前面我们用db和dw定义字节型数据和字型数据。

dd是用来定义dword(double  word  双字)型数据的。

data  segment

db 1

dw 1

dd 1

data  ends

在data段中定义了三个数据:

第一个数据为01H,在data:0处,占1个字节;

第二个数据为0001h,在data:1处,占1个字

第三个数据为00000001h,在data:3处,占1个双字,两个字,4个字节。

mov  ax,data

mov ds,ax

mov ax,ds:[0]

mov dx,ds:[2]

div word ptr ds:[4]

mov ds:[6],ax

8.9  dup

dup是一个操作符,在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。

它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。

dup示例:

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个字节,他们是:

‘abcABCabcABCabcABC'

可见,dup的使用格式如下:

db   重复的次数  dup (重复的字节型数据)

dw   重复的次数  dup   (重复的字型数据)

dd    重复的次数  dup   (重复的双字数据)

原文地址:https://www.cnblogs.com/fate-/p/12926538.html