我写EXE程序与小模型。
我想借助我的程序加载其他程序。我读到,首先我必须释放一些记忆。我用DOS 4Ah INT 21h
中断。但是在使用AX时,我有错误7(控制单元内存被破坏)。我做错了什么?ASM EXE程序16bit:错误改变内存大小
;-------------------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
@Jester mov es,ax - 主 – AJIOB
您不需要在'.exe'程序中释放内存。只有'.com'程序保留所有内存。 – rkhb