. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  课程设计2 完成,  主程序共大家参考  [待解决] 回复[ 5次 ]   点击[ 598次 ]  
donggs02
[帖 主]   [ 发表时间:2011-09-11 17:36 ]   [引用]   [回复]   [ top ] 
荣誉值: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
donggs02
[第1楼]   [ 回复时间:2011-09-11 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值: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 chongqi,offset qidong,offset shijian,offset shulu
        c0 db "  /  /     :  :  ",0
        c1 db 9,8,7,4,2,0
        c2 dw 0
        c3 dw 0
        d0 db "  /  /     :  :  ",0
        d1 db 9,8,7,4,2,0
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
        mov ax,1000H
        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,2
        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 70 dup (0,0)


show_str:push es
        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

chongqi:mov ax,0ffffH
        push ax
        mov ax,0
        push ax
        retf

qidong:        mov ax,0
        mov es,ax
        mov bx,7c00H
        mov al,1
        mov ch,0
        mov cl,1
        mov dl,80H
        mov dh,0
        mov ah,2
        int 13H
        mov ax,0
        push ax
        mov ax,7c00H
        push ax
        retf

shijian:push ax
        push bx
        push cx
        push dx
        push ds
        push di
        push si
        call qingping
        mov bl,7
d00:        mov di,0
        mov si,0
        mov cx,6
d01:        push cx
        mov al,d1[di]
        out 70H,al
        in al,71H
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,00001111B
        add ax,3030H
        mov d0[si],ah
        mov d0[si+1],al
        inc di
        add si,3
        pop cx
        loop d01
        mov si,offset d0
        mov dh,15
        mov dl,35
        mov cl,bl
        call show_str
        in al,60H
        cmp al,3bH
        je d02
        cmp al,1
        je d04
        jmp d00
d02:        inc bl
        cmp bl,8
        jne d03
        mov bl,0
d03:        jmp d00
d04:        pop si
        pop di
        pop ds
        pop dx
        pop cx
        pop bx
        pop ax
        ret

shulu:        call qingping
        mov ax,cs
        mov ds,ax
        mov si,offset c0
        call c02
shulu1:        mov ah,0
        int 16H
        cmp al,"0"
        jb c00
        cmp al,"9"
        ja c00
        call c01
        call c02
        jmp shulu1
c00:        cmp ah,0eH
        je c03
        cmp ah,1cH
        jne c000
        call c04
c000:        cmp ah,1
        je cjs
        jmp shulu1
cjs:        mov ah,4cH
        int 21H
c01:        mov di,c2
        cmp c2,18
        je c010
        mov c0[di],al
        inc c2
        inc c3
        cmp c3,2
        jne c010
        inc c2
        mov c3,0
c010:        ret
c02:        mov dh,15
        mov dl,35
        mov cl,4
        call show_str
        ret
c03:        cmp c2,0
        je c032
        cmp c3,0
        je c030
        dec c2
        mov di,c2
        mov c0[di]," "
        dec c3
        mov dh,15
        mov dl,35
        mov cl,4
        call show_str
        jmp c032
c030:        sub c2,2
        mov di,c2
        mov c0[di]," "
        mov c3,1
        mov dh,15
        mov dl,35
        mov cl,4
        call show_str
c032:        jmp shulu1
c04:        cmp c2,18
        jne c042
        mov bx,0
        mov di,0
        mov cx,6
c040:        push cx
        mov al,c0[di]
        mov ah,c0[di+1]
        sub ax,3030H
        mov cl,4
        shl ah,cl
        add ah,al
        mov al,c1[bx]
        out 70H,al
        mov al,ah
        out 71H,al
        add di,3
        inc bx
        pop cx
        loop c040
c042:        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
chinatree
[第2楼]   [ 回复时间:2011-09-11 17:53 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
有图没有?发上来看看吧。
wang_ss
[第3楼]   [ 回复时间:2011-09-27 18:08 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23
请教楼主,如何将汇编代码写入软盘中的?
chinatree
[第4楼]   [ 回复时间:2011-09-27 18:54 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
这个书上第十7章有对Int 13h的详细介绍。
zhujinwu
[第5楼]   [ 回复时间:2012-01-14 00:44 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2011-11-03 09:29
我也在实软盘上测试了,通过。只是在设置时间上位置有点颠倒。佩服楼主。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved