Сборка MASM32 - чтение номера из консоли - PullRequest
0 голосов
/ 11 декабря 2011

Извините, если этот вопрос действительно прост, но я попробовал все, что знаю, и не смог разобраться.

Я пытаюсь сделать простую процедуру, которая берет строку и Count из консоли и печатает число строк, указанное в Count.

Все хорошо, но когда я перевожу Count на eax для цикла, значение get испортилось, и я получаю бесконечный цикл печати. ​​

Я пытался изменить счетчик на DWORD с помощью atodw, но не сработало.

вот код:

PrintString PROTO :DWORD, :DWORD

.data

        String db 100 DUP(0)

        Count db 10 DUP(0)

.code
    start:
        ;1- get user input

        invoke StdIn, addr String, 99
        invoke StdIn, addr Count, 10

        ;2- Remove the CRLF from count
         invoke StripLF, addr Count

        ;3- Convert the count to DWORD 
        invoke atodw, addr InputCount
        mov Counter, eax

        ;4- Call the Printer function

        invoke Printer, addr String,   addr Count

Printer PROC StringToPrint:DWORD, count:DWORD         

 mov eax,count  ;;;;;; This is the problem I think

 Looppp:
            push eax

            invoke StdOut,  StringToPrint

            pop eax
            dec eax

            jnz Looppp
    ret
Printer endp

1 Ответ

0 голосов
/ 11 декабря 2011

Вы передаете addr Count - адрес строки - в качестве второго аргумента Printer.Но он ожидает целое число, поэтому вы хотите вместо него передать Counter.

Поскольку вы используете язык без проверки типов, вы должны принять соглашение об именах, такое как Венгерская нотация для ваших идентификаторов.может помочь вам увидеть и избежать такого рода проблем.Например, с переменными здесь, именуемыми strCount и dwCount, было бы более очевидно, что вы использовали неправильную.

В качестве отступления eax должен в конечном итоге достигнуть нуля, так что ваш цикл печатине будет бесконечным - просто дольше, чем вы рассчитывали ...

...