Assembly 这个汇编代码有问题吗?
这段代码是使用Turbo汇编程序进行汇编的,但当我尝试在DOSBox中运行它时,它会冻结,DOSBox会死掉。有什么问题吗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
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