Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не записывает в файл, почему? 
V
    Опции темы
Rickert
  Дата 7.1.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Код

CSEG    segment
org    100h
assume    cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG

Begin:
    mov ax, 3D02h
    mov dx, offset String1
    int 21h;открыл для чтения/записи

    jc errorMsg
    jnc noErrorMsg; проверил на ошибку

    mov fileHandle, ax

    mov bx, ax;сохранил номер файла
    mov ah, 40h
    mov cx, 0006h
    mov dx, offset toWrite
    int 21h;записал

    mov bx, fileHandle
    mov ah, 3Eh
    int 21h;азкрыл

    int 20h;вышел из программы

    errorMsg proc
        push ax
        mov ax, 0900h
        mov dx, offset errorString
        int 21h
        pop ax
        ret
    errorMsg endp

    noErrorMsg proc
        push ax
        mov ax, 0900h
        mov dx, offset noErrorsString
        int 21h
        pop ax
        ret
    noErrorMsg endp


    String1 db "file.txt", 0
    errorString db "There is no such file$"
    noErrorsString db "There is no such thing as errors!$"
    fileHandle dw 0
    toWrite db "Angelheaded$"

    CSEG ends
end Begin

Не могу понять почему программа не пишет в файл.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
anwe
Дата 7.1.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 8
Всего: 23



Rickert, у тебя ошибка передачи управления. Дело в том, что jmp и команды подобные ей, а именно условного перехода, в отличие от call передает управление на другую точку программы без сохранения адреса возврата. Вот и у тебя, если ошибки нет (а ее, судя по коду, нет) управление передается на метку noErrorMsg, которая не смотря на то, что ты и обозвал ее как процедуру, заканчиваясь, не возвращается в основные строки.
Уж если тебе и надо выдать сообщение, что файл открылся без ошибки то просто сделай так:
Код

Begin:
    mov ax, 3D02h
    mov dx, offset String1
    int 21h;открыл для чтения/записи

    jc errorMsg
;    jnc noErrorMsg; это убрать
    mov fileHandle, ax
    mov bx, ax;сохранил номер файла
;а здесь пропиши строки из noErrorMsg push/pop уже не потребуются
        mov ax, 0900h
        mov dx, offset noErrorsString
        int 21h
    mov ah, 40h

И еще, наперед, длина строки у тебя длинее, нежели 6, что ты заносишь в cx. Она обрежется.
PM MAIL   Вверх
Rickert
Дата 7.1.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Цитата(anwe @  7.1.2007,  22:00 Найти цитируемый пост)
Rickert, у тебя ошибка передачи управления. Дело в том, что jmp и команды подобные ей, а именно условного перехода, в отличие от call передает управление на другую точку программы без сохранения адреса возврата. Вот и у тебя, если ошибки нет (а ее, судя по коду, нет) управление передается на метку noErrorMsg, которая не смотря на то, что ты и обозвал ее как процедуру, заканчиваясь, не возвращается в основные строки.
Уж если тебе и надо выдать сообщение, что файл открылся без ошибки то просто сделай так:

Ага, всё верно, я тоже дотумкал, но уже позднее созданной темы smile
Спасибо, всё равно!
Цитата(anwe @  7.1.2007,  22:00 Найти цитируемый пост)
И еще, наперед, длина строки у тебя длинее, нежели 6, что ты заносишь в cx. Она обрежется. 

Ага, на то и был расчёт smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.