Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с FASM

78K
23 марта 2013 года
GCSoft
73 / / 10.03.2013
Нужно осуществить выполнение Bin программы из программы на FASM.
326
23 марта 2013 года
sadovoya
757 / / 19.11.2005
Надоел уже!
78K
23 марта 2013 года
GCSoft
73 / / 10.03.2013
Ну дак как?
252
24 марта 2013 года
koderAlex
1.4K / / 07.09.2005
я вам уже объяснял как .
вы уже составили алгоритм ?

а писать код за вас никто не будет .
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
Я писал примерно такой код:
Код:
use16
org 100h
jmp main
msg db 'Windows','$'
main:
mov ah,9
mov dx,msg
int 21h
file 'example.bin'
mov ax,4c00
int 21h
 
Код:
org 0h
jmp main
msg db 'Bin is started!','$'
main:
mov ah,9
mov dx,msg
int 21h
mov ax,4c00
int 21h
И он не пашет!
252
24 марта 2013 года
koderAlex
1.4K / / 07.09.2005
то есть алгоритма нет .
кажется вы вообще плохо понимаете как работает компьютер .
если человек умеет писать программы это ещё не значит , что он программист . )
в том коде первичного загрузчика , что я вам дал показано как загружается бинарник и как передаётся ему управление , только вы ничего не поняли .
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
Я не смогу весь код сюда вылить) У вас скайп или VK есть?
252
24 марта 2013 года
koderAlex
1.4K / / 07.09.2005
секретные разработки ? :)
архивируете и присобачиваете к сообщению .
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
Ладно так расскажу! Есть вообщем такой код:
 
Код:
macro align value { db value-1 - ($ + value-1) mod (value) dup 0}
HEADS = 1
SPT = 32
Begin:
        file "boot.bin",512
        file "kernel.bin"
        align 512
        align HEADS*SPT*512
boot.bin выглядит примерно так:
Код:
use16
 org 7c00h
 jmp start
 include 'libs\if.inc'
 include 'libs\dos.inc'
 start:
 xor eax, eax
 xor esi, esi
 xor edi, edi
 mov ds, ax
 mov es, ax
 mov bp, 0x7c00
 mov ax, 0x0003
 cls
 print help
 input_var symbol
 cmp [symbol],'y'
 jz con
 jnz en
 con:
 jmp far 0h:7e00h
 help           db 'ekDOS BootLoader',0Ah,0Dh
                db 'Do you want to run ekOS?',0
 symbol         db 0,0
 msg            db 'Start from hardDrive...',0ah,0dh,0
 en:
 print msg
 shutdown
 times(512-2-($-07c00h)) db 0
 db 055h,0AAh
а kernel.bin выглядит так:
 
Код:
org 7e00h
 jmp start
 include 'libs\if.inc'
 include 'libs\dos.inc'
msg 'Kernel is Started!',0ah,0dh,0
 start:
print msg
все работает зашибись, но как добавляю в самый первый код фразу
file 'example.bin'
align 512
и в kernel.bin добавляю
call far 0h:0700h
то нефига не происходит!
Код example.bin
 
Код:
org 700h
 jmp start
 include 'libs\if.inc'
 include 'libs\dos.inc'
msg 'Hello World',0ah,0dh,0
 start:
 print msg
ret
252
24 марта 2013 года
koderAlex
1.4K / / 07.09.2005
объясните словами , что у вас происходит в первом коде .
и что вы с этим кодом дальше делаете .
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
Первый код объединяет в один образ! Затем через UltraISO засовываю в бутсектор диска. Затем эмулирую в VBOX
252
24 марта 2013 года
koderAlex
1.4K / / 07.09.2005
так в бутсектор или таки в досе запускаете ? по инклюдам видно , что в досе . и "Я то из MS-DOS пробую то)" - ваши слова . откуда бутсектор взялся ?
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
В бутсектор! Я так запускаю без дополнений все пашет)
78K
24 марта 2013 года
GCSoft
73 / / 10.03.2013
Ладно, задачка попроще: автономно в формате COM эта программа выдает сообщение, что запущена!
 
Код:
org 100h
jmp begin
msg2      db 'Wellcome',0ah,0dh
include 'libs\if.inc'
include 'libs\api.inc'
begin:
ek_print msg2
ret
а как компю со смещение 150 и втыкаю в программу
 
Код:
org 100h
jmp main
include 'libs\if.inc'
include 'libs\dos.inc'
msg       db 'Wellcome',0
main:
print msg
file 'hello.bin'
int 20h
то сообщение не выводится ни одно из той программы! В чем проблема? ОС MS-DOS...
78K
25 марта 2013 года
GCSoft
73 / / 10.03.2013
Я пробовал по другому но результат тот же!
252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
Цитата: GCSoft
В бутсектор! Я так запускаю без дополнений все пашет)


так пашет или

Цитата: GCSoft

и в kernel.bin добавляю
call far 0h:0700h
то нефига не происходит!


вы бы уж определились .

252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
Цитата: GCSoft
В бутсектор! Я так запускаю без дополнений все пашет)


тут телепатов нет разгадывать что , когда и как вы запускаете .

252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
Цитата: GCSoft

а как компю со смещение 150 и втыкаю в программу
 
Код:
org 100h
В чем проблема? ОС MS-DOS...


какое-какое смещение ? 150 при org 100h ? в сом формате ? :)
программирование на асме явно не для вас . может лучше дельфи или билдер ? :)

252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
Цитата: GCSoft
Ладно, задачка попроще: ...


занятно . у меня ангельское терпение , но оно только что кончилось .

78K
25 марта 2013 года
GCSoft
73 / / 10.03.2013
Ладно напишу как не работает:
 
Код:
-----hello.bin----------
org 150h
jmp begin
msg2      db 'Wellcome',0ah,0dh
include 'libs\if.inc'
include 'libs\api.inc'
begin:
ek_print msg2
ret
 
Код:
------example.bin-------------
org 100h
jmp main
include 'libs\if.inc'
include 'libs\dos.inc'
msg       db 'Wellcome',0
main:
print msg
file 'hello.bin'
int 20h
Вот так. Вроде если использовать функцию ввода работает, а как вывести известную переменную не работает(
252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
file 'hello.bin' - вы содержимое одного файла впихиваете в другой файл .
смещение может совпасть , а может и не совпасть . у вас не совпадает - потому и не работает .
78K
25 марта 2013 года
GCSoft
73 / / 10.03.2013
а как сделать чтобы совпало? И можно на примере этого...
252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
скомпилировать это :
 
Код:
org 100h
 jmp main
 include 'libs\if.inc'
 include 'libs\dos.inc'
 msg       db 'Wellcome',0
 main:
 print msg
посмотреть размер . смещение должно быть больше этого размера +100h .
к примеру размер получился 128 байт , тогда смещение в hello.asm должно быть больше или равно 128 + 100h=180h .
возьмём 200h , тогда код такой :

 
Код:
-----hello.bin----------
 org 200h
 jmp begin
 msg2      db 'Wellcome',0ah,0dh
 include 'libs\if.inc'
 include 'libs\api.inc'
 begin:
 ek_print msg2
 ret
Код:
------example.bin-------------
org 100h
jmp main
include 'libs\if.inc'
include 'libs\dos.inc'
msg       db 'Wellcome',0
main:
print msg
times (200h-1-$) db 90h
org 200h
file 'hello.bin'
int 20h
вообще-то инклюдирование кода и загрузка файла - две большие разницы )
78K
25 марта 2013 года
GCSoft
73 / / 10.03.2013
В последнем коде ошибка! В 9-ой строке!
252
25 марта 2013 года
koderAlex
1.4K / / 07.09.2005
я показал ПРИМЕР . я не сказал что это надо компилировать .
ошибка из-за того что размер , а значит и смещение у вас БОЛЬШЕ .

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог