当前位置: 代码迷 >> 汇编语言 >> 汇编 操作系统,该怎么解决
  详细解决方案

汇编 操作系统,该怎么解决

热度:4785   发布时间:2013-02-26 00:00:00.0
汇编 操作系统
我看了自己动手写操作系统,然后把代码拷到linux下 用nasm 编译后执行 显示can't execute binary file  
   
  请大家帮忙看看!! 


  源文件代码如下test.asm

  %include "pm.inc"

  org 0100h
  jmp LABEL_BEGIN
  [SECTION .gdt]
  ;GDT
  LABEL_GDT: Descriptor 0,0,0
  LABEL_DESC_CODE32: Descriptor 0,SegCode32Len - 1,DA_C + DA_32
  LABEL_DESC_VIDEO: Descriptor 0B800h,0ffffh,DA_DRW

  GdtLen equ $ - LABEL_GDT
  GdtPtr dw GdtLen
  dd 0

  SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
  SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT


  [SECTION .s16]
  [BITS 16]
  LABEL_BEGIN:
  mov ax,cs
  mov ds,ax
  mov es,ax
  mov ss,ax
  mov sp,100h


  xor eax,eax
  mov ax,cs
  shl eax,4
  add eax,LABEL_SEG_CODE32
  mov word [LABEL_DESC_CODE32 + 2],ax
  shr eax,16
  mov byte [LABEL_DESC_CODE32 + 4],al
  mov byte [LABEL_DESC_CODE32 + 7],ah



  xor eax,eax
  mov ax,ds
  shl eax,4
  add eax,LABEL_GDT
  mov dword [GdtPtr + 2],eax


  lgdt [GdtPtr]

  cli

  in al,92h
  or al,00000010b
  out 92h,al


  mov eax,cr0
  or eax,1
  mov cr0,eax


  jmp dword SelectorCode32:0


  [SECTION .s32]
  [BITS 32]

  LABEL_SEG_CODE32:

  mov ax,SelectorVideo
  mov gs,ax
  mov esi,(80*10+0)*2
  mov ah,0ch
  mov [gs:edi],ax


  jmp $

  SegCode32Len equ $ - LABEL_SEG_CODE32


  pm.inc 源文件如下:
   


  ;----------------------------------------------------------------------------
; 描述符类型值说明
; 其中:
; DA_ : Descriptor Attribute
; D : 数据段
; C : 代码段
; S : 系统段
; R : 只读
; RW : 读写
; A : 已访问
; 其它 : 可按照字面意思理解
;----------------------------------------------------------------------------
DA_32 EQU 4000h ; 32 位段

DA_DPL0 EQU 00h ; DPL = 0
DA_DPL1 EQU 20h ; DPL = 1
DA_DPL2 EQU 40h ; DPL = 2
DA_DPL3 EQU 60h ; DPL = 3
;----------------------------------------------------------------------------
; 存储段描述符类型值说明
;----------------------------------------------------------------------------
DA_DR EQU 90h ; 存在的只读数据段类型值
DA_DRW EQU 92h ; 存在的可读写数据段属性值
DA_DRWA EQU 93h ; 存在的已访问可读写数据段类型值
DA_C EQU 98h ; 存在的只执行代码段属性值
DA_CR EQU 9Ah ; 存在的可执行可读代码段属性值
DA_CCO EQU 9Ch ; 存在的只执行一致代码段属性值
DA_CCOR EQU 9Eh ; 存在的可执行可读一致代码段属性值
;----------------------------------------------------------------------------
; 系统段描述符类型值说明
;----------------------------------------------------------------------------
DA_LDT EQU 82h ; 局部描述符表段类型值
DA_TaskGate EQU 85h ; 任务门类型值
DA_386TSS EQU 89h ; 可用 386 任务状态段类型值
DA_386CGate EQU 8Ch ; 386 调用门类型值
DA_386IGate EQU 8Eh ; 386 中断门类型值
DA_386TGate EQU 8Fh ; 386 陷阱门类型值
;----------------------------------------------------------------------------


; 选择子图示:
; ┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
; ┃ 15 ┃ 14 ┃ 13 ┃ 12 ┃ 11 ┃ 10 ┃ 9 ┃ 8 ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃
; ┣━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━╋━━╋━━┻━━┫
; ┃ 描述符索引 ┃ TI ┃ RPL ┃
; ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━┻━━━━━┛
  相关解决方案