该汇编代码有问题吗?

App*_*der 1 assembly runtime-error tasm dosbox

这段代码是使用Turbo Assembler汇编的,但是当我尝试在DOSBox中运行它时,它冻结并且DOSBox消失。这有什么问题吗?

TITLE SAMPLE PROGRAM
.MODEL SMALL
.STACK 64
.DATA
.CODE
MYCODE PROC
    MOV AX,04
    MOV BX,0212
    CMP AX, BX
    JG action1
    JLE action2
action1:
    ADD AL, 30
    JMP exit
action2:
    ADD BL, 20
    JMP exit
exit:
    MOV AX, 4CH
    INT 21H
MYCODE ENDP
END MYCODE
Run Code Online (Sandbox Code Playgroud)

Paw*_*sik 5

通过设置AH4CH并调用来退出DOSint 21h。通过写入,MOV AX,4CH您将设置AL此值,而不是AH。在AL中,您可以设置退出代码。

可以(选择1):

mov ah,4CH
int 21h
Run Code Online (Sandbox Code Playgroud)

或(选项2)

mov AX,4C00H ; or change 00 to any exit code you want.
int 21h
Run Code Online (Sandbox Code Playgroud)

  • 退出到 DOS 只是结束程序并将控制权返回到 DOS,但是您可以在“AL”中返回程序的不同状态代码,以便调用者可以根据该值执行某些操作。“0”通常表示一切正常,“1” - 可能是一种类型的错误,“2” - 另一种错误,依此类推。因此,如果您的应用程序是从 BAT 脚本调用的,则此状态(有时称为错误级别)可用于控制是否应执行下一步操作或应停止脚本执行。 (2认同)