鱼C论坛

 找回密码
 立即注册
查看: 2919|回复: 0

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

[复制链接]
发表于 2017-7-28 00:42:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 (重复的双字数据)



谢谢小甲鱼带来的视频教程,感谢!!


   
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记 小白刚学,不对的请各位大佬指教,谢谢

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 10:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表