. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
主题 : :  课程设计2 完成,  主程序共大家参考  [待解决] 回复[ 5次 ]   点击[ 600次 ]  
donggs02
[帖 主] [ 发表时间:2011-09-11 17:36 ] 
荣誉值:0
信誉值:0
注册日期:2010-04-08 17:43
我用了两个星期的业余时间终于完成了,感谢大家的帮助,我发的是一个主程序共大家参考,子程序可以考入自己的,下一楼是我写的完整的程序。
                        我在实软盘测试通过





assume cs:code
code segment
ks:        jmp anzhuang
        s0 db "OK",0
        s1 db "ON",0
        a0 db "1) reset pc",0
        a1 db "2) start sysren",0
        a2 db "3) clock",0
        a3 db "3) aet clock",0
        as0 dw a0,a1,a2,a3
        as1 dw offset a00,offset a00,offset a00,offset a00  ;子程序的偏移地址
zhan:        dd 16 dup (0,0)     ;栈
anzhuang:mov ax,cs               ;计算从软盘载入内存的扇区多少
        mov ss,ax
        mov sp,offset anzhuang
        mov ds,ax
        mov bx,7c00H+200H
        mov ax,offset start-offset ks
        mov cx,200H
        mov dx,0
        div cx
        mov cx,ax
        jcxz anzhuang1
        mov ch,0
        mov cl,2
        mov dh,0
        mov dl,0
        mov ah,2
        int 13H
anzhuang1:        mov si,7c00H               ;把从软盘载入内存的程序安装到偏移地址1000H
        mov ax,20H
        mov es,ax
        mov di,0
        mov cx,offset start-offset ks
        cld
        rep movsb
        push ax
        mov ax,offset a00-offset ks  ;指向要运行的主程序
        push ax
        retf
a00:        call qingping
        mov ax,cs
        mov ss,ax
        mov sp,offset anzhuang
        mov ds,ax
        mov bx,0
        mov dh,12
        mov cx,4
a01:        push cx
        mov si,as0[bx]
        mov dl,35
        mov cl,4
        call show_str
        inc dh
        add bx,0
        pop cx
        loop a01
a02:        mov ah,0
        int 16H
        cmp al,"4"
        ja a02
        cmp al,"1"
        jb a02
        sub al,31H
        mov ah,0
        add ax,ax
        mov di,ax
        call as1[di]
        jmp a00

        db 800H dup (0,0)

show_str:push es                    ;显示子程序:在屏幕上显示以0结尾的数据
        push cx
        push si
        push dx
        push bx
        push ax
        mov ax,0b800H
        mov es,ax
        mov al,160
        dec dh
        mul dh
        mov bx,ax
        mov dh,0
        dec dl
        add dx,dx
        add ax,dx
        mov bx,ax
        mov dl,cl
s:        mov ch,0
        mov cl,[si]
        jcxz sj
        mov ch,dl
        mov es:[bx],cx
        add bx,2
        inc si
        jmp short s
sj:        pop ax
        pop bx
        pop dx
        pop si
        pop cx
        pop es
        ret

qingping:push es                       ;清屏程序
        push bx
        push cx
        mov bx,0b800H
        mov es,bx
        mov bx,0
        mov cx,7d0H
qp:        mov byte ptr es:[bx]," "
        add bx,2
        loop qp
        pop cx
        pop bx
        pop es
        ret
start:        mov ax,cs               ;写入软盘的程序
        mov ds,ax
        mov es,ax
        mov bx,0
        mov ax,offset start-offset ks
        mov cx,200H
        mov dx,0
        div cx
        inc ax
        mov ch,0
        mov cl,1
        mov dh,0
        mov dl,0
        mov ah,3
        int 13H
        cmp ah,0
        je ok
        mov si,offset s1
        mov dh,15
        mov dl,38
        mov cl,4
        call show_str
        jmp ok0
ok:        mov si,offset s0
        mov dh,15
        mov dl,38
        mov cl,2
        call show_str
ok0:        mov ah,4cH
        int 21H
code ends
end start
zhujinwu
[第5楼] [ 回复时间:2012-01-14 00:44 ] 
荣誉值:15
信誉值:0
注册日期:2011-11-03 09:29
我也在实软盘上测试了,通过。只是在设置时间上位置有点颠倒。佩服楼主。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved