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

📄 pm1.asm

📁 cxzv dvsdsd sd fsdf sdf sd f
💻 ASM
字号:
.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       
                 
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,92h,0,0> 
 gdt_size=$-gdt_null        
                                   
 pdescr  dq 0               
 sym     db 1               
 attr    db 1Eh                                         
 mes     db 27,'[31;42m Back To Real Mode!  ',27,'[0m$'
 data_size=$-gdt_null                                  
data ends                   
                            
text segment 'code' use16                  
 assume cs:text,ds:data     
 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 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 bx,800   
                mov cx,640   
                mov ax,word ptr sym
        screen: mov es:[bx],ax
                add bx,2     
                inc ax       
                loop screen                
                             
                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                  
                                           
                sti                        
                mov al,0                   
                out 70h,al                 
                                           
                mov ah,09h                 
                lea dx,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 + -