以下为安装程序
assume cs:code
code segment
start: mov ax,0
mov es,ax
mov ax,cs
mov ds,ax
mov di,200h
mov si,offset int7ch
mov cx,offset int7chend-offset int7ch
cld
rep movsb ;//把中断例程写入内存
cli
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
sti ;//设置向量表
mov ax,4c00h
int 21h
int7ch: push cx
push dx
cmp bx,2879
ja return ;//判断逻辑扇区是否大于2879
cmp ah,1 ;//判断功能号是否大于1
ja return
je first
call diskM_1
mov ah,2
int 13h
return: pop dx
pop cx
iret
first: call diskM_1
mov ah,3
int 13h
jmp short return
diskM_1: push bx ;//此程序通过传逻辑扇区号求得磁道号、磁面号、扇区号并指定驱动器号.
push ax
mov ax,bx
mov cl,18
div cl
mov dh,al ;//计算逻辑扇区除以18,商为偶数磁面为0,奇数则为1
and dh,1 ;//二进制最后位即可判断奇偶。
mov cl,ah
inc cl ;//余数自加1为扇区号
mov ax,bx
mov bl,36
div bl
mov ch,al ;//逻辑扇区除以36的商即为磁道号.
mov dl,0 ;//设驱动器号为0.
pop ax
pop bx
ret
int7chend: nop
code ends
end start
- [anwu00] 写反了,最小为1001H,最大为2000H 05/10 11:04
- [crazyman] 博主确实好久不见了。 这里是一个开始,希望更多人都能从这里明确方向,开始自己的计算机之路。 08/16 14:55
- [游客] 你那个循环3FH错了 应该是循环40H 因为是添入0-63 就是添64次 08/02 17:27
- [游客] 我猜是因为2000:0000这段是给当成了一段栈寄存器使用了 所以一些数据会往里写入 写入的数据有的 07/29 23:00
- [游客] 2^N=寻址能力 N是总线宽度 算出的能力是B为单位 比如宽度13的CPU 2^13=8192 07/29 22:56
- [游客] 恩,有道理 04/08 12:25
- [atel] 那主程序我测试过的,可以显示的.但是加载到了软盘就不行了. 04/06 22:36
- [wdm] 没有错误啊。 我试了,运行ok的! 04/06 18:17
- [wdm] 说明程序还是有问题哟。 建议你一点一点的来做,先做一显示功能选项的界面吧。 然后在一点点的进行功 04/06 18:10
- [atel] 有什么错误? 04/04 21:33