我正在為 DOS 撰寫兩個匯編檔案:
hm2.asm:
.8086
DGROUP group _DATA, STACK ; Required by MASM 3.0 and 4.0.
; MASM 4.0 doesn't support USE16 (but MASM >=5.0 does).
_TEXT segment word public 'CODE'
assume cs:_TEXT, ds:DGROUP, ss:STACK
main proc
mov ax, DGROUP ; Initialize DS.
mov ds, ax
mov ah, 9 ; DOS Function call to print a message.
mov dx, offset message
int 21h
mov ax, 4c00h ; DOS Function call to exit back to DOS.
int 21h
main endp
_TEXT ends
_DATA segment word public 'DATA'
message db "Hello, World!", 0dh, 0ah, '$'
_DATA ends
STACK segment para stack 'STACK'
db 100h dup (?)
STACK ends
end main
hm3.asm:
.8086
.model small
.stack 100h
.data
message db "Hello, World!", 0dh, 0ah, '$'
.code
main proc
mov ax, @data ; Initialize DS.
mov ds, ax
mov ah, 9 ; DOS Function call to print a message.
mov dx, offset message
int 21h
mov ax, 4c00h ; DOS Function call to exit back to DOS.
int 21h
main endp
end main
我希望這些在由 Microsoft Macro Assembler 5.00 masm.exe編譯時是相同的,然后使用相應的link.exe鏈接到 .EXE 檔案。但是,hm2.exe比hm3.exe長大約 256 == 100h 個位元組,因為它包含STACK. 如何在不使用.modeland的情況下擺脫這些零位元組.stack,從而與 Microsoft Macro Assembler 4.00 及更早版本兼容?
uj5u.com熱心網友回復:
我在這里找到了一份 MASM 3.00 手冊。在第 3-2 頁有一個示例程式,如下所示
.8086
DATA segment ; Program Data Segment
STRING db "Hello .", 13, 10, "$"
DATA ends
CODE segment ; Program Code Segment
assume cs :CODE, ds :DATA
START: ; Program Entry Point
mov ax, seg DATA
mov ds, ax
mov dx, offset STRING
mov ah, 9
int 21h
mov ah, 4ch
int 21h
CODE ends
STACK segment stack ; Program Stack Segment
assume ss :STACK
dw 64 dup(?)
STACK ends
end START
我能夠組裝并將其鏈接到 640 位元組的 exe。當我增加堆疊大小(從 64 到 1024)時,exe 大小沒有改變,因此我假設聯結器沒有填充影像中未初始化的堆疊位元組。如果您將示例程式與您的程式進行比較,也許這會幫助您弄清楚。
可能的答案是洗掉 DGROUP 指令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472521.html
上一篇:匯編語言中的“標簽”-操作碼
下一篇:磁區函式錯誤(mips程式集)
