|
主题 : : 课程设计2 完成, 主程序共大家参考 [待解决] |
回复[ 5次 ]
点击[ 600次 ] | |
荣誉值: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 | | |