您好我尝试运行该例程但它停止了。 当启动AX = 4B5B时,此代码应该转换其ASCII对应的AL内容并将其存储在RESULT变量中。 我刚刚开始组装,所以我很喜欢,如果有人可以提前帮助我。
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
答案 0 :(得分:0)
首先:确保DS指向您的数据段。除非您使用的是小型模型,否则它在DOS EXE程序中默认不是。因此,在代码的开头添加:
MOV AX,data
MOV DS,AX
第二:如果要从程序的另一部分调用,则此例程最后需要RET
。我想这不是你在做什么,我们正在看你的整个计划。如果是这种情况,那么你必须以
MOV AX,4C00h
INT 21h
返回DOS。
而且......好吧,你构建了一个$ -terminated字符串,所以你要打印它,不是吗?使用DOS函数09h
:
MOV DX,offset RESULT
MOV AH,9
INT 21h
如果您将代码添加到$
变量中,您甚至可以跳过代码添加RESULT
的部分。像这样:
RESULT db 32,32,13,10,'$'
这为您提供了两个十六进制数字(初始化为空格字符)的空间,以及回车符和换行符,以防您要打印此字符串,以及终止$