【发布时间】:2017-04-04 18:27:09
【问题描述】:
我用SMALL模型编写EXE程序。
我想在我的程序的帮助下加载其他程序。我读到首先我必须释放一些内存。我使用DOS 4Ah INT 21h 中断。但是我在使用 AX 时出现错误 7(控制单元内存被破坏)。我做错了什么?
;-------------------MACRO-----------------
println MACRO info
push ax
push dx
mov ah, 09h
mov dx, offset info
int 21h
;print new line
mov dl, 10
mov ah, 02h
int 21h
mov dl, 13
mov ah, 02h
int 21h
pop dx
pop ax
ENDM
;-----------------end macro----------------
.model small
.stack 100h
.data
initToRunErrorText db "Bad init to run other programs", '$'
myDataEnd db '0'
.code
main:
mov ax, @data
mov es, ax
mov ds, ax
call initToRun
mov ah, 4Ch
int 21h
; Result
; ax = 0 => all is good
; ax != 0 => we have an error
initToRun PROC
push ax bx
mov ah, 4Ah
mov bx, offset myDataEnd + 100h
shr bx, 4
add bx, 2
int 21h
jnc initToRunAllGood
add ax, '0'
mov dl, al
mov ah, 06h
int 21h
mov ax, 1
println initToRunErrorText
jmp initToRunEnd
initToRunAllGood:
mov ax, 0
initToRunEnd:
pop bx ax
ret
ENDP
program_length equ $-main
end main
为了编译,我使用 TASM 16 位和 DOSBox 0.74
【问题讨论】:
-
你忘了设置
es。 -
@Jester mov es, ax - in main
-
您不需要在
.exe程序中释放内存。只有.com程序保留所有内存。 -
@rkhb 好的,请把它写成答案。谢谢你,伙计