鱼C论坛

 找回密码
 立即注册
查看: 4053|回复: 12

[技术交流] 辛苦4天,终于把课程设计完成,和大家分享一下自己的代码

[复制链接]
发表于 2011-10-19 23:05:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 老头子学汇编 于 2011-10-23 15:10 编辑

运行环境1:  XP  (vmware虚拟机),  3.5 软盘, DOS系统没有安装,不知道有没有问题
              2:虚拟机软盘驱动器,连接,随便生成1.fld或1.img格式的文件就可以了
                (这是把3.5软盘连接的,如果没有连接3.5软盘,那就没有效果的)
              3:在虚拟机编译后,直接运行就可以了,不过360报木马,点允许
             4:重启后就可以看到


2.png

1.png



代码如下:
  1. ;键盘输入1,2,3,4
  2. ;1) reset pc      ;重新启动计算机
  3. ;2) start systme  ; 引导现有的操作系统
  4. ;3) clock         ; 进入动时钟程序,F1键修改颜色,退出ESC键
  5. ;4) set clock     ; 设置时间,退出ESC键,设置时间Enter(回车键)
  6. assume cs:code
  7. code segment               
  8. ;===========读取软盘到0:7c00h位置==                  
  9. ReadFloppy:mov ax,0
  10.            mov es,ax
  11.            mov bx,8000h
  12.            mov al,4
  13.            mov ch,0
  14.            mov cl,1
  15.            mov dl,0
  16.            mov dh,0
  17.            mov ah,2
  18.            int 13h
  19.                               
  20.                    mov ax,0
  21.                    mov es,ax
  22.                    mov bx,7c00h
  23.                    mov al,3
  24.                    mov ch,0
  25.                    mov cl,1
  26.                    mov dl,0
  27.                    mov dh,0
  28.                    mov ah,2
  29.                    int 13h
  30.                    mov ax,0
  31.                    push ax
  32.                    mov ax,7e00h
  33.                    push ax
  34.                    retf

  35.           db 1c9h dup (0)
  36.            dw 0aa55h
  37.                   
  38. ;==================================

  39.                

  40.      
  41. Experiment17:jmp short Experiment
  42.             
  43.            
  44. ;===========数据====================
  45. Menu db "1) reset pc  ",0
  46.      db "2) start system",0
  47.      db "3) clock      ",0
  48.      db "4) set clock  ",0
  49.          db "Input format:"
  50.          db "yy/mm/dd hh:mm:ss",0
  51.      db "Input errors Tip: "
  52.      db "99/12/31 23:59:59",0
  53. ;==================================


  54. ;===========显示菜单====================
  55. Experiment:mov ax,cs
  56.            mov ds,ax
  57.            mov si,0
  58.                    mov ax,0b800h
  59.                    mov es,ax
  60.                    mov di,160*12+33*2
  61.                    mov bx,0
  62.                    mov cx,4
  63. Exp:       mov al,ds:[si+7e02h]
  64.                    cmp al,0
  65.                    je short Expe
  66.                    mov es:[di+bx],al
  67.                    inc si
  68.                    add bx,2
  69.                    jmp short Exp
  70. Expe:      add si,1
  71.            mov bx,0
  72.            add di,160
  73.                    loop Exp
  74.                    jmp short Keyboard
  75. ;=====================================        

  76.                   
  77.                   
  78. ;===========键盘输入==============           
  79. Keyboard:mov ah,0
  80.          int 16h
  81.                  cmp al,"1"
  82.                  je short resetpc
  83.                  cmp al,"2"
  84.                  je short  startsystem
  85.                  cmp al,"3"
  86.                  je short Clearthescreen
  87.                  cmp al,"4"
  88.                  je short Clearthescreen
  89.                  jmp short Keyboard  

  90. ;================================                 
  91.                  
  92. ;============系统重启=============                 
  93. resetpc:mov ax,0ffffh
  94.         push ax
  95.         mov ax,0
  96.         push ax
  97.         retf               
  98. ;==================================        


  99. ;=============引导现在的操作系统=====
  100. startsystem:mov ax,0
  101.            mov es,ax
  102.            mov bx,7c00h
  103.            mov al,1
  104.            mov ch,0
  105.            mov cl,1
  106.            mov dl,80h
  107.            mov dh,0
  108.            mov ah,2
  109.                    int 13h
  110.             mov ax,0
  111.             push ax
  112.             mov ax,7c00h
  113.             push ax
  114.             retf
  115.                
  116. ;==========================================

  117. ;============清除屏幕========
  118. Clearthescreen:push ax
  119.                push bx
  120.                            push es
  121.                            push cx
  122.                            mov ax,0b800h
  123.                            mov es,ax
  124.                            mov bx,0
  125.                            mov cx,2000
  126. Screen:        mov byte ptr es:[bx]," "
  127.                and byte ptr es:[bx+1],00000111b
  128.                            or byte ptr es:[bx+1],00000111b
  129.                            add bx,2
  130.                            loop short Screen
  131.                            pop  cx
  132.                            pop  es
  133.                            pop  bx
  134.                            pop ax
  135.                            cmp al,"3"
  136.                            je short clock
  137.                            cmp al,"4"
  138.                            je short kaset
  139.                            call  Experiment
  140. kaset:         call setclock
  141.                                 


  142. ;===========动态时钟@修改颜色=========
  143. clock:push bx
  144.           push es
  145.           mov ax,0b800h
  146.           mov es,ax
  147.           mov bx,0
  148.           mov si,160*12+30*2
  149.           mov bh,0
  150.           mov ah,0
  151.       mov bl,10
  152.       dec bl
  153. xxxx: mov al,bl
  154.           out 70h,al
  155.           in al,71h
  156.           mov ah,al
  157.           mov cl,4
  158.           shr ah,cl
  159.           and al,00001111b
  160.           add ah,30h
  161.           add al,30h

  162.           cmp bl,9
  163.       je short Years
  164.           cmp bl,8
  165.           je short Month
  166.           cmp bl,7
  167.           je short Day
  168.           cmp bl,4
  169.           je short Time
  170.           cmp bl,2
  171.           je short Point
  172.           cmp bl,0
  173.           je short Second
  174. Modify:in al,60h
  175.        cmp al,01
  176.            je short Clearthescreen
  177.           cmp al,3bh
  178.           je short Color
  179.           pop es
  180.           pop bx
  181.           jmp short clock
  182. ssss:jmp short xxxx
  183. aaaa:jmp short Modify
  184. Years:mov es:[si],ah                         ; 年份
  185.           mov es:[si+2],al
  186.           mov byte ptr es:[si+4],"/"
  187.       dec bl
  188.           jmp short ssss
  189. Month:mov es:[si+6],ah                       ;月份
  190.           mov es:[si+8],al
  191.           mov byte ptr es:[si+10],"/"
  192.       dec bl
  193.           jmp short ssss
  194. Day: mov es:[si+12],ah                       ;天数
  195.           mov es:[si+14],al
  196.           mov byte ptr es:[si+16]," "
  197.       dec bl
  198.           sub bl,2
  199.           jmp short ssss
  200. Time: mov es:[si+18],ah                       ;小时
  201.           mov es:[si+20],al
  202.           mov byte ptr es:[si+22],":"
  203.           sub bl,2
  204.           jmp short ssss
  205. Point:mov es:[si+24],ah                     ;分钟
  206.           mov es:[si+26],al
  207.           mov byte ptr es:[si+28],":"
  208.           sub bl,2
  209.           jmp short ssss
  210. Second:mov es:[si+30],ah                   ;秒
  211.           mov es:[si+32],al
  212.           mov byte ptr es:[si+34]," "
  213.           sub bl,2
  214.           jmp short ssss
  215. Color:push bx
  216.       mov bx,160*12+30*2
  217.       mov cx,17
  218. Colos:inc byte ptr es:[bx+1]      
  219.           add bx,2
  220.           loop short Colos
  221.       pop bx
  222.       jmp short aaaa
  223. ;================================



  224. ;================修改时间============
  225. setclock: mov ax,cs
  226.            mov ds,ax
  227.                    mov si,7e3eh
  228.                    mov ax,0b800h
  229.                    mov es,ax
  230.                    mov di,160*12+25*2
  231.                    mov ch,0
  232. set:       mov cl,ds:[si]
  233.            cmp cl,0
  234.                    je short Cursor
  235.            mov es:[di],cl
  236.            inc si
  237.            add di,2
  238.            jmp short set
  239. Cursor:mov ah,2        ;
  240.        mov bh,0
  241.        mov dh,13
  242.        mov dl,38
  243. input:int 10h
  244.       in al,60h          ;  
  245.       cmp al,01
  246.       je short Quit  
  247.             cmp al,01ch                              
  248.       je short timeEnter
  249. jjjj: push dx              
  250.           cmp al,39h         
  251.           je short zzzz      
  252.           pop dx
  253.           push dx         
  254.           cmp al,0eh
  255.           je short Clear
  256.           pop dx            
  257. wwww: mov ah,0
  258.       int 16h
  259.           cmp al,3ah
  260.           ja short LLLL
  261.           cmp al,1fh
  262.           jnb short show
  263. LLLL:      jmp short input         

  264. Quit:mov ah,2         
  265.      mov bh,0
  266.          mov dx,0
  267.          int 10h
  268.          mov al,0           
  269.          call Clearthescreen  ;清屏
  270.          
  271. zzzz:pop dx               
  272.      mov al," "            
  273.      jmp short wwww
  274. ;------------显示字符------------           
  275. show:push bx
  276.      push dx
  277.      mov ah,9            
  278.      mov bl,7
  279.          mov bh,0
  280.          mov cx,1
  281.          int 10h                        
  282.          mov ah,2         
  283.          pop dx
  284.          pop bx
  285.          inc dl
  286.          cmp dl,56         
  287.       je short Overflow  
  288.          jmp short input   
  289. Overflow:mov ah,9      
  290.          mov al," "
  291.          mov bl,7
  292.          mov bh,0
  293.          mov cx,1      
  294.          int 10h        
  295.          jmp short         Cursor        
  296.                  

  297. ;---------清楚字符--------------                 
  298. Clear:pop dx         
  299.       mov ah,2      
  300.       mov al,0
  301.       dec dl
  302.           cmp dl,37        
  303.           je short Cursor  
  304.           int 10h        
  305.           mov ah,9
  306.           mov al," "
  307.           mov bl,7
  308.           mov bh,0
  309.           mov cx,1
  310.           int 10h         
  311.       jmp short wwww
  312. ;-----------------------------

  313. ;----------修改时间-----------
  314. timeEnter:mov ax,0b800h      
  315.                   mov es,ax
  316.                   mov di,160*13+40*2              
  317.           mov al,es:[di]              
  318.           cmp al,"/"                     
  319.           jne short Error1                          
  320.                   mov al,es:[di+2]               
  321.           cmp al,"2"                        
  322.           jnb short Error1

  323.           mov al,es:[di+4]
  324.           cmp al,"3"
  325.           jnb short Error1

  326.                   mov al,es:[di+6]
  327.                   cmp al,"/"                     
  328.           jne short Error1

  329.                   mov al,es:[di+8]
  330.                   cmp al,"4"
  331.            jnb short Error1
  332.                    mov al,es:[di+12]
  333.                   cmp al," "                     
  334.           jne short Error1

  335.                   mov al,es:[di+14]
  336.                   cmp al,"3"                     
  337.           jnb short Error1

  338.                   mov al,es:[di+18]
  339.                   cmp al,":"                     
  340.           jne short Error1
  341.         
  342.                   mov al,es:[di+20]
  343.                   cmp al,"6"                     
  344.           jnb short Error1
  345.                   mov al,es:[di+24]
  346.                   cmp al,":"                     
  347.           jne short Error1
  348.                   mov al,es:[di+26]
  349.                   cmp al,"5"                     
  350.           ja short Error1
  351.                   jmp short Dateissue
  352. Goback:mov al,0
  353.        call jjjj
  354. Error1:mov ax,cs            
  355.        mov ds,ax      
  356.            mov si,0
  357.            mov ax,0b800h
  358.            mov es,ax
  359.        mov di,20*160+22*2
  360. pppp:  mov al,ds:[si+7e5dh]
  361.        cmp al,0
  362.        je short  Goback
  363.            mov es:[di],al
  364.            mov byte ptr es:[di+1],00000100b
  365.            inc si
  366.            add di,2
  367.            jmp short pppp         
  368. Dateissue:mov al,es:[di+8]        
  369.                    cmp al,"3"              
  370.            jne short  issue   
  371.          mov al,es:[di+10]      
  372.            cmp al,"1"            
  373.            ja short Error1         
  374.                   
  375. issue:          mov al,es:[di+14]
  376.                   cmp al,"2"                    
  377.                   je short TTTT
  378.              jmp short correctinput
  379. TTTT:                  mov al,es:[di+16]           
  380.                   cmp al,"3"                  
  381.           ja short Error1
  382.                   
  383. ;------ACSLL码转换BCD码,再修改时间---                                                  
  384. correctinput:mov ax,0b800h
  385.              mov es,ax
  386.                          mov di,160*13+38*2
  387.                          mov bl,9
  388.                          mov cx,3
  389. Writedate:   push cx
  390.               mov ah,es:[di]         
  391.                          mov al,es:[di+2]      
  392.                          sub ah,30h            
  393.                          sub al,30h            
  394.                          mov cl,4
  395.                          shl ah,cl
  396.                          add ah,al
  397.                          mov al,bl
  398.                          out 70h,al
  399.                          mov al,ah
  400.                          out 71h,al
  401.                          add di,6
  402.                          dec bl
  403.                          pop cx
  404.               loop short Writedate
  405.                   
  406.                   
  407.                   
  408.                      mov bl,4
  409.                          mov cx,3
  410. Writedate_1:push cx
  411.              mov ah,es:[di]
  412.                          mov al,es:[di+2]            
  413.                          sub ah,30h                 
  414.                          sub al,30h
  415.                          mov cl,4
  416.                          shl ah,cl
  417.                          add ah,al
  418.                          mov al,bl
  419.                          out 70h,al
  420.                          mov al,ah
  421.                          out 71h,al
  422.                          add di,6
  423.                          sub bl,2
  424.                          pop cx
  425.               loop short Writedate_1

  426.                   
  427.                 call Quit
  428.                
  429. start:mov ax,cs
  430.       mov es,ax
  431.       mov bx,offset ReadFloppy                  

  432.         mov al,3                     
  433.         mov ch,0                     
  434.         mov cl,1                    
  435.         mov dl,0                     
  436.         mov dh,0                     
  437.         mov ah,3                    
  438.         int 13h
  439.                  
  440.                 mov ax,4c00h
  441.                 int 21h
  442. code ends
  443. end start
复制代码





     


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-19 23:19:20 | 显示全部楼层
你的课程设计做有关汇编的?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-19 23:27:21 | 显示全部楼层
本帖最后由 老头子学汇编 于 2011-10-20 01:45 编辑

不懂你说的是什么意思?
这代码就是按照王爽汇编的书做课程设计!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-19 23:43:18 | 显示全部楼层
谢谢楼主分享
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-20 10:01:36 | 显示全部楼层
看不懂 还没开始学!!!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-20 10:26:56 | 显示全部楼层
赞一个。。:lol
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-20 11:10:32 | 显示全部楼层
呵呵,我以为你们的专业课的课程设计做关于汇编的~
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-21 16:48:33 | 显示全部楼层
写入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[512] = { 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-21 17:05:04 | 显示全部楼层
本帖最后由 老头子学汇编 于 2011-10-21 17:15 编辑
djzxzzm 发表于 2011-10-21 16:21
怎么把代码写到fld或img里?

你误会我的意思了,
虚拟机→移除设备→软盘驱动器→设置→使用软盘镜像文件→浏览,这里新建一个.fld或.img或.iso文件,
随便创建一个.txt文件然后把.txt改成上面3种格式,然后连接
然后代码就在虚拟机里面编译运行,
你打开(我的电脑)看看,除了c盘.d盘.e盘,f盘,h盘,还有没有3.5软盘
如果没有3.5软盘,那就不行了
这代码只在XP系统通过,或dos系统,


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-22 07:37:04 | 显示全部楼层
真是高手,厉害!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-22 10:32:35 | 显示全部楼层
徐缘 发表于 2011-10-22 07:37
真是高手,厉害!

朋友别这么说:funk:,我只不过是个垃圾而已,
给别人看到,会笑的!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-23 11:36:26 | 显示全部楼层
本帖最后由 老头子学汇编 于 2011-10-23 13:03 编辑
djzxzzm 发表于 2011-10-23 08:34
随便创建一个.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,执行原来的系统启动程序
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-29 18:09:35 | 显示全部楼层
LZ太强大了。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表