Вопрос № 126882: Здравствуйте, имеется следующее задание: Необходимо ввести в консоли с клавиатуры любое (не менее 3-х знаков) число и выполнить с ним любое арифметическое действие. Например прибавить 10
Имеется буфер
buf db 100 dup (?)
введеные символы ч...Вопрос № 126906: Здравствуйте!
У меня вопрос следующего характера:
придумал себе следующую задачу:
Сделать папку, в которой находится программа, скрытой. В моем примере это папка c:1pp
-для начала воспользовался 47h-функцией, чтобы получить текущее ...
Вопрос № 126.882
Здравствуйте, имеется следующее задание: Необходимо ввести в консоли с клавиатуры любое (не менее 3-х знаков) число и выполнить с ним любое арифметическое действие. Например прибавить 10
Имеется буфер
buf db 100 dup (?)
введеные символы читаются через функцию
push 0 offset ilen 80 offset buf ihnd
call ReadConsoleA
Когда я buf переношу в eax:
mov eal, buf
И просто к ней добавляю например число 10
add eax, 10
То при выводе eax выводится не совсем то что должно получиться...
Подскажите как решить данную проблему?
Отправлен: 11.03.2008, 23:46
Вопрос задал: Pesick (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 7)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Pesick! Необходимо преобразовать введенную числовую строку в число. Например, так: mov ecx,ilen ; длина введенной строки jecxz ret_number ; проверим на пустую строку xor edx,edx ; здесь будем накапливать сумму xor eax,eax ; здесь будет очередной знак, для удобства обнулим старшие биты регистра lea esi,buf ; адрес числовой строки convert_num_loop: lodsb ; прочитаем очередной знак cmp al,'0' ; если встретится не цифра, то выходим с текущим значением jb
ret_number cmp al,'9' ja ret_number sub al,'0' ; сделаем из символа число imul edx,10 ; сдвигаем на один десятичный разряд add edx,eax ; добавляем очередной разряд loop convert_num_loop ; зацикливаем ret_number: mov eax,edx ; искомое число
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 12.03.2008, 14:46 Оценка за ответ: 5
Вопрос № 126.906
Здравствуйте!
У меня вопрос следующего характера:
придумал себе следующую задачу:
Сделать папку, в которой находится программа, скрытой. В моем примере это папка c:1pp
-для начала воспользовался 47h-функцией, чтобы получить текущее оглавление.
На нулевой адрес мне вернулось 1pp c ASCII нулем на конце.
-потом воспользовался 43h-функцией, возвращается ошибка "путь не найден".
Т.е. такой путь как 1pp не нравится.
Хотя в справке сказано, что если диск и/или путь опущены, они принимаются по умолчанию.
Я так подумал, что диск задаю текущий (по умолчанию), а путь находится по нулевому адресу.
Уж больно так удобно. А так получается, что надо еще теперь определить букву диска.
Т.е. 19h-функция вернет нам цифру, согласно ей можно высчитать букву, и, в конце концов, загрузить полученный (полный) путь,
например, в переменную path (или на нулевой адрес). То, что у меня в примере закомментировано это естественно работает.
Кстати, я не сильно хулиганю, сохраняя на нулевой адрес?
И если можно второй вопрос:
В атрибуте файле, среди таких как «только чтение / спрятанный / и т.д.», есть метка тома. Что это такое? Это же по терминологии вроде бы как к диску относится, при чем здесь атрибут файла?
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Бартосик Феликс Михайлович! Давай подумаем, что получилось... 1)Мы находимся в папке 1pp 2)Затем пытаемся изменить атрибут папки 1pp. Только вот вопрос: каков полный путь искомой папки? Ответ: 1pp1pp !!! Так как функция "пляшет" от текущей папки... Вот если бы параметром было 1pp !!! Естественно, имеем результат - "путь не найден".
Вообще говоря, чтобы получить доступ к текущей папке, совсем необязательно знать ее путь, достаточно указать для ф-и
43h путь '.'
Насчет хулиганства с PSP... В ХР проблем никаких. А вот в чистом ДОС-е есть сомнения. Я в свое время под буфер частенько использовал адресное пространство PSP, но только начиная с 80h... Можно проверить, например, загрузив ДОС с дискеты. Оставляю для самостоятельной проверки :)
И, последнее, насчет атрибутов: Дело в том, что для метки тома, имени файла, директории используется запись в директории одного и тог
о же формата. Отличаются только байтом атрибутов.
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 12.03.2008, 10:27 Оценка за ответ: 5 Комментарий оценки: относительно текущей папки все понял - большое спасибо! Особенно понравилась идея с точкой - знал ведь, а выскочило из головы. С 47 функцией тоже понял - она возвращает "1\\pp", а нужен путь "\\1\\pp".
Вот только с атрибутом "метка тома" все равно не понял, даже от "c:" возвращается атрибут 16h