1

このコードを使用して、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\Nathan\Desktop> tasm /la /m2 beroset.asm
Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

アセンブル ファイル: beroset.asm
エラー メッセージ: なし
警告メッセージ: なし
パス: 2
残りのメモリ: 406k

C:\DOCUME~1\Nathan\Desktop> tlink beroset, loader.bin
ターボ リンク バージョン 7.1.30.1。Copyright (c) 1987, 1996 Borland International
Fatal: プログラムのエントリ ポイントがありません

C:\DOCUME~1\Nathan\Desktop>

このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

2

最後の行に次のようにStart:追加して、セクションを終了する必要があります。end Start

code ends
end Start

しかし、このコードでも、スタックを初期化することはありません...動作しませんが、「オペレーティングシステムが見つかりました。ロードされました。」と出力されます。

更新: 実際には、これでうまくいきました。ENDの代わりに追加end Startしたところ、「エントリポイントがありません」というエラーはなくなりました。ただし、スタック警告が表示されます。

さあ、行きます。=)

スタックについて:すべての前にこれを追加するだけです:

.model  small
.stack 
于 2010-03-27T18:38:01.330 に答える