shuiyu 发表于 2017-7-28 00:42:18

《零基础入门学习汇编语言》第四十一讲

欠2017.7.12与2017.7.13、2017.7.16与2017.7.17任务没完成

越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

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:
mov dx,ds:
div word ptr ds:
mov ds:,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 (重复的双字数据)



谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


   
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第四十一讲