<<自己动手写操作系统>>第三章第一节问题
Xexux 2018-05-20 07:30:54 我按照书上的代码写了一遍,但是编译的时候出现错误:
D:\VITTUAL_APPS\BOOTS/保护模式.asm:5: error: comma expected after operand 1
D:\VITTUAL_APPS\BOOTS\pm.inc:6: ... from macro `Descriptor' defined here
D:\VITTUAL_APPS\BOOTS/保护模式.asm:6: error: comma expected after operand 1
D:\VITTUAL_APPS\BOOTS\pm.inc:6: ... from macro `Descriptor' defined here
D:\VITTUAL_APPS\BOOTS/保护模式.asm:7: error: comma expected after operand 1
D:\VITTUAL_APPS\BOOTS\pm.inc:6: ... from macro `Descriptor' defined here
D:\VITTUAL_APPS\BOOTS/保护模式.asm:63: error: invalid operand type
源码:
%include "D:\VITTUAL_APPS\BOOTS\pm.inc"
org 0100h
jmp LABEL_BEGIN
[SECTION .gdt]
LABEL_GDT: Descriptor 0,0,0
LABEL_DESC_CODE32: Descriptor 0,SegCode32Len-1,DA_C+DA_32
LABEL_DESC_VIDEO: Descriptor 0B1000h,0fffh,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 ss,ax
mov sp,0100h
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 edi,(80*10+0)*2
mov ah,0ch
mov al,'P'
mov [gs:edi],ax
jmp $
SegCode32Len equ ($ - LABEL_DESC_CODE32)
怎么解决?