0

私はコンピューター工学クラスの入門の課題に取り組んでいます。ユーザーからの数値入力を受け取り、この数値を H レジスターに返すサブルーチンを作成しようとしています。

私が見る限り、1 桁の入力では正常に動作しますが、続行して別の入力を追加しようとすると、H レジスタに (input #)+1 が返されます。

入力は 2 文字を超えず、20 文字を超えません。

readN:  ; This subroutine reads a number digit from the user 
        ; and returns this number in H
        ; Inputs: none
        ; Outputs: H register

        push    b
        push    psw
        push    h          ; store registers in stack

        mvi     b,0        ; Zero out the B register

        lxi     d,mess4    ; "Enter number: $"
        call    bdos       ; bdos = 0005

nextN:  mvi     c,1        ; C = 1 --> Read character
        call    bdos
        cpi     cr         ; cr = 0Dh (carriage return)
        jz      lastN      ; if input was carriage return --> go to lastN

        mvi     h,10       ; set up H register for multiplication 
        sui     '0'        ; subtract ASCII 0 from input, leaving the numerical value
        mov     e,a        ; store accumulator in E register
        mov     a,b        ; bring B register (existing number) to accumulator

mult:   add     b          
        dcr     h          ; decrements multiplication tracker 
        jnz     mult       ; if h != 0 --> redo addition

        add     e          ; add E register (new input) to old input*10
        mov     b,a        ; store result in b

        jmp     nextN      ; redo input

lastN:  pop     h
        mov     h,b
        pop     psw
        pop     b
        ret

ここで私が間違っているかもしれないことを誰かが見ることができますか? すべてを提供したことを願っていますが、コードで何かを解決する必要がある場合はお知らせください.

ありがとう!

4

1 に答える 1