num dw dup 5(?)
Это своеобразный синтаксис. Собирался ли вообще?
Обычный способ записать это - num dw 5 dup (?)
, поэтому счетчик повторений ставится перед оператором dup
.
О проблеме с печатью номера пользователя, о котором вы говорите в комментарии
Спасибо, я добавил $ и теперь он печатает
Я серьезно сомневаюсь, что печатается введенный номер и ничего больше, потому что вы используете функции DOS 09h и функцию DOS 0Ah неправильно!
Функция DOS.BufferedInput 0Ah ожидает получить от вас указатель в DS:DX
, который указывает на структуру с четко определенной структурой.
1-й байт должен указывать, насколько велика область памяти, которая начинается с 3-го байта.
Второй байт предназначен для DOS, чтобы сообщить вам, сколько байтов было введено.
Это пример, который позволит вводить 5 символов. Почему вы спросите, нужно ли мне тогда писать 6? Ну, DOS всегда добавляет байт возврата каретки (13) к введенным символам. Ваш счет в 1-м байте должен сделать это возможным.
num db 6, 0, 6 dup (0)
Поскольку действительные символы начинаются с num + 2
, это будет адрес, который вам нужно передать в функцию DOS.PrintString 09h.
И тут есть небольшая проблема $ -кончающихся символов. Просто замените байт возврата каретки (13) символом $.
xor bx, bx
mov bl, [num+1] ; The count that DOS gave to you
mov byte ptr [num+2+bx], '$'
mov dx, offset num+2
mov ah, 09h
int 21h
до
num 6, 0, 0, 0, 0, 0, 0, 0,
ввод
2 0 1 9
после
num 6, 4, 50, 48, 49, 57, 13, 0
печать
num 6, 4, 50, 48, 49, 57, 36, 0
^
DX