汇编语言笔记实验17编写包含多个子功能的中断例程
汇编语言笔记实验17编写包含多个子功能的中断例程
0x00 任务一
也就是有80个柱面,每个磁道18扇区,要我们对原有的中断二次封装,程序如下:
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
do7c: push ax
push bx
push cx
push dx
push di;s/(80*18) 商为面也就是磁头dh dl默认为1 前面的余数再/18商为磁道ch 余数+1为扇区cl 默认al 为1只读写1个扇区
mov si,bx
mov cx,ax
mov ax,dx
mov dx,0
mov bx,1440
div bx
mov bx,dx;bx存余数
mov dh,al商即是dh磁头
mov dl,1
mov ax,bx
mov bl,18
div bl
mov ch,al
mov cl,ah
inc cl;cl要加1因为扇区从1-18 而不是0-17
mov al,1
mov bx,si;全部参数传递好;就差ah
cmp ch,1
ja fin
add ch,2
mov ah,ch
int 13h
fin: pop di
pop dx
pop cx
pop bx
pop ax
iret
do7ce: nop
start: mov ax,cs
mov ds,ax
mov si,offset do7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do7ce-offset do7c
cld;正向复制
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0;中断安装完成
mov ah,0;读
mov dx,0;0 磁头 0 磁道 1扇区
mov ax,1000h
mov es,ax
mov bx,0
int 7ch
mov ax,4c00h
int 21h
code ends
end start
上述代码运行正确,读取了a软盘的主引导记录(mbr),从内存1000:1FEH是0xaa55可以看出