|
|
|
[asm]сравнение
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста. есть: 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 Если значения указывать явно, а не вводить с клавиатуры, то все работает корректно. Как сделать правильное сравнение при вводе с клавиатуры (сравнение беззнаковых целых чисел)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2007, 17:11 |
|
||
|
[asm]сравнение
|
|||
|---|---|---|---|
|
#18+
ДОС ! чёрной пеленой экран наполнил чистый ДОС ! =))) ДональдакКак сделать правильное сравнение при вводе с клавиатуры (сравнение беззнаковых целых чисел)?ёксель-моксель ! давай начнём с того что при нажатии пользователем на клавиши '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 аналогично исправь. вообщем, что бы решить твою задачу - тебе нужно считаную строку преобразовать в число. :) даа.... ёшкин кот... давно это было %) -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2007, 19:53 |
|
||
|
[asm]сравнение
|
|||
|---|---|---|---|
|
#18+
Спасибо! Буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 06:24 |
|
||
|
[asm]сравнение
|
|||
|---|---|---|---|
|
#18+
В чем-то разобрался, а как мне строку преобразовать в число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 15:48 |
|
||
|
[asm]сравнение
|
|||
|---|---|---|---|
|
#18+
Дональдака как мне строку преобразовать в число?получить последний символ строки, по его коду вычислить цифру, запомнить её, получить _пред_последний символ строки, по его коду вычислить цифру, умножить её на _10_ + прибавить к запомненой и запомнить, получить _предпред_последний символ строки, по его коду вычислить цифру, умножить её на _100_ + прибавить к запомненой и запомнить... повторять увеличивая множитель в 10 раз пока не кончится строка или пока не будет переполнения, если переполнение - сообщить об ошибке "слишком большое число - не влазиет в беззнаковое целое" :) цифры в ASCII кодировке идут в такой последовательности: '0123456789' и имеют ASCII коды соответственно: 30h 31h 32h 33h 34h 35h 36h 37h 38h 39h следовательно, что бы получить цифру по её ASCII коду нужно от ASCII кода вычесть 30h умножается на 10 в степени n так как у нас - десятичная система исчисления и как мне кажется ты видимо будешь вводить число с клавиатуры в строку именно в ней, а не в восмеричной или шестнадцатиричной :) ps: есть и другие алгоритмы конвертирования - но их ищи сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2007, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1345676]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 382ms |

| 0 / 0 |
