汇编语言笔记实验17编写包含多个子功能的中断例程

汇编语言笔记实验17编写包含多个子功能的中断例程

0x00 任务一

QQ截图20200611182437

QQ截图20200611182448

QQ截图20200611182454

​ 也就是有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

QQ截图20200611193343

上述代码运行正确,读取了a软盘的主引导记录(mbr),从内存1000:1FEH是0xaa55可以看出