第十七章
检测点17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
正确,当键盘缓冲区为空时,如果设置IF=0,int 9中断无法执行,循环等待会死锁。
以下也实验17的源码。
以经过验证。
验证方法为。
在虚拟机环境,配有虚拟软驱。
1.安装中断例程
2.运行写软盘程序,将屏幕数据写到软盘
3.清屏
4.运行读软盘程序,将软盘数据读到屏幕。
assume cs:CG
;名称:int 7ch读写磁盘中断
;
;入口参数:ah=功能号(0:读,1:写)
; al=驱动器号
; dx=寄存器传递要读写的扇区的逻辑扇区号
; 用es:bx指向磁盘缓冲
;
;物理扇区号与逻辑扇区号关系公式
;逻辑扇区号=(面号*80+磁道号)*18+扇区号-1
;面号 =int(逻辑扇区号/1440)
;磁道号 =int(rem(逻辑扇区号/1440)/18)
;物理扇区号=rem(rem(逻辑扇区号/1440)/18)+1
;
;出口参数:
;CF=0——操作成功,AH=00H,AL=传输的扇区数
;否则,AH=状态代码
;
CG segment
distr:jmp short disk
table dw disk1,0
;用来定位读/写子程序,和保存临时数据
disk :push si
push cx
cmp ah,1
ja siret
cmp dx,2879
ja siret
;检测错误
mov si,2
mov word ptr table[si],ax
;保存假功能号和驱动器号,备用
xor si,si
call word ptr table[si]
siret:pop cx
pop si
iret
;以下为读/写磁盘子程序
disk1:mov ax,dx
xor dx,dx
mov cx,1440
div cx
push ax
;求磁头号,并存入栈
;**********************
mov ax,dx
mov dl,18
div dl
mov ch,al
mov cl,1
;求磁道号,同时置扇区起始
;**********************
mov al,ah
add al,1
mov si,3
cmp byte ptr table[si],1
je num
;检测是读or写
mov ah,2
;求要操作的扇区数,同时置功能号
;**********************
nums :pop dx
mov dh,dl
add si,1
mov dl,cs:[si]
;将磁头号出栈,并设置驱动器
;**********************
int 13h
ret
;**********************
;以下为写磁盘的功能号设置
num :mov ah,3
jmp short nums
;**********************
disend:nop
;**********************
;以下为安装程序
start:push cs
pop ds
xor si,si
mov es,si
mov di,200h
mov cx,offset disend - offset distr
cld
rep movsb
cli
mov word ptr es:[7ch*4],0
mov word ptr es:[7ch*4+2],20h
sti
mov ax,4c00h
int 21h
CG ends
end start
此程序增加了对驱动器的选择。可以为磁盘,也可以为软盘。
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56