SEGMENT
ディレクティブを使用して、TASMの下で別々のスタック、データ、およびコードセグメントを作成することに成功しましたが、まだ何か気になります。次のコードをTurbo Assembler 2.0でアセンブルすると、TLINKはサイズが90KBに近いバイナリを生成します。リアルモードでのスタックとデータの割り当てTurbo Assembler 2.0のMZ .exe
.286
myStack segment para stack 'stack'
db 0FFFFh dup (?)
ends myStack
myData segment para 'data'
msg db 'Memes!$'
db 7FFFh dup (?)
ends myData
myCode segment para 'code'
assume cs:myCode
assume ss:myStack
start:
mov ax,myData
mov ds,ax
push offset msg
call write
add sp,2
mov ah,4ch
int 21h
write:
push bp
mov bp,sp
mov dx,[bp+4]
mov ah,9h
int 21h
pop bp
ret
ends myCode
end start
今ではMZファイル形式は、それが実際には他に、割り当てられたメモリの最小/最大の段落を経由して、二値画像(に含まれているものを超えてメモリの割り当てが必要であることを指定するには、.exeファイルを有効にする必要がありますように私には思えます私は推測しているコードサイズのエントリに)。
私の質問は、バイナリイメージにプレースホルダの値を直接含めずにメモリを割り当てるための適切なヘッダーを持つ.exeをアセンブラ/リンカをどのようにして同軸にするかです。
:それはのように見えた場合
あなたのコードは、おそらくあなたが望む結果を与えるだろう。面白いのは、私は数時間前にそれを試してみました。そして、アセンブラはセグメント名の未知のシンボルについて不平を言っていました!私はそれがあなたのものとまったく同じだと誓っていますが、/ m2のマルチパススイッチを使っても組み立てられません。奇妙な。 – chili
@chiliおそらくあなたは、**前のセグメントではなく、 'end start'セグメントの後に**セグメントを移動しましたか? –
私はあなたが正しいかもしれないと思う; oおかげで男! – chili