Assembly 8086汇编代码错误
您好,我尝试运行该例程,但它停止了。 当start AX=4B5B时,该代码应该转换ASCII对应内容中的所有内容,并将其存储在结果变量中。 我刚开始组装,请大家帮忙,如果有人能提前帮我的话Assembly 8086汇编代码错误,assembly,x86-16,Assembly,X86 16,您好,我尝试运行该例程,但它停止了。 当start AX=4B5B时,该代码应该转换ASCII对应内容中的所有内容,并将其存储在结果变量中。 我刚开始组装,请大家帮忙,如果有人能提前帮我的话 ASSUME CS:Code, DS:Data Data SEGMENT RESULT DB 3 DUP(?) Data ENDS Code SEGMENT Debut: MOV BX, offset RESULT MOV AH, AL QuartH: M
ASSUME CS:Code, DS:Data
Data SEGMENT
RESULT DB 3 DUP(?)
Data ENDS
Code SEGMENT
Debut: MOV BX, offset RESULT
MOV AH, AL
QuartH: MOV CL, 4
SHR AH, CL
AND AH, 0FH
CMP AH, 0AH
JAE AlphaH
ADD AH, '0'
JMP FinH
AlphaH: ADD AH, 'A'
SUB AH, 0AH
FinH: MOV [BX], AH
QuartL: AND AL, 0FH
CMP AL, 0AH
JAE AlphaL
ADD AL, '0'
JMP FinL
AlphaL: ADD AL, 'A'
SUB AL, 0AH
FinL: MOV Byte ptr[BX+1], AL
FinCH: MOV Byte ptr[BX+2], '$'
Code ENDS
END Debut
第一:确保DS指向您的数据段。在DOS EXE程序中,它不是默认的,除非您使用的是微型模型。因此,在代码开头添加以下内容:
MOV AX,data
MOV DS,AX
第二:如果要从程序的另一部分调用此例程,则此例程需要在末尾执行RET
。我想这不是你正在做的,我们看到了你的整个计划。如果是这样的话,那么你必须以
MOV AX,4C00h
INT 21h
返回待办事项
而且。。。嗯,您构建了一个以$结尾的字符串,所以您想打印它,不是吗?使用DOS功能09h
:
MOV DX,offset RESULT
MOV AH,9
INT 21h
如果直接将代码添加到结果
变量中,甚至可以跳过代码中添加$
的部分。大概是这样的:
RESULT db 32,32,13,10,'$'
这为您提供了两个十六进制数字(初始化为空格字符)的空间,加上回车符和换行符,以防您想要打印此字符串,以及终止的
$
只是想知道…您的RET在哪里?(作为参考,这个简单的代码不会使任何一个半途而废的仿真器崩溃。你最好假设错误在你自己的代码中,直到你可以自信地说没有错误。)我总是假设我的编码错误(相信我),但这段代码不是我的;-)我只是在学习汇编,这就是为什么我问它是否可能是一个模拟器的问题。嗯,我大约98%确定你需要一个RET(或RETF或IRET,取决于如何调用这个代码)在这个子例程的结尾。