|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.05.2011, 14:29 | #1 |
Пользователь
Регистрация: 26.05.2011
Сообщений: 19
|
Функции 02 и 09 прерывания 21h ничего не выводят
Здравствуйте! Написал простенькую программу для чтения и вывода имени файла из корнемого каталога дискеты.
Код:
Пробовал и функцию 02 int 21h. Код:
|
26.05.2011, 16:16 | #2 |
Пользователь
Регистрация: 25.05.2011
Сообщений: 13
|
я не спец, но по ходу надо настроить сегментный регистр ds? и если не ошибаюсь то это .com программа?
|
26.05.2011, 18:42 | #3 |
Пользователь
Регистрация: 26.05.2011
Сообщений: 19
|
да, это COM программа, а зачем ds то настраивать?
|
26.05.2011, 18:50 | #4 |
Пользователь
Регистрация: 25.05.2011
Сообщений: 13
|
недавно резидент писал, строку на экран надо было выкинуть, при не настроенном ds выводился мусор, а после:
mov ax,cs mov ds,ax всё пучком! |
26.05.2011, 19:25 | #5 |
Пользователь
Регистрация: 26.05.2011
Сообщений: 19
|
не, не помогает... да ведь в COM программе все сегментные регистры и так настроены одинаково. Самое главное то, что в dx при вызове функции 02h значение первой буквы правильно записано, но ничего не выводится... А если в dx просто число какое-нибудь пихнуть(например, аски код той же буквы), то все выведется нормально. Не понимаю, как такое может быть.
|
26.05.2011, 19:50 | #6 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
имя файла не в юникоде случайно?
> Не понимаю, как такое может быть. для кода символа используется 1 байт (DL) а не 2 (DX). Опять же, похоже, что Цитата:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
26.05.2011, 21:15 | #7 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
Alex071, если я не ошибаюсь, в dl перед вызовом функции 2 int 13h должен быть указан номер диска: 0 - диск А, 1 - диск В и т.д.
|
26.05.2011, 21:17 | #8 |
Пользователь
Регистрация: 26.05.2011
Сообщений: 19
|
Нет, имя не в юникоде. dx нечайно написал, но в dl все равно попадает правильное значение - 53h (код 'T'), проверял в отладчике. Смысл в том, что если еще дополнительно написать mov dl,53h (т.е. значение dl как было 53h, так и остается) то все выведется.. Такое ощущение, что показывает, что сектор с дискеты прочитался, а на самом деле не прочиталось нефига. Программу выполняю на виртуальной машине и сектор читаю с виртуальной дискеты. Может, здесь ключ проблемы..?
Последний раз редактировалось Alex071; 26.05.2011 в 21:21. |
26.05.2011, 22:01 | #9 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> но в dl все равно попадает правильное значение - 53h (код 'T'), проверял в отладчике
> если еще дополнительно написать mov dl,53h хм.. тогда или отладчик врёт, или одно из двух. Осталось запустить что-то типа: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
27.05.2011, 00:13 | #10 |
Пользователь
Регистрация: 26.05.2011
Сообщений: 19
|
В отладчике строку пропускает, как и надо а если без него то не пропускает. Я в панике ))
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
резидентная программа (обработка функции 9h прерывания 21h) | Dimarik | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 25.02.2011 10:38 |
Ничего не пойму (Сокращенные функции) Язык С. | Wisher717 | Помощь студентам | 7 | 25.01.2010 21:49 |