Assembly 8086汇编代码错误

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

您好,我尝试运行该例程,但它停止了。 当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: 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,取决于如何调用这个代码)在这个子例程的结尾。