ファイルの最初の行で書く0.286:
.286
IDEAL
MODEL small
STACK 100h
etc.
編集:私はすでに事のこのタイプを行う手順を書いて、ここで彼らは、次のとおりです。
;CONSTANTS: {
;ACTIONS: {
READ EQU 0
WRITE EQU 1
READ&WRITE EQU 2 ;NOT USABLE AS AN ACTION
;}
;RELATIVE TO: {
START_OF_FILE EQU 0
CURRENT_POINTER EQU 1
END_OF_FILE EQU 2
;}
;}
;*********************************************************************************
;*********************************************************************************
PROC FILE_OPEN
;INPUT: OFFSET OF FILE NAME
;OUTPUT: FILE HANDLE (ALL THATS LEFT IS TO "POP" IT INTO A VARIABLE/REGISTER)
;EXAMPLE:
;PUSH OFFSET FILE_NAME
;CALL FILE_OPEN
;POP [FILE_HANDLE]
;{
;START_PROC {
PUSH BP
MOV BP, SP
_NAME EQU [WORD PTR BP + 4]
PUSH AX BX DX
;}
;CODE{
MOV DX, _NAME
MOV AH, 3Dh
MOV AL, READ&WRITE
INT 21h
JC @@END_PROC
MOV BX, HANDLE
MOV [BX], AX
;}
@@END_PROC: ;{
POP DX BX AX
POP BP
RET
;}
;}
ENDP FILE_OPEN
;*********************************************************************************
;*********************************************************************************
PROC FILE_READ_OR_WRITE
;{
;INPUT: READ OR WRITE, FILE HANDLE, BUFFER OFFSET, NUMBER OF BYTES TO READ/WRITE
;OUTPUT: THE DATA IS LOADED FROM THE FILE TO THE BUFFER (IF READ), OR THE DATA IS LOADED FROM THE BUFFER TO THE FILE (WRITE)
;START PROC {
PUSH BP
MOV BP, SP
ACTION EQU [WORD PTR BP + 10] ;READ OR WRITE (CONSTANT)
BUFFER EQU [WORD PTR BP + 8] ;BUFFER OFFSET
NUM_BYTES EQU [WORD PTR BP + 6] ;NUMBER OF BYTES DO LOAD
HANDLE EQU [WORD PTR BP + 4] ;FILE HANDLE
PUSH AX BX CX DX
;}
;SET UP PARAMS {
MOV BX, HANDLE
MOV CX, NUM_BYTES
MOV DX, BUFFER
CMP ACTION, WRITE
JZ @@WRITE
;}
@@READ: ;{
MOV AX, 3F00h
INT 21h
JMP @@END_PROC
;}
@@WRITE: ;{
MOV AX, 4000h
INT 21h
;}
@@END_PROC: ;{
POP DX CX BX AX BP
RET 8
;}
;}
ENDP FILE_READ_OR_WRITE
;*********************************************************************************
;*********************************************************************************
PROC FILE_CLOSE
;INPUT: FILE HANDLE
;OUTPUT: THE FILE IS CLOSED
;{
;START PROC {
PUSH BP
MOV BP, SP
HANDLE EQU [BP + 4] ;FILE HANDLE
PUSH AX BX
;}
;CODE {
MOV AH, 3Eh
MOV BX, HANDLE
INT 21h
;}
@@END_PROC: ;{
POP BX AX
POP BP
RET 2
;}
;}
ENDP FILE_CLOSE
;*********************************************************************************
;*********************************************************************************
PROC FILE_UPDATE_POINTER
;INPUT: RELATIVE_TO(MOVING THE POINTER RELATIVE TO [START_OF_FILE, CURRENT_POINTER, END_OF_FILE]
;INPUT: NUM_BYTES(_1), MOVES THE POINTER NUM1:NUM SPOTS (SIGNED DWORD) WHERE POSITIVE = RIGHT AND NEGATIVE = LEFT
;INPUT: FILE HANDLE
;OUTPUT: UPDATES THE FILE POINTER
;{
;START PROC {
PUSH BP
MOV BP, SP
RELATIVE_TO EQU [BP + 10] ;CONSTANT
NUM_BYTES_1 EQU [BP + 8] ;HIGH ORDER WORD
NUM_BYTES EQU [BP + 6] ;LOW ORDER WORD
HANDLE EQU [BP + 4] ; FILE HANDLE
PUSH AX BX CX DX
;}
;CODE {
MOV AX, RELATIVE_TO
MOV AH, 42h
MOV BX, HANDLE
MOV CX, NUM_BYTES_1
MOV DX, NUM_BYTES
INT 21h
;}
@@END_PROC: ;{
POP DX CX BX AX
POP BP
RET 8
;}
;}
ENDP FILE_UPDATE_POINTER
うーん、ちょうど追加し 'あなたのファイルの一番上に.286?実際に 'IDEAL'モードではおそらく' P286'と呼ばれます。 – Jester
私はターボアセンブラーを何年も見たことがありません。 +1(それは?)と素晴らしいアセンブラだったので+1。 'pusha'と' popa'はIIRCのi386命令です。あなたは '8086'のためにそれを使うことはできません。モデルを変更するか、手動でバイトコードを追加します。 – jww
@Jester私はそれが落ちたとは思えません。モデルの後のIDEALの後の '.286'をcodesegとdatasegに入れようとしましたが、ファイルの先頭にはならないと思いました。それはありがとうございました!投稿者 – morha13