zoukankan      html  css  js  c++  java
  • 汇编语言(王爽) 课设二

    ;-------------------------------------------写扇区
    assume cs:setupsg
    setupsg segment
    setup:
    ;引导程序-1扇区
            mov ax,initsg
            mov es,ax
            mov bx,0
     
            mov al,1
            mov ch,0
            mov cl,1
            mov dl,0
            mov dh,0
     
            mov ah,3
            int 13h
    
    ;子程序-2扇区
            mov ax,syssg
            mov es,ax
            
            mov al,15
            mov cl,2
            mov ah,3
            int 13h
     
            mov ax,4c00h
            int 21h
            
    setupsg ends
    ;-------------------------------------------写扇区
    
    
    ;-------------------------------------------引导程序
    assume cs:initsg
    initsg segment
    init:
            call loadsys
     
            mov ax,2000h        ;跳转2000:0
            push ax
            mov ax,0
            push ax
            retf
     
    loadsys:
    
            mov ax,2000h        ;读取子程序
            mov es,ax
            mov bx,0
     
            mov al,15        
            mov ch,0        
            mov cl,2        
            mov dl,0        
            mov dh,0        
     
            mov ah,2
            int 13h
            
    ret
    initsg ends
    ;-------------------------------------------引导程序
     
    
    
    ;-------------------------------------------子程序
    assume cs:syssg
    syssg segment
    menu:
            jmp near ptr menushow
            menudata dw offset md0,offset md1,offset md2,offset md3,offset md4,offset md5
            md0 db "------ welcome ------",0
            md1 db "    1) reset pc",0
            md2 db "    2) start system",0
            md3 db "    3) clock",0
            md4 db "    4) set clock",0
            md5 db "------ welcome ------",0
            systable dw sys_restart,sys_disksys,sys_showclock,sys_setclock
            
    menushow:
    
            mov dh,5
            mov dl,30
            mov bp,0        ;menudata
            mov ax,cs
            mov ds,ax
            mov cx,6
            
    menushow_s:
    
            push cx
            mov si,menudata[bp]
            mov cl,02h
            call sys_showstr
            add bp,2
            add dh,2
            pop cx
            
    loop menushow_s
    ;-------------------------------------------子程序
    
    
    ;-------------------------------------------处理输入选项
    sys_input:
    
            mov ah,0
            int 16h
            mov bx,0
            mov bl,al
            mov al,30h
            sub bl,al 
            sub bl,1
     
            cmp bx,0
            jb cycle
            cmp bx,3
            ja cycle
            add bx,bx
            call word ptr systable[bx]        ;调用功能
            
    cycle:
            jmp short sys_input
    ;-------------------------------------------处理输入选项
     
     
     
    ;-------------------------------------------重启
    sys_restart:
    
            mov ax,0ffffh        ;引导 ffff:0
            push ax
            mov ax,0h
            push ax
            retf
    ;-------------------------------------------重启
    
    
    ;-------------------------------------------硬盘引导
    sys_disksys:
    
            call cls
     
            mov ax,0h  
            mov es,ax
            mov bx,7c00h
     
            mov al,1  
            mov ch,0  
            mov cl,1  
            mov dl,80h        ;C盘
            mov dh,0  
     
            mov ah,2
            int 13h
     
            mov ax,0h
            push ax
            mov ax,7c00h
            push ax
    retf
    ;-------------------------------------------硬盘引导
    
    
    ;-------------------------------------------显示时钟
    sys_showclock:
    
            call cls
            jmp short clockread
            
    clockdata:
    
            clockstr dw offset cl1,offset cl2,offset cl3
            clockcolor db 02h
            cl1 db '00/00/00 00:00:00',0
            cl2 db 'ESC - return menu!',0
            cl3 db 'F1 - change color!',0
            cltable db 9,8,7,4,2,0
            
    clockread:
    
            mov si,0        ;cl1
            mov di,0        ;cltable
            mov cx,6        
            
    clockread_s:
    
            push cx
            mov al,cltable[di]    
            
            out 70h,al        ;读取CMOS RAM
            in al,71h
            mov ah,al        
            mov cl,4       
            shr ah,cl        
            and al,00001111b   
            add ah,30h        
            add al,30h       
            
            mov byte ptr cl1[si],ah        ;储存时间
            mov byte ptr cl1[si+1],al
            
            add si,3
            inc di
            pop cx
            
    loop clockread_s
    
    clockprint:
    
            mov dh,6
            mov dl,30
            mov bp,0
            mov ax,cs
            mov ds,ax
            mov cx,3
            
    clockprint_s:
    
            push cx
            mov si,clockstr[bp]
            mov cl,clockcolor[0]        ;颜色
            call sys_showstr
            add bp,2
            add dh,2
            pop cx
            
    loop clockprint_s
    
            mov ah,0        
            int 16h
            cmp ah,01h        ;ESCh
            je clockreturn 
            cmp ah,3bh        ;F1
            je changecolor
            jmp short clockread
            
    clockreturn:
    
            call cls
            
            mov ah,0   
            int 16h     
            
            jmp near ptr menu
            
    changecolor:
    
            inc clockcolor
            
            mov ah,0    
            int 16h    
            
            jmp near ptr clockread
    ;-------------------------------------------显示时钟
    
    
    
    ;-------------------------------------------修改时钟
    sys_setclock:
    jmp short setclock
    
            setclockdata db 'input time like "yy/mm/dd hh:mm:ss"',0
            setsuccess   db 'successful! Press any key return...',0
            
    setclock:
    
            call cls
            
            mov dh,6
            mov dl,20
            mov cl,02h
            mov ax,cs
            mov ds,ax
            mov si,offset setclockdata        ;输出'input'
            call sys_showstr
            
            call getstr            ;读取输入内容
            call settime        ;设置CMOS RAM        
            
            mov dh,10
            mov dl,20
            mov cl,02h
            mov ax,cs
            mov ds,ax
            mov si,offset setsuccess        ;输出'success'
            call sys_showstr
    
            mov ah,0
            int 16h
            
            call cls
            
            jmp near ptr menu
    ;-------------------------------------------修改时钟
    
    
    ;-------------------------------------------设置时钟
    ;ds:si指向时间字符串
    settime:
    
        jmp short seting
        settable db 9,8,7,4,2,0
    
    seting:
    
            mov bx,0
            mov cx,6
    
    settime_s:
    
            mov dh,ds:[si]        ;取值
            inc si
            mov dl,ds:[si]
            add si,2
            
            mov al,30h        ;设置CMOS RAM    
            sub dl,al
            sub dh,al
            shl dh,1
            shl dh,1
            shl dh,1
            shl dh,1
            or dl,dh
            
            mov al,settable[bx]
            out 70h,al
            mov al,dl
            out 71h,al
            
            inc bx
            
    loop settime_s
    ret
    ;-------------------------------------------设置时钟
    
    
    ;-------------------------------------------处理输入
    getstr:
            push ax
    getstrs:
            mov ah,0
            int 16h
            
            cmp al,20h
            jb nochar
            
            mov ah,0
            call charstack
            
            mov ah,2
            mov dh,8
            mov dl,25
            call charstack
            
            jmp getstrs
            
    nochar:
    
            cmp ah,0eh
            je backspace
            
            cmp ah,1ch
            je enterkey
            
            jmp getstrs
            
    backspace:
    
            mov ah,1
            call charstack
            
            mov ah,2
            call charstack
            jmp getstrs
            
    enterkey:
    
            mov al,0
            mov ah,0
            call charstack
            
            mov ah,2
            call charstack
            
            pop ax
    ret
    ;-------------------------------------------处理输入
    
    
    ;-------------------------------------------字符栈处理
    ;(ah),0入栈,1出栈,2显示
    ;ds:si指向字符栈空间
    ;0号,(al)表示入栈字符
    ;1号,(al)返回的字符
    ;2号,(dh)(dl)字符串在屏幕显示的行列位置
    charstack:
    
            jmp short charstart
            table dw charpush,charpop,charshow
            top  dw 0
            
    charstart:
    
            push bx
            push dx
            push di
            push es
            
            cmp ah,2
            ja sret
            
            mov bl,ah
            mov bh,0
            add bx,bx
            jmp word ptr table[bx]        ;跳转
            
    charpush:
    
            mov bx,top
            mov [si][bx],al
            inc top
            jmp sret
            
    charpop:
    
            cmp top,0
            je sret
            dec top
            mov bx,top
            mov al,[si][bx]
            jmp sret
            
    charshow:
    
            mov bx,0b800h
            mov es,bx
            mov al,160
            mov ah,0
            mul dh
            mov di,ax
            add dl,dl
            mov dh,0
            add di,dx
            mov bx,0
            
    charshows:
    
            cmp bx,top
            jne noempty
            mov byte ptr es:[di],' '
            mov byte ptr es:[di+1],02h
            jmp sret
            
    noempty:
    
            mov al,[si][bx]
            mov es:[di],al
            mov byte ptr es:[di+2],' '
            mov byte ptr es:[di+1],02h
            inc bx
            add di,2
            jmp charshows
            
    sret:
    
            pop es
            pop di
            pop dx
            pop bx
    ret
    ;-------------------------------------------字符栈处理
    
    
    ;-------------------------------------------显示字符串 
    ;行 - dh,列 - dl,颜色 - cl,首地址 - ds:si
    sys_showstr:
    
            push ax
            push cx
            push dx
            push si
            push bp
            push es
            
            mov ax,0b800h
            mov es,ax
            mov al,160
            mul dh
            mov dh,0
            add dx,dx 
            add ax,dx
            mov bp,ax
            
    showstr_s:
    
            mov ch,ds:[si]
            cmp ch,0
            je showstr_return
            mov es:[bp],ch
            mov es:[bp+1],cl
            add bp,2
            inc si
            
    jmp short showstr_s
            
    showstr_return:
    
            pop es
            pop bp
            pop si
            pop dx
            pop cx
            pop ax
    ret
    ;-------------------------------------------显示字符串
    
    
    ;-------------------------------------------清屏
    cls:
    
            mov ax,0b800h
            mov ds,ax
            mov bx,0
            mov cx,24*80*2
     
    cls_s:
    
            mov byte ptr ds:[bx],0
            add bx,2
            
    loop cls_s
    ret
    ;-------------------------------------------清屏
    
    syssg ends
    end setup

    参考石莹

      博主石莹的这篇汇编代码已经写的比较完美了,受益颇深。

  • 相关阅读:
    1.8.10- 表单域
    sublime常用快键键
    HTML常用标签
    1.8.9- 下拉菜单
    给定一个文件名,和字符串,统计字符中在文件中出现的次数
    初始easyUI
    关于maven的CoreException: Could not get the value for parameter compilerId for plugin 。。的错误
    1 创建一个存储过程,以及对存储过程的调用 MySQL
    Java 将word转为pdf jacob方式
    数据库查询的数据导出到xls表,集合数据导出到xls表
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11826802.html
Copyright © 2011-2022 走看看