汇编学习--第十九天
17.4 应用int 13h中断例程对磁盘进行读写
3.5英寸软盘:2面,80磁道/面,18扇区/磁道,512字节/扇区,大小:1440KB≈1.44MB
面号,磁道号从0开始,扇区号从1开始。
将当前屏幕的内容保存在磁盘上
assume cs:code code segment start: mov ax,0b800h mov es,ax mov bx,0 mov al,8;写入的扇区数 mov ch,0;磁道号 mov cl,1;扇区号 mov dl,0;驱动器号 mov dh,0;磁头号(面) mov ah,3;2是读,3是写 int 13 mov ax,4c00h int 21h code ends end start
试验17 编写包含多个功能子程序的中断例程
测试程序
assume cs:code code segment start: mov ah,0 mov dx,36 mov bx,0b800h mov es,bx mov bx,160*12+40*2 int 7ch mov ax,4c00h int 21h code ends end start
中断例程
assume cs:code code segment start: mov ax,0 mov es,ax mov di,200h mov ax,cs mov ds,ax mov si,offset func mov cx,offset funcend-offset func cld rep movsb mov bx,0 mov es,bx mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 mov ax,4c00h int 21h org 200h func: jmp short main table dw func0,func1 main: ;cmp ah,0 ;je func0 ;cmp ah,1 ;je func1 mov al,ah mov ah,0 mov si,ax add si,si call word ptr table[si] mov ax,4c00h int 21h func0: push bx ;扇区号 mov ax,dx mov bl,18 div bl inc ah mov cl,ah ;磁道号 mov ah,0 mov bl,80 div bl mov ch,ah ;面号 mov dh,al ;驱动器号 mov dl,0 ;读取 mov ah,2 ;读取的扇区数 mov al,1 pop bx int 13 ret func1: push bx ;扇区号 mov ax,dx mov bl,18 div bl inc ah mov cl,ah ;磁道号 mov ah,0 mov bl,80 div bl mov ch,ah ;面号 mov dh,al ;驱动器号 mov dl,0 ;写入 mov ah,3 ;写入的扇区数 mov al,1 pop bx int 13h ret funcend:nop code ends end start