1

4 桁の数字を受け入れる小さなプログラムを作成しようとしました。しかしなぜか4桁目に入っても止まらない。

これが私が使用している概念です。

たとえば 1234 のような 4 桁の数字は、単純に "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    

5.1 BX = BX + 1
5.2 BX = BX + 1
5.3 BX = BX + 1
5.4 BX = BX + 1    

BX = 0000 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

リストファイルも生成しましたが、問題ないようです。何が問題なのかさっぱり分からない…

TASM によって生成されたリスト ファイル

4

1 に答える 1