2010-03-27 83 views
1

我試圖開發使用TASM一個簡單的內核,使用此代碼:沒有程序入口點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 \森\桌面> TASM/LA /平方米beroset.asm
渦輪彙編4.1版版權所有(C)1988年,1996年國際Borland公司

組裝文件:beroset.asm
個錯誤消息:無
警告消息:無
通行證:2
剩餘存儲器:406K

C:\ DOCUME〜1 \森\桌面> TLINK beroset,loader.bin
渦輪鏈接版本7.1。 30.1。版權所有(c)1987,1996年生產Borland國際
致命的:沒有程序入口點

C:\ DOCUME〜1 \彌敦道\桌面>

我能糾正這個錯誤?

+0

哪裏是'結束Start'線?不應該有一個? – Cipi 2010-03-27 18:30:00

回答

1

我要說的是,你需要通過在最後一行這樣添加end Start結束Start:部分:

code ends 
end Start 

但同樣在碼你永遠不會初始化堆......這是行不通的,但它可以打印「找到並加載操作系統」。

更新: 其實,這是做的伎倆。我剛剛添加了end Start代替END,並且「No entry point」錯誤消失了。但你得到堆棧警告。

所以你去了。 =)

關於STACK:之前的一切只是補充一點:

.model small 
.stack 
+0

是的,現在我得到了'警告:沒有堆棧「,但我該怎麼解決? – 2010-03-27 18:55:30

+0

好吧,我添加了「關於堆棧」的新更新,請閱讀它。 ;) – Cipi 2010-03-27 19:14:41

+0

記住我剛開始使用TASM,因爲我的彙編程序是Nasm,我只想通過學習其他彙編程序來更好地進行彙編。非常感謝您的幫助,以提高自己的知識。 – 2010-03-27 19:15:02