Loops 为什么我的ASM(使用Turbo汇编程序)程序无限循环?
我试着制作一个接受4位数字的小程序。但出于某种原因,输入第四位数字后,它不会停止 这就是我使用的概念 例如1234的四位数字只是“1000+200+30+4”Loops 为什么我的ASM(使用Turbo汇编程序)程序无限循环?,loops,assembly,infinite,tasm,Loops,Assembly,Infinite,Tasm,我试着制作一个接受4位数字的小程序。但出于某种原因,输入第四位数字后,它不会停止 这就是我使用的概念 例如1234的四位数字只是“1000+200+30+4” 因此,当我在程序中输入1234时,会发生以下情况: 1 BX = 0000 0000 0000 0000 2.1 BX = BX + 1000 3.1 BX = BX + 100 3.2 BX = BX + 100 4.1 BX = BX + 10 4.2 BX = BX + 10 4.3 BX = BX + 10
因此,当我在程序中输入1234时,会发生以下情况:
1 BX = 0000 0000 0000 0000
2.1 BX = BX + 1000
3.1 BX = BX + 100
3.2 BX = BX + 100
4.1 BX = BX + 10
4.2 BX = BX + 10
4.3 BX = BX + 10
5.1 BX = BX + 1
5.2 BX = BX + 1
5.3 BX = BX + 1
5.4 BX = BX + 1
所以BX=0000 0000 1234但是下面的程序进入了一个无限循环。有人能帮我解决这个问题吗
;===========MACROS==========
;-----INPUT MACROS
INPUT_BCD_SUB MACRO DIGIT
CALL COMMON_INP_PROC
MOV DIGIT_PLACE, DIGIT
CALL NUM_CONVERTOR
ENDM
INPUT_BCD MACRO VAR
XOR BX,BX
SHOW T_MSG2
INPUT_BCD_SUB 1000
INPUT_BCD_SUB 0100
INPUT_BCD_SUB 0010
INPUT_BCD_SUB 0001
MOV VAR, BX
XOR BX,BX
ENDM
;-----SHOW MACRO
SHOW MACRO MSG
MOV AH, 09H
LEA DX, MSG
INT 21H
ENDM
;-----END: SHOW MACRO
;-----KILLME MACRO
KILLME MACRO
MOV AH, 4CH
INT 21H
ENDM
;-----END: KILLME MACRO
.MODEL SMALL
.DATA
T_MSG1 DB 10,13,'Enter a number: $'
T_MSG2 DB 10,13,'You have entered: $'
ERR_MSG DB 10,13, 'An error has occured: Invalid digit entered. Please use digits 0 to 9 $'
VAR_NUM1 DW 1 DUP(0)
DIGIT_PLACE DW 1 DUP(0)
.CODE
COMMON_INP_PROC PROC
MOV AH, 01H
INT 21H
CMP AL, 30H
JB ERR1
CMP AL, 39H
JBE SUBT_30
ERR1: SHOW ERR_MSG
KILLME
SUBT_30: SUB AL, 30
RET
COMMON_INP_PROC ENDP
NUM_CONVERTOR PROC
MOV CL,AL
COUNT: ADD BX, DIGIT_PLACE
LOOP COUNT
NUM_CONVERTOR ENDP
MAIN PROC
MOV AX, @DATA
MOV DS, AX
SHOW T_MSG1
INPUT_BCD VAR_NUM1
KILLME
MAIN ENDP
END MAIN
我还生成了一个列表文件,看起来不错。我真的不知道问题是什么
事实上,没有RET的NUM_转换器将产生循环,CH也从未初始化,两者都是正确的。关于单步走的建议也是合理的。我将此作为答案发布,以便您可以关闭此问题,使其不再显示在so网站上。是否应该在末尾使用
NUM\u CONVERTOR
RET?(我不记得ENDP
是否自动插入了一个)此代码的另一个潜在问题是,在NUM\u CONVERTOR
中使用LOOP
之前,您似乎没有清除CH
。循环
指令要求CX
,而不仅仅是低8位(CL
)。感谢您的回复。现在是午夜,所以我明天会修改代码,并在这里报告。:)另外,使用调试器逐步检查代码,看看哪里没有达到预期效果。