powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [asm]сравнение
6 сообщений из 6, страница 1 из 1
[asm]сравнение
    #34978876
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста.
есть:
amount_out dw ?
amount_in dw ?

сам код:
mov ah, 3Fh
mov bx, 0
mov cx, 80
mov dx, amount_in
int 21h

mov ah, 3Fh
mov bx, 0
mov cx, 80
mov dx, amount_out
int 21h

mov dx, amount_in
cld
cmp dx, amount_out

jbe good

mov ah, 40h
mov bx, 1
mov cx, length7
mov dx, offset message7; Error!
int 21h
ret

good: ret

Если значения указывать явно, а не вводить с клавиатуры, то все работает корректно.
Как сделать правильное сравнение при вводе с клавиатуры (сравнение беззнаковых целых чисел)?
...
Рейтинг: 0 / 0
[asm]сравнение
    #34979202
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДОС ! чёрной пеленой экран наполнил чистый ДОС ! =)))

ДональдакКак сделать правильное сравнение при вводе с клавиатуры (сравнение беззнаковых целых чисел)?ёксель-моксель ! давай начнём с того что при нажатии пользователем на клавиши '2' и '3' в компьютер поступает не число 23, а два кода нажатых клавишь - код клавиши '2' и код клавиши '3' =) которые затем конвертируются по табличке в ASCII представление числа '2' и числа '3'. Другими словами, при чтении из файла стандартного ввода (функция 3Fh дескриптор файла - 0) в ответ на нажатие клавиши '2' и клавиши '3' ты прочитаешь два байта: 32h и 33h - это ASCII представление цифр 2 и 3 соответственно. Причём ты запросил у функции чтения из файла прочитать аж 80 байт, хотя буфер у тебя - только на два (dw), и так как amount_out в памяти перед amount_in - то при переполнении (при нажатии третей клавиши и всех последующих при вводе amount_out) - amount_in будет успешно затёрт третим и последующими байтами строки amount_out

Ещё учти что нажатие Enter транслируется в два байта - 0Dh 0Ah (перевод строки и каретки)

ну и наконец у тебя ошибка: mov dx, amount_in означает "записать в dx два байта взятых _по адресу_ с именем amount_in", а тебе нужно поместить в dx сам адрес, а не содержимое по адресу. соответственно исправь либо на mov dx, offset amount_in либо на lea dx, amount_in ну и для amount_out аналогично исправь.

вообщем, что бы решить твою задачу - тебе нужно считаную строку преобразовать в число. :)


даа.... ёшкин кот... давно это было %)

--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
[asm]сравнение
    #34979484
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Буду разбираться.
...
Рейтинг: 0 / 0
[asm]сравнение
    #34979740
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем-то разобрался, а как мне строку преобразовать в число?
...
Рейтинг: 0 / 0
[asm]сравнение
    #34979799
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дональдака как мне строку преобразовать в число?получить последний символ строки, по его коду вычислить цифру, запомнить её, получить _пред_последний символ строки, по его коду вычислить цифру, умножить её на _10_ + прибавить к запомненой и запомнить, получить _предпред_последний символ строки, по его коду вычислить цифру, умножить её на _100_ + прибавить к запомненой и запомнить... повторять увеличивая множитель в 10 раз пока не кончится строка или пока не будет переполнения, если переполнение - сообщить об ошибке "слишком большое число - не влазиет в беззнаковое целое" :)

цифры в ASCII кодировке идут в такой последовательности: '0123456789'
и имеют ASCII коды соответственно: 30h 31h 32h 33h 34h 35h 36h 37h 38h 39h

следовательно, что бы получить цифру по её ASCII коду нужно от ASCII кода вычесть 30h

умножается на 10 в степени n так как у нас - десятичная система исчисления и как мне кажется ты видимо будешь вводить число с клавиатуры в строку именно в ней, а не в восмеричной или шестнадцатиричной :)

ps: есть и другие алгоритмы конвертирования - но их ищи сам :)
...
Рейтинг: 0 / 0
[asm]сравнение
    #34979816
Дональдак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [asm]сравнение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]