Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2012, 03:45   #1
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию Загрузка второй программы(дискета)

Всем привет!
Есть программа, которая грузится с дискеты
Код:
[ORG 0x7C00]
_start: 
cli
;бла-бла-бла

MOV SI,start_msg
call print

MOV DH, 0 ;головка
MOV CH, 0 ;цилиндр
MOV CL, 2 ;номер сектора
MOV AL, 1 ;кол-во секторов


XOR BX, BX
MOV AX, 0x7E00
MOV ES, AX

MOV AH, 0x02 
INT 0x13           ; READ !!!

jmp 0x7E00
;бла-бла-бла

Вторая программа:
Код:
[ORG 0x7E00]


_start:
    XOR AX,AX
    MOV SI, msg
    call print
    
    jmp $
;бла-бла
первое сообщение выводится и всё.

ЗЫ запускаю так:
nasm -fbin -o <файл> <файл>
второй так же
dd if=/dev/zero of=disk.img bs=1024 count=1440
dd if=<файл1> of=disk.img conv=notrunc
dd if=<файл2> of=disk.img conv=notrunc seek=1
qemu disk.img

Последний раз редактировалось Sna1L; 25.01.2012 в 03:55.
Sna1L вне форума Ответить с цитированием
Старый 25.01.2012, 08:39   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)кто будет расширять первый сектор до 512 байт?(а то пишите второй подрят за первым)
2)кто будет ставить в нем загрузочную метку.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.01.2012, 14:43   #3
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Извиняюсь за задержку.
С размерами программы всё нормально. До 510 байта заполняется нулями, и последние 2 специальные. Т.е. вместо загрузки с дискеты можно вывести хелло ворлд и всё будет работать.
Sna1L вне форума Ответить с цитированием
Старый 30.01.2012, 15:17   #4
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

Код:
MOV DH, 0 ;головка
MOV CH, 0 ;цилиндр
MOV CL, 2 ;номер сектора
MOV AL, 1 ;кол-во секторов


XOR BX, BX
MOV AX, 0x7E00
MOV ES, AX

MOV AH, 0x02 
INT 0x13           ; READ !!!
1. где устанавливается dl в 0?
2. MOV AX, 0x7E00 затирает al ...
3. cs в первой проге равен 0? если нет то во второй org 7e00 неправильно

удачи
alexey2 вне форума Ответить с цитированием
Старый 04.02.2012, 16:43   #5
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

2alexey2, ошибку с АХом исправил.
dl в ноль установил.
Не заработало
Не могли бы Вы поподробнее рассказать, про третий пункт? И зачем обнулять dl я тоже не понял
Sna1L вне форума Ответить с цитированием
Старый 04.02.2012, 16:49   #6
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

cmp ax,0 дает единичку
Sna1L вне форума Ответить с цитированием
Старый 04.02.2012, 17:16   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

cmp не меняет регистр.

нужно mov ax,7E01h уж тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.02.2012, 01:29   #8
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Вы не поняли. Я отвечал посту выше.
Цитата:
3. cs в первой проге равен 0? если нет то во второй org 7e00 неправильно
Проверка в начале программы
mov ax,cs
cmp ax,0
дает тру. зф=1
Sna1L вне форума Ответить с цитированием
Старый 06.02.2012, 09:56   #9
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

dl в 0 - означает что выполнять чтение с дискеты! :-)
про cs я просто спросил, вдруг переустанавливал, по умолчанию он и должен быть в 0. Так что тут все ок.
У меня сомнения по поводу print-а. Можно попробовать напечатать символ по месту, для проверки что вторая прога вообще загружается и запускается.
Во второй файл попробуй
Код:
mov ax,0a41h
xor bx,bx
mov cx,1
int 10h
должен вывести символ 'А' по текущему курсору.

И еще, при чтении дискет неплохо бы проверять статус операции (в cf). При ошибках делают ресет (функция 0, 13h) и повтор чтения
alexey2 вне форума Ответить с цитированием
Старый 06.02.2012, 12:04   #10
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

Код:
XOR BX, BX
MOV AX, 0x7E00
MOV ES, AX
в первый раз не заметил...
загрузка будет произведена по адресу 7E00:0, а нужно по 0:7E00, т.е. по 7E0:0. Вот
alexey2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Второй блок программы Delphi Начинающий програм Помощь студентам 0 09.12.2011 15:17
Запретить второй запуск программы. Приложение без окон Lauri Общие вопросы Delphi 18 05.07.2011 15:48
Загрузочная дискета ??? spamer Общие вопросы Delphi 14 08.02.2009 22:07
Lingvo 11. Установочная дискета. Возаращаемся в 20-й век ))) Altera Свободное общение 8 06.08.2008 21:11