辛苦4天,终于把课程设计完成,和大家分享一下自己的代码
本帖最后由 老头子学汇编 于 2011-10-23 15:10 编辑运行环境1:XP(vmware虚拟机),3.5 软盘, DOS系统没有安装,不知道有没有问题
2:虚拟机软盘驱动器,连接,随便生成1.fld或1.img格式的文件就可以了
(这是把3.5软盘连接的,如果没有连接3.5软盘,那就没有效果的)
3:在虚拟机编译后,直接运行就可以了,不过360报木马,点允许
4:重启后就可以看到
代码如下:
;键盘输入1,2,3,4
;1) reset pc ;重新启动计算机
;2) start systme; 引导现有的操作系统
;3) clock ; 进入动时钟程序,F1键修改颜色,退出ESC键
;4) set clock ; 设置时间,退出ESC键,设置时间Enter(回车键)
assume cs:code
code segment
;===========读取软盘到0:7c00h位置==
ReadFloppy:mov ax,0
mov es,ax
mov bx,8000h
mov al,4
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,2
int 13h
mov ax,0
mov es,ax
mov bx,7c00h
mov al,3
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,2
int 13h
mov ax,0
push ax
mov ax,7e00h
push ax
retf
db 1c9h dup (0)
dw 0aa55h
;==================================
Experiment17:jmp short Experiment
;===========数据====================
Menu db "1) reset pc",0
db "2) start system",0
db "3) clock ",0
db "4) set clock",0
db "Input format:"
db "yy/mm/dd hh:mm:ss",0
db "Input errors Tip: "
db "99/12/31 23:59:59",0
;==================================
;===========显示菜单====================
Experiment:mov ax,cs
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,160*12+33*2
mov bx,0
mov cx,4
Exp: mov al,ds:
cmp al,0
je short Expe
mov es:,al
inc si
add bx,2
jmp short Exp
Expe: add si,1
mov bx,0
add di,160
loop Exp
jmp short Keyboard
;=====================================
;===========键盘输入==============
Keyboard:mov ah,0
int 16h
cmp al,"1"
je short resetpc
cmp al,"2"
je shortstartsystem
cmp al,"3"
je short Clearthescreen
cmp al,"4"
je short Clearthescreen
jmp short Keyboard
;================================
;============系统重启=============
resetpc:mov ax,0ffffh
push ax
mov ax,0
push ax
retf
;==================================
;=============引导现在的操作系统=====
startsystem: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
;==========================================
;============清除屏幕========
Clearthescreen:push ax
push bx
push es
push cx
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,2000
Screen: mov byte ptr es:," "
and byte ptr es:,00000111b
or byte ptr es:,00000111b
add bx,2
loop short Screen
popcx
popes
popbx
pop ax
cmp al,"3"
je short clock
cmp al,"4"
je short kaset
callExperiment
kaset: call setclock
;===========动态时钟@修改颜色=========
clock:push bx
push es
mov ax,0b800h
mov es,ax
mov bx,0
mov si,160*12+30*2
mov bh,0
mov ah,0
mov bl,10
dec bl
xxxx: mov al,bl
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
cmp bl,9
je short Years
cmp bl,8
je short Month
cmp bl,7
je short Day
cmp bl,4
je short Time
cmp bl,2
je short Point
cmp bl,0
je short Second
Modify:in al,60h
cmp al,01
je short Clearthescreen
cmp al,3bh
je short Color
pop es
pop bx
jmp short clock
ssss:jmp short xxxx
aaaa:jmp short Modify
Years:mov es:,ah ; 年份
mov es:,al
mov byte ptr es:,"/"
dec bl
jmp short ssss
Month:mov es:,ah ;月份
mov es:,al
mov byte ptr es:,"/"
dec bl
jmp short ssss
Day: mov es:,ah ;天数
mov es:,al
mov byte ptr es:," "
dec bl
sub bl,2
jmp short ssss
Time: mov es:,ah ;小时
mov es:,al
mov byte ptr es:,":"
sub bl,2
jmp short ssss
Point:mov es:,ah ;分钟
mov es:,al
mov byte ptr es:,":"
sub bl,2
jmp short ssss
Second:mov es:,ah ;秒
mov es:,al
mov byte ptr es:," "
sub bl,2
jmp short ssss
Color:push bx
mov bx,160*12+30*2
mov cx,17
Colos:inc byte ptr es:
add bx,2
loop short Colos
pop bx
jmp short aaaa
;================================
;================修改时间============
setclock: mov ax,cs
mov ds,ax
mov si,7e3eh
mov ax,0b800h
mov es,ax
mov di,160*12+25*2
mov ch,0
set: mov cl,ds:
cmp cl,0
je short Cursor
mov es:,cl
inc si
add di,2
jmp short set
Cursor:mov ah,2 ;
mov bh,0
mov dh,13
mov dl,38
input:int 10h
in al,60h ;
cmp al,01
je short Quit
cmp al,01ch
je short timeEnter
jjjj: push dx
cmp al,39h
je short zzzz
pop dx
push dx
cmp al,0eh
je short Clear
pop dx
wwww: mov ah,0
int 16h
cmp al,3ah
ja short LLLL
cmp al,1fh
jnb short show
LLLL: jmp short input
Quit:mov ah,2
mov bh,0
mov dx,0
int 10h
mov al,0
call Clearthescreen;清屏
zzzz:pop dx
mov al," "
jmp short wwww
;------------显示字符------------
show:push bx
push dx
mov ah,9
mov bl,7
mov bh,0
mov cx,1
int 10h
mov ah,2
pop dx
pop bx
inc dl
cmp dl,56
je short Overflow
jmp short input
Overflow:mov ah,9
mov al," "
mov bl,7
mov bh,0
mov cx,1
int 10h
jmp short Cursor
;---------清楚字符--------------
Clear:pop dx
mov ah,2
mov al,0
dec dl
cmp dl,37
je short Cursor
int 10h
mov ah,9
mov al," "
mov bl,7
mov bh,0
mov cx,1
int 10h
jmp short wwww
;-----------------------------
;----------修改时间-----------
timeEnter:mov ax,0b800h
mov es,ax
mov di,160*13+40*2
mov al,es:
cmp al,"/"
jne short Error1
mov al,es:
cmp al,"2"
jnb short Error1
mov al,es:
cmp al,"3"
jnb short Error1
mov al,es:
cmp al,"/"
jne short Error1
mov al,es:
cmp al,"4"
jnb short Error1
mov al,es:
cmp al," "
jne short Error1
mov al,es:
cmp al,"3"
jnb short Error1
mov al,es:
cmp al,":"
jne short Error1
mov al,es:
cmp al,"6"
jnb short Error1
mov al,es:
cmp al,":"
jne short Error1
mov al,es:
cmp al,"5"
ja short Error1
jmp short Dateissue
Goback:mov al,0
call jjjj
Error1:mov ax,cs
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,20*160+22*2
pppp:mov al,ds:
cmp al,0
je shortGoback
mov es:,al
mov byte ptr es:,00000100b
inc si
add di,2
jmp short pppp
Dateissue:mov al,es:
cmp al,"3"
jne shortissue
mov al,es:
cmp al,"1"
ja short Error1
issue: mov al,es:
cmp al,"2"
je short TTTT
jmp short correctinput
TTTT: mov al,es:
cmp al,"3"
ja short Error1
;------ACSLL码转换BCD码,再修改时间---
correctinput:mov ax,0b800h
mov es,ax
mov di,160*13+38*2
mov bl,9
mov cx,3
Writedate: push cx
mov ah,es:
mov al,es:
sub ah,30h
sub al,30h
mov cl,4
shl ah,cl
add ah,al
mov al,bl
out 70h,al
mov al,ah
out 71h,al
add di,6
dec bl
pop cx
loop short Writedate
mov bl,4
mov cx,3
Writedate_1:push cx
mov ah,es:
mov al,es:
sub ah,30h
sub al,30h
mov cl,4
shl ah,cl
add ah,al
mov al,bl
out 70h,al
mov al,ah
out 71h,al
add di,6
sub bl,2
pop cx
loop short Writedate_1
call Quit
start:mov ax,cs
mov es,ax
mov bx,offset ReadFloppy
mov al,3
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,3
int 13h
mov ax,4c00h
int 21h
code ends
end start
你的课程设计做有关汇编的? 本帖最后由 老头子学汇编 于 2011-10-20 01:45 编辑
zyp2011_mit 发表于 2011-10-19 23:19 static/image/common/back.gif
你的课程设计做有关汇编的?
不懂你说的是什么意思?
这代码就是按照王爽汇编的书做课程设计!
谢谢楼主分享 看不懂 还没开始学!!!! 赞一个。。:lol 呵呵,我以为你们的专业课的课程设计做关于汇编的~ 写入fld或img代码:
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int agrc,char *argv[])
{
int fd_source;
int fd_dest;
int read_count = 0;
char buffer = { 0 };
fd_source = open("boot.bin",O_RDONLY);
if(fd_source < 0)
{
perror("open boot.bin error:");
return 0;
}
fd_dest = open("virtual_floppy.vfd",O_WRONLY);
if(fd_dest < 0)
{
perror("open virtual_floppy.vfd error:");
return 0;
}
while((read_count = read(fd_source,buffer,512)) > 0)
{
write(fd_dest,buffer,read_count);
memset(buffer,0,512);
}
printf("write image ok!\n");
return 0;
}
本帖最后由 老头子学汇编 于 2011-10-21 17:15 编辑
djzxzzm 发表于 2011-10-21 16:21 static/image/common/back.gif
怎么把代码写到fld或img里?
你误会我的意思了,
虚拟机→移除设备→软盘驱动器→设置→使用软盘镜像文件→浏览,这里新建一个.fld或.img或.iso文件,
随便创建一个.txt文件然后把.txt改成上面3种格式,然后连接
然后代码就在虚拟机里面编译运行,
你打开(我的电脑)看看,除了c盘.d盘.e盘,f盘,h盘,还有没有3.5软盘
如果没有3.5软盘,那就不行了
这代码只在XP系统通过,或dos系统,
真是高手,厉害!
徐缘 发表于 2011-10-22 07:37 static/image/common/back.gif
真是高手,厉害!
朋友别这么说:funk:,我只不过是个垃圾而已,
给别人看到,会笑的!
本帖最后由 老头子学汇编 于 2011-10-23 13:03 编辑
djzxzzm 发表于 2011-10-23 08:34 static/image/common/back.gif
随便创建一个.txt文件然后把.txt改成上面3种格式,然后连接
然后代码就在虚拟机里面编译运行,
??
创建一个文件是要你虚拟机软盘驱动器连接,
---------------------------------------------------------
代码在虚拟机用编译器masn5 或6.15编译。在虚拟机里运行!
可能是我表达能力不好,我发我QQ号给你!加好友说吧
---------------
是把软盘X道X面X扇门的内容读取到0:7c00,再把CS:IP指向0:7c00,就可以执行引导程序
-----------------------
如果在0号软盘中没有软盘,
( 为了不出现这情况,就要"虚拟机 软盘驱动器"连接,那就是生成.flp格式连接,如果你不连接的,那就写入不了软盘)
如果没有软盘,就读取C盘0道0面1扇门的内容到0:7c00,再把CS:IP指向0:7c00,执行原来的系统启动程序
LZ太强大了。。。。。。。。。。。
页:
[1]