汇编学习--第十九天

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

 

posted @ 2019-07-29 00:02  Hk_Mayfly  阅读(240)  评论(1编辑  收藏  举报