Assembly 这个汇编代码有问题吗?

Assembly 这个汇编代码有问题吗?,assembly,runtime-error,tasm,dosbox,Assembly,Runtime Error,Tasm,Dosbox,这段代码是使用Turbo汇编程序进行汇编的,但当我尝试在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

这段代码是使用Turbo汇编程序进行汇编的,但当我尝试在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
通过将
AH
设置为
4CH
并调用
int21h
完成。通过写入
MOV AX,4CH
您将使用此值设置
AL
,而不是
AH
。在AL中,您可以设置退出代码

您可以选择(选项1):

或(备选方案2)

通过将
AH
设置为
4CH
并调用
int21h
完成。通过写入
MOV AX,4CH
您将使用此值设置
AL
,而不是
AH
。在AL中,您可以设置退出代码

您可以选择(选项1):

或(备选方案2)


因此,在更改代码后,如果您使用选项1,则会得到:AX=4C04 BX=0232的最终值-是的,在选项2中您覆盖了整个
AX
。非常感谢您的帮助,我理解。@Tommylee2k是的,我想说
AL
将得到
4C
的这个值,而不是
AH
。我已经更新以使其更清楚。退出到DOS只是结束您的程序并将控制返回到DOS,但您可以在
AL
中返回程序的不同状态代码,以便调用者可以根据此值执行操作<代码>0通常表示一切正常时,
1
-可能是一种错误,
2
-可能是另一种错误,依此类推。因此,如果您的应用程序是从BAT脚本调用的,则此状态(有时称为错误级别)可用于控制是否应执行下一个操作或脚本执行是否应停止。因此,在更改代码后,如果使用选项1-是,则最终值为:AX=4C04 BX=0232,在选项2中,您覆盖了整个
AX
。非常感谢您的帮助,我理解。@Tommylee2k是的,我想说
AL
将获得
4C
的值,而不是
AH
。我已经更新以使其更清楚。退出到DOS只是结束您的程序并将控制返回到DOS,但您可以在
AL
中返回程序的不同状态代码,以便调用者可以根据此值执行操作<代码>0通常表示一切正常时,
1
-可能是一种错误,
2
-可能是另一种错误,依此类推。因此,如果应用程序是从BAT脚本调用的,则可以使用此状态(有时称为错误级别)来控制是否应执行下一个操作或脚本执行是否应停止。
mov ah,4CH
int 21h
mov AX,4C00H ; or change 00 to any exit code you want.
int 21h