⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i.asm

📁 本源码是在DOS环境下将启动代码写入软盘。
💻 ASM
字号:
assume cs:code,ds:data
data segment
  dw 0,2,4,7,8,9
  db 128 dup (0)
data ends
wolf segment
   db "I LOVE WOLF_SEVEN$"
wolf ends
data2 segment
  dw 9,8,7,4,2,0
data2 ends

code segment
   start:push cs
         pop es
         mov bx,offset NewStart1
         
         mov al,8
         mov ch,0
         mov cl,1
         mov dl,0
         mov dh,0
         mov ah,3
         int 13h

         mov ax,4c00h
         int 21h

NewStart1:jmp short NewStart2
  s0  db '(1) reset dos $'

  s1  db '(2) start system $'

  s2  db '(3) clock $'

  s3  db '(4) set clock $' 

  s   dw offset s0,offset s1,offset s2,offset s3

NewStart2:
	mov ax,code
          mov ds,ax
    show0:mov si,offset s  ;ds dx显示字符串开始坐标。
 
          mov bh,0  ;第0页
          mov dh,10  ;行号
          mov dl,10  ;列号


          mov cx,4   ;----------显示4条选项------------------------------------
	 show1:
	  mov ah,2    ;设置光标
          int 10h  
        
          mov di,dx ;保存行号和列号。
          mov dx,[si] ;显示字符串位置。
          mov ah,9
          int 21h   ;显示行中第一条字符串
        
         
          mov dx,di        
          inc dh
          add si,2  ;为下一个循环显示data中字符串作准备。
          loop show1 ;------------显示4条选项结束--------------------------------
	 
	mov ax,0b800h
	;mov ax,wolf
	mov es,ax
	mov al,'h'
	mov es:[160*5+120*2],al

	

              

          mov ah,0
          int 16h
                 
          mov bx,data  ;保存显示主菜单地址
          mov es,bx
          mov bx,16
          mov word ptr es:[bx],0ffffh
          mov word ptr es:[bx+2],0

          cmp al,'1'
          je reset

          mov bx,data  ;保存显示主菜单地址
          mov es,bx
          mov bx,16
          mov word ptr es:[bx],7c00h
          mov word ptr es:[bx+2],0 

          cmp al,'2'
          je startSystem

           
          cmp al,'3'
          je clock
              
          cmp al,'4'
          je setSystemClock


          mov ax,4c00h
          int 21h

      ;重起
       reset:mov ax,data
             mov es,ax
             jmp dword ptr es:[16]            

setSystemClock:



            
       ;进入硬盘操作系统        
 startSystem:mov ax,0
             mov es,ax
             mov bx,7c00h  ;读到内存中的地址。

             mov dl,0080h
             mov ah,2     ;读磁盘操作     
             mov dh,0     ;0盘面
             mov ch,0     ;0磁道
             mov cl,1     ;1扇区
             mov al,1     ;只读一个扇区
             int 13h
             
             call reset


      clock:  mov cx,1000
    showstart:push cx
              call delay
              call showTime
              pop cx
              loop showstart
              ret


     showTime:mov si,data
              mov ds,si
              mov si,0
              mov dx,70h

              mov cx,6
            ss0:mov al,[si]
              out dx,al
              in al,71h
              push ax
              add si,2
              loop ss0

              mov ax,0b800h
              mov ds,ax
              mov dh,0  ;行号
              mov dl,0  ;列号
              mov cl,3  ;颜色
  
              mov ax,160
              mul dh
              mov bx,ax
       
              mov ax,2
              mul dl
              add bx,ax

              mov si,0
              mov cx,2
           ss1:pop ax    ;写年、月
              mov di,cx ;保存循环次数
              call getNum
         
              mov byte ptr [bx],ah
              mov cl,2
              mov [bx+1],cl
         
              mov byte ptr [bx+2],al
              mov [bx+3],cl

              mov byte ptr [bx+4],"/"
              mov [bx+5],cl
              add bx,6
              mov cx,di
              loop ss1


              pop ax     ;写日
              call getNum
              mov byte ptr [bx],ah
              mov cl,2
              mov [bx+1],cl         
              mov byte ptr [bx+2],al
              mov [bx+3],cl

              add bx,6 ;空格

           ss2:pop ax    ;写时、分
              mov di,cx ;保存循环次数
              call getNum
         
              mov byte ptr [bx],ah
              mov cl,2
              mov [bx+1],cl
         
              mov byte ptr [bx+2],al
              mov [bx+3],cl

              mov byte ptr [bx+4],":"
              mov [bx+5],cl
              add bx,6
              mov cx,di
              loop ss2
          
              pop ax     ;写秒
              call getNum
              mov byte ptr [bx],ah
              mov cl,2
              mov [bx+1],cl         
              mov byte ptr [bx+2],al
              mov [bx+3],cl

              ret              
      

       getNum:mov cl,4
              mov ah,al
              shr ah,cl
              and al,00001111b
              add ah,30h
              add al,30h
              ret

      ;延时
      delay:push ax
            push dx
            mov dx,1000h
            mov ax,0
        sss1:sub ax,1
            sbb dx,0
            cmp ax,0
            jne sss1
            cmp dx,0
            jne sss1
            pop dx
            pop ax
            ret


  

        
         clearscreen:    push bx
                         push cx
                         push es
                         mov bx,0b800h
                         mov es,bx
                         mov bx,0
                         mov cx,2000
                  subls: mov byte ptr es:[bx],' '
                         add bx,2
                         loop subls
                         pop es
                         pop cx
                         pop bx
                         ret   
      endsetup:nop

code ends
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -