![]() |
|
![]() ![]() ![]() |
|
SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
В этом симестре начали в универе изучать asm (Синтаксис Intel, компилятор TASM). Тут вот дали задание:
"Полугодовая информация о подписных изданиях по каждому подписчику имеет структуру: ФИО, участок доставки, адрес, количество выписанных изданий, список изданий (название, газета или журнал, месяцы, на которые оформлена подписка). Создайте файл, в который запишите ФИО подписчиков, оформивших подписку на наибольшее число изданий, независимо от количества месяцев." А вот то, что я понаписал:
Многое пробовал на asm чисто для ознакомления, да и на звание гуру asm тоже не претендую. =) Поэтому строго не судите, плиз. --- В коде я отметил, что возникает проблема при вызове функции DOS 3Fh, которая должна осуществлять чтение из устройства или файла. Файл открыт, дескриптор есть (в дебагере отлаживал - вроде все ОК с этим), но при вызове 3Fh в AX возвращается 05h, что означает: "Доступ запрещен". Подскажите, пожалуйста, в чем проблема и какой там доступ должен быть. Ибо входной файл 'C:\in.txt' присутсвует, он открывается, все права (на чтение, на запись) есть. Не пойму, в чем проблема. --- P.S.: Для запуска использую эмулятор DOS-BOX и DOS Emulator. Все это под линуксом, под виндой DOS-BOX криво работает почему-то. Отладчик стандартный - Turbo Debuger. Заранее спасибо. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
getData не рабочая: индексация по dx, что вообще не должно компилиться
при повторной попытке чтения(цикл continue) регистр ax уже не содержит номера функции чтения, а содержит два байта из буфера чтения, хотя читаем по одному. сравниваем эти два байта с LF(0ah), что выполнится только при условии, если в строке перед LF будет 0. вобщем, один сплошной глюк. |
|||
|
||||
SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
dumb,
Спасибо за помощь. 1) Про индексацию в DX - Все верно, уже исправил. =) 2) Про AX не усмотрел, спасибо еще раз. 3) Про 0Ah - а как же мне тогда считывать, если не по 1-му байту? По 2-а получается? Я правда не въезжаю. ![]() --- Собственно, возвращаясь с сабжу - а что же это за таинственная ошибка 05h - "Доступ запрещен" и как с ней бороться? ![]() Это сообщение отредактировал(а) SantaXP - 8.5.2008, 13:02 |
|||
|
||||
dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
.com-файл покажи(прикрепи к посту). из 16-битных регистров индексными могут быть только bx,bp,si,di.
читаешь из файла то ты по 1-му, а вот из массива берешь два символа сразу: mov ax,[буфер]. и сравниваешь эти два символа со значением 000Ah.
погоди-ка, а ты вообще в курсе, что регистр ah является старшей половинкой регистра ax?! примерно так:
ps. относительно общей логики работы кода говорить ничего не буду. по-хорошему, все надо переписать. |
||||
|
|||||
SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
dumb,
1) Про DX: Пардон, я просто неправильно Вас понял. Я изменил прошлый пост, но вы меня опередили. Уже убрал индексацию. =) 2) Про 0Ah врубился. 3) Про AH и AL вкурсе. =) Просто программа выходит с ошибкой уже на первом проходе цикла, когда значение AX ещё не испорчено. =( --- Пойду исправлять. |
|||
|
||||
SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
Все исправил - результат тот же. CF = 1, AX = 05h - "Доступ заперещен". =(
|
|||
|
||||
SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
Извиняюсь, что пишу 3-й пост подряд. Проблема решилась. Ошибка выскакивала из-за кода в самом начале программы:
Нужно убрать mov al,11b и тогда все работает. =) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |