|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
欠2017.7.12与2017.7.13、2017.7.16与2017.7.17任务没完成
越努力,越幸运。欢迎大家来看我的笔记 小白刚学,不对的请各位大佬指正,谢谢
PS:被除数/除数=商
一、div 指令
(1)除数和被除数:被除数的位数要是除数的两倍(不然会有溢出的危险),除数:8位或16位,在寄存器或内存单元中
被除数:(默认)放在AX 或 DX和AX中
(2)商放在低位,余数放在高位
运算 8位 16位
商 AL AX
余数 AH DX
二、编程实例
(1)编程实现1:利用除法指令计算100001/100。
mov dx,1
mov ax,86A1H
mov bx,100
div bx
解:1.被除数 100001(十六进制:186A1H) 大于65535,被除数是32位的,除数应为16位,所以要用一个16位寄存器来存放除数100。
2.因为要分别为dx和ax赋100001的高16位值和低16位值
(2)编程实现2:利用除法指令计算1001/100。
mov ax,1001
mov bl,100
div bl
解:1.被除数1001(十六进制:3E9H)小于65535,被除数是16位的,除数应该为8位。
2.其它都是一目了然了。
三、伪指令 dd
(1)dd是用来定义dword (double word双字)型数据的。
(2)示例:data segment
db 1
dw 1
dd 1
data ends
在data段中定义了三个数据:
第一个数据为01H,在data:0处,占1个字节;
第二个数据为0001H,在data:1处,占1个字;
第三个数据为00000001H,在data:3处,占2个字节;
(3)问题8.1:用div 计算data段中第一个数据除以第二个数据后的结果,商存放在第3个数据的存储单元中。
data segment
dd 100001
dw 100
dw 0
data ends
分析: 1.dd为双字型数据,100001在上面我们也知道了要用32位定义,故用了dd
2.把代码段指向data数据段
3.dd中的数值要分别赋值低位、高位给ax,dx
程序如下:
mov ax,data
mov ds,ax
mov ax,ds:[0]
mov dx,ds:[2]
div word ptr ds:[4]
mov ds:[6],ax
四、dup
(1)dup是一个操作符,在汇编语言中同db、dw、dd 等一样,也是由编译器识别处理的符号。它是和db、dw、dd 等数据定义伪指令配合使用的,用来进行数据的重复。
(2)例子:
db 3 dup (0)
定义了3个字节,它们的值都是0,
相当于 db 0,0,0
db 3 dup (0,1,2)
定义了9个字节
相当于 db 0,1,2,0,1,2,0,1,2
db 3 dup (‘abc’,’ABC’)
定义了18个字节
相当于db ‘abcABCabcABCabcABC’
可见,dup的使用格式如下:
db 重复的次数 dup (重复的字节型数据)
dw 重复的次数 dup (重复的字型数据)
dd 重复的次数 dup (重复的双字数据)
谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记 小白刚学,不对的请各位大佬指教,谢谢 |
评分
-
查看全部评分
|