|
主题 : : 课程设计2 完成, 主程序共大家参考 [待解决] |
回复[ 5次 ]
点击[ 598次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-09-11 17:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
|
|
|
|
|
[第3楼]
[ 回复时间:2011-09-27 18:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23 |
|
|
|
|
|
[第4楼]
[ 回复时间:2011-09-27 18:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
|
|
|
|
|
[第5楼]
[ 回复时间:2012-01-14 00:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:15
信誉值:0
注册日期:2011-11-03 09:29 |
我也在实软盘上测试了,通过。只是在设置时间上位置有点颠倒。佩服楼主。 | | |
|