我正在尝试使用TASM开发一个简单的内核,使用以下代码:
; beroset.asm
;
; This is a primitive operating system.
;
;**********************************************************************
code segment para public use16 '_CODE'
.386
assume cs:code, ds:code, es:code, ss:code
org 0
Start:
mov ax,cs
mov ds,ax
mov es,ax
mov si,offset err_msg
call DisplayMsg
spin:
jmp spin
;****************************************************************************
; DisplayMsg
;
; displays the ASCIIZ message to the screen using int 10h calls
;
; Entry:
; ds:si ==> ASCII string
;
; Exit:
;
; Destroyed:
; none
;
;
;****************************************************************************
DisplayMsg proc
push ax bx si
cld
nextchar:
lodsb
or al,al
jz alldone
mov bx,0007h
mov ah,0eh
int 10h
jmp nextchar
alldone:
pop si bx ax
ret
DisplayMsg endp
err_msg db "Operating system found and loaded.",0
code ends
END
然后我这样编译:
C:\ DOCUME〜1 \森\桌面和GT; tasm / la / m2 beroset.asm
Turbo Assembler版本4.1版权所有(c)1988,1996 Borland International汇编文件:beroset.asm
错误消息:无
警告信息:无
通行证:2
剩余记忆:406kC:\ DOCUME〜1 \森\桌面和GT; tlink beroset,loader.bin
Turbo Link版本7.1.30.1。版权所有(c)1987,1996 Borland International
致命:没有程序入口点C:\ DOCUME〜1 \森\桌面和GT;
我可以更正此错误?
答案 0 :(得分:1)
我想说你需要在最后一行添加Start:
来结束end Start
部分,如下所示:
code ends
end Start
但是在那段代码中你永远不会初始化堆栈......它不会工作,但它会打印出“找到并加载操作系统。”。
<强>更新强>
实际上,这就是诀窍。我刚刚添加end Start
代替END,并且“无入口点”错误消失了。但是你得到了堆栈警告。
所以你去吧。 =)
关注堆栈:只需在所有内容之前添加:
.model small
.stack