Page 3 of 10
Re: ряд вопросов по FASM
Posted: Tue Dec 20, 2011 1:16 am
by Mario
В общем объясняя на пальцах - найди и скопируй файл struct.inc в директорию со своим файлом, который ты компилируешь.
Re: ряд вопросов по FASM
Posted: Thu Mar 22, 2012 2:09 pm
by Стас
Могу посоветовать из свежего, книга "Аблязов Р.З. - Программирование на ассемблере на платформе x86-64 - 2011". Там и учебник фасма и разбор использования апика с его 24 и более аппаратными прерываниями и разбор работы с несколькими процами. Я перевёл пример на загрузчик с комавского, было интересно.
Posted: Sun Jun 24, 2012 12:35 am
by punk_joker
Дабы не создавать еще одну тему, спрошу сдесь. В общем я недавно только начал изучать FASM. Следую урокам и изучая основы пишу пока что 16-битные програмки под DOS. Когда дошел до мат. операций, возник такой вопрос, как узнать значение переменной в результате определенных вычислений? Т.е как понять, что программа работает именно так как нужно. Имеется Turbo Debugger.
Re:
Posted: Sun Jun 24, 2012 4:47 am
by Rock_maniak_forever
punk_joker wrote:Когда дошел до мат. операций, возник такой вопрос, как узнать значение переменной в результате определенных вычислений? Т.е как понять, что программа работает именно так как нужно. Имеется Turbo Debugger.
Ну я лично, знаю только три способа:
1. Отладка в голове.
2. Отладка в отладчике (получая дамп памяти с переменной(ными)).
3. Если проверить работу программы первыми двумя способами невозможно или неудобно, то можно сделать проверку результата, кодом индикатором (также, как делается в радиоэлектронике или химии).
P.S. Для отладки в отладчике, есть очень полезная команда
int3, кторая помогает сделать остановку выполнения кода, на заданном участке. Напиши её в исходнике, откампилируй программу, запусти отладчик и нажми
g. Команда выполнится, ровно до того участка кода, где находится команда
int3.
Posted: Sun Jun 24, 2012 9:57 pm
by punk_joker
Rock_maniak_forever, насчет второго способа, можно подробней?
Re: ряд вопросов по FASM
Posted: Sun Jun 24, 2012 11:00 pm
by SoUrcerer
А это уже вопрос по turbo debugger. Скорее всего, он описан в справке и многочисленных учебниках. Turbo debugger - далеко не единственный отладчик, кстати сказать.
Posted: Sun Jun 24, 2012 11:06 pm
by punk_joker
SoUrcerer, чтож, порыскаю в нете. У меня есть еще OllyDbg, но он не хочет работать с досовскими 16-биными программами.
Re: ряд вопросов по FASM
Posted: Mon Jun 25, 2012 1:21 am
by Rock_maniak_forever
Оладчиков под DOS, существует не мало.
1.
Debug (находится в Wind'е) (самый простой, без наворотов) (документирован лучше, чем остальные отладчики).
2.
AFD Pro (Advanced Fullscreen Debug Pro) (считается лучшим под DOS, но его описания, я нигде не встречал).
3.
CodeView (Очень тяжёлый ИМХО).
4.
Turbo Debugger (тоже очень тяжёлый ИМХО).
5.
Emu8086 (компилятор и отладчик, одновременно, но имеет свой синтаксис) (довольно интересная прога, но всё описание на Английском).
Советую начать с Debug'а, так как по программированию с его использованием, есть куча статей, с великолепным описанием, ИМХО.
Например (там всё подробно описано):
a)
Сам себе компилятор (или руководство по мазохизму для дзенствующих)
b)
Введение в машинный код.
c)
DZebug: руководство юZверя.
d)
Программирование на Ассемблере под DOS.
Правда, Debug немного неудобный, но - тяжело в учении, легко в бою. Я сам с него начинал.
Ну, а если ты всё таки хочешь использовать TD, то тебе
сюда.
Да, чуть не забыл, есть ещё
Калашников, там в уроках, CodeView и ещё что-то используетя.
Ну вообщем, думай сам.
Re: ряд вопросов по FASM
Posted: Mon Jun 25, 2012 8:20 am
by XVilka
я бы еще добавил довольно неплохой отладчик от OpenWatcom, тоже под ДОС. Отлаживает как ассемблерные программы, так и Сишные.
Re: ряд вопросов по FASM
Posted: Tue Oct 30, 2012 3:13 pm
by Unduing
Увидел статью
Барьеры доступа к памяти в Linux
Интересно а есть какие либо проблемы доступа памяти в fasm и в Kolibri в частности?
Re: ряд вопросов по FASM
Posted: Tue Oct 30, 2012 5:23 pm
by CleverMouse
Unduing, Колибри рассчитана исключительно на x86, а в x86 аппаратно гарантируется strong memory ordering. За исключением специальных SSE-инструкций типа movnt*. Подробности - в третьем томе мануалов Intel, 8.2 Memory Ordering. На Linux макросы барьеров раскрываются просто в инструкции компилятору, чтобы сам компилятор не переупорядочивал слишком много - что, естественно, неактуально для fasm.
Re: ряд вопросов по FASM
Posted: Tue Oct 30, 2012 5:51 pm
by Unduing
Ясно.
Т.е. все написанное в статье связано с оптимизацией компилятора и работой ядра.
А в одноядерном x64 могут возникнуть проблемы?
Re: ряд вопросов по FASM
Posted: Tue Oct 30, 2012 8:06 pm
by CleverMouse
x86_64 архитектурно очень похож на x86, в том числе в этом месте.
Проблемы могут возникнуть везде и всегда. Strong memory ordering гарантирует, например, что в коде
попадание значения в [eax] не может осуществиться "раньше" попадания значения в [eax+4] ни с какой точки зрения, включая параллельные ядра и процессоры. Но всегда, даже на насквозь однопроцессорной машине, возможно переключение потоков именно в момент времени между приведёнными двумя инструкциями, и новый поток может сильно удивиться, увидев несогласованные значения в [eax] и [eax+4].
Re: ряд вопросов по FASM
Posted: Thu Jul 11, 2013 3:10 pm
by punk_joker
Начал разбираться с работой с ini используя библиотеку libini. За основу взял ассамблерную версию job (сорци для удобства прилагаются). Кое с чем уже разобрался, непойму только как вывести данные из структуры на экран, в этом собственно и вопрос.
Re: ряд вопросов по FASM
Posted: Thu Jul 11, 2013 7:28 pm
by Asper
Структура виртуальная.
Считаем количество джобов, указанное в файле и выделяем необходимый размер памяти
Spoiler:
Code: Select all
; Get jobs number
invoke ini_get_int, ini_path, aMain, aJobsNum, 0
;and eax, 0xFF
test al, al
jz close_app
mov [jobs_num], al
imul eax, JOB.sizeof
mcall 68, 12, eax ; Get memory for Jobs
mov [Jobs], eax
А потом забиваем выделенную память данными джобов, прочитанными из файла. Каждый проход по циклу, это один элемент типа
JOB в памяти.
Spoiler:
Code: Select all
mov edi, [Jobs]
movzx ecx, byte [jobs_num]
.get_next_job:
movzx eax, byte [jobs_num]
sub eax, ecx
call set_job_section_name
push ecx
; Clear done flag
xor al, al
stosb
; Get job TimeH
invoke ini_get_int, ini_path, aJob, aTimeH, -1
cmp eax, -1
je .out1
stosb
; Get job TimeM
invoke ini_get_int, ini_path, aJob, aTimeM, 0
stosb
; Get job application path and param
invoke ini_get_str, ini_path, aJob, aApp, edi, PATH_MAX_CHARS, 0
add edi, PATH_MAX_CHARS
invoke ini_get_str, ini_path, aJob, aParam, edi, PATH_MAX_CHARS, 0
add edi, PATH_MAX_CHARS
pop ecx
dec ecx
test ecx, ecx
jnz .get_next_job
ret
.out1:
pop ecx
sub [jobs_num], cl
ret
В итоге указатель
Jobs, указывает на массив элементов типа
JOB.
Соответственно выводить данные ты можешь либо непосредственно в цикле загрузки джобов в память, либо после загрузки адресуясь через указатель
Jobs.
punk_joker wrote:Кое с чем уже разобрался, непойму только как вывести данные из структуры на экран, в этом собственно и вопрос.
На экран куда? У программы своего окна нет.
board,
@notify, ... ?