![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 03.11.2010
Сообщений: 68
|
![]()
Здравствуйте.
Пишу загрузчик, пока на первой стадии, разбираюсь с прерыванием Int 13. И кажется, обнаружил одну особенность - он не может читать в буффер памяти с большим адресом. Вот, хотел спросить, это я напортачил или правда такая беда имеет место быть? Ниже привожу код. Он делает следующее: преводит проц в анрил-режим, читает самый первый сектор в память - если удачно, то выводит смайлик, если неудачно, то зацикливается. Код:
![]() PS Вот в dw 120000h,0 ; segment ![]() 120000h - не хочет читать а в 12000h - читает... Последний раз редактировалось Celestia; 20.02.2011 в 19:28. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
![]()
тип dw может быть только в пределах 0-ffffh
даже когда пишете 12000h - программа читает совсем не в этот адрес. Скорей всего в 2000h (обрезается старший разряд числа), а при 120000h это даст 0. По адресу 0:0 в реальном режиме находится таблица векторов прерываний. В лучшем случает такая попытка вызовет ошибку, в худшем - зависание или перезагрузку. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 03.11.2010
Сообщений: 68
|
![]()
Спасибо большое) Значит как мне получается надо оформить пакет чтобы читать как надо?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
читайте в первый метр памяти, а потом копируйте куда надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#5 |
http://www.asmcode
Пользователь
Регистрация: 16.11.2011
Сообщений: 15
|
![]()
Если сталкивались из этого же подскажите почему не читается сектор
с флешки. Слово Helo пишется, код на фасме use16 org 07C00h mov ah,42h mov dl,80h mov si,lba int 13h ;прерывание mov ah,14 mov bx,H mov al,[bx] int 10h inc bx mov al,[bx] int 10h inc bx mov al,[bx] int 10h inc bx mov al,[bx] int 10h jmp 0000:8600h ret H db 'Helo' lba db 10h db 00h dw 0001h dd 00008600h dq 0000000000000002h rb 510-($-7c00h) db 0x55, 0xAA |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
кросс постинг не в почете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Int13h 42h CDROM Read = ? | Celestia | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 20.02.2011 18:15 |
Порты 42H, 43H, 61H | Strogg | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 20.03.2009 18:24 |
Вычислить предел последовательности | Dartchuwak | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 08.01.2009 21:21 |
байт режима адресации | fermat_c | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 10.04.2008 15:39 |