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

📄 pm2.asm

📁 cxzv dvsdsd sd fsdf sdf sd f
💻 ASM
字号:
include debug.mac
.386P              
descr struc 
 limit  dw 0
 base_l dw 0                        
 base_m db 0
 attr_l db 0
 attr_2 db 0      
 base_h db 0
descr ends   
 
trap struc 
 offs_1 dw 0
 sel    dw 16
 rsrv   db 0
 attr   db 8Fh
 offs_h dw 0
trap ends 
 
data segment           
 gdt_null descr <0,0,0,0,0,0>  
 gdt_data descr <data_size-1,0,0,92h>
 gdt_code descr <code_size-1,,,98h>
 gdt_stack descr <255,0,0,92h>
 gdt_screen descr <4095,8000h,0Bh,92,0,0> 
 gdt_size=$-gdt_null        
 
 idt label word
 exc0 trap <exc_0>
 exc1 trap <exc_1>
 exc2 trap <exc_2>
 exc3 trap <exc_3>
 exc4 trap <exc_4>
 exc5 trap <exc_5>
 exc6 trap <exc_6>
 exc7 trap <exc_7>
 exc8 trap <exc_8>
 exc9 trap <exc_9>
 exc0Ah trap <exc_0Ah>
 exc0Bh trap <exc_0Bh> 
 exc0Ch trap <exc_0Ch> 
 exc0Dh trap <exc_0Dh> 
 exc0Eh trap <exc_0Eh> 
 exc0Fh trap <exc_0Fh> 
 exc10h trap <exc_10h>              
 exc11h trap <exc_11h>
 idt_size=$-idt       
                            
 pdescr  dq 0               
 mes     db 27,'[31;42m Back To Real Mode!  ',27,'[0m$';(21)  
 tblhex  db '0123456789ABCDEF'
 string  db '**** ****_**** ****_**** ****'
 len=$-string
 home_sel dw home
          dw 10h 
 data_size=$-gdt_null
data ends                   
                            
text segment 'code' use16
 assume cs:text,ds:data     
 begin label word
 exc_0 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0 endp                         
        
 exc_1 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_1 endp
        
 exc_2 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_2 endp
        
 exc_3 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_3 endp            
        
 exc_4 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_4 endp                         
        
 exc_5 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_5 endp
        
 exc_6 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_6 endp
        
 exc_7 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_7 endp            
        
 exc_8 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_8 endp                         
        
 exc_9 proc
    mov ax,0
    jmp dword ptr home_sel
 exc_9 endp
        
 exc_0Ah proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Ah endp
        
 exc_0Bh proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Bh endp          
 
 exc_0Ch proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Ch endp                       
        
 exc_0Dh proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Dh endp
        
 exc_0Eh proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Eh endp
        
 exc_0Fh proc
    mov ax,0
    jmp dword ptr home_sel
 exc_0Fh endp          
        
 exc_10h proc
    mov ax,0
    jmp dword ptr home_sel
 exc_10h endp                       
 
 exc_11h proc
    mov ax,0
    jmp dword ptr home_sel
 exc_11h endp
        
        
 main proc 
      xor eax,eax           
      mov ax,data           
      mov ds,ax             
                               
      shl eax,4             
      mov ebp,eax           
      lea bx,gdt_data ;mov bx,offset gdt_data
      mov [bx].base_l,ax    
      rol eax,16            
      mov [bx].base_m,al    
                            
      xor eax,eax                   
      mov ax,cs             
      shl eax,4             
      lea bx,gdt_code ;mov bx,offset gdt_code
      mov [bx].base_l,ax    
      rol eax,16            
      mov [bx].base_m,al
                       
      xor eax,eax      
      mov ax,ss        
      shl eax,4        
      lea bx,gdt_stack ;mov bx,offset gdt_stack
      mov [bx].base_l,ax       
      rol eax,16        
      mov [bx].base_m,al 
                             
      mov dword ptr pdescr+2,ebp
      mov word ptr pdescr,gdt_size-1
      lgdt pdescr         
                          
      cli                           
      mov al,80h        
      out 70h,al        
                        
      mov word ptr pdescr,idt_size-1
      xor eax,eax       
      lea ax,idt ;mov ax,offset idt 
      add eax,ebp       
      mov dword ptr pdescr+2,eax
      lidt pdescr       
                        
      mov eax,cr0       
      or eax,1              
      mov cr0,eax       
                        
      db 0EAh           
      dw offset continue
      dw 16             
                        
      continue: mov ax,8       
                mov ds,ax           
                         
                mov ax,24 
                mov ss,ax
                         
                mov ax,32
                mov es,ax
                         
                mov cx,300
                mov bx,2720
                mov dx,3001h  
          xxxx: push cx  
                mov cx,0 
          zzzz: loop zzzz
                mov es:[bx],dx
                inc dl   
                add bx,2 
                pop cx   
                loop xxxx
                mov ax,0FFFFh
          home: lea si,string ; mov si,offset string         
                debug         
                              
                lea si,string ; mov si,offset string
                mov cx,len    
                mov ah,74h    
                mov di,1600   
           scr: lodsb         
                stosw         
                loop scr      
                              
                              
                mov gdt_data.limit,0FFFFh      
                mov gdt_code.limit,0FFFFh
                mov gdt_stack.limit,0FFFFh
                mov gdt_screen.limit,0FFFFh
                               
                mov ax,8 
                mov ds,ax
                mov ax,24 
                mov ss,ax
                mov ax,32
                mov es,ax
                         
                db 0EAh  
                dw offset go
                dw 16    
                         
            go: mov eax,cr0
                and eax,0FFFFFFFEh
                mov cr0,eax
                db 0EAh  
                dw offset return
                dw text  
                              
                              
        return: mov ax,data    
                mov ds,ax     
                mov ax,stk    
                mov ss,ax         
                
                mov ax,3FFh
                mov word ptr pdescr,ax
                mov eax,0
                mov dword ptr pdescr+2,eax
                lidt pdescr
                                              
                sti           
                mov al,0      
                out 70h,al    
                              
                mov ah,09h    
                lea dx,mes ;mov dx,offset mes
                int 21h       
                         
                mov ax,4c00h 
                int 21h  
 main endp               
 code_size=$-main        
 text ends               
 stk segment stack 'stack'
     db 256 dup ('^')    
 stk ends                      
                         
 end main                

⌨️ 快捷键说明

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