3 года назад

Помогите! Не могу в ASMе вызвать функцию из C!

вот файл ASM ( FASM ) : fomat ELF public _stat ext keel_mai sectio ".text" executable _stat: movzx edx, dl push edx push esi push ebx lgdt [gdt] call keel_mai @@: ;cli ;hlt jmp @b sectio ".data" witable gdt: dq 0
dq 0x00CF9A000000FFFF dq 0x00CF92000000FFFF gdt: dw $ - gdt dd gdt А вот C с функцией к которой нужно обратиться: typedef stuct { usiged log log base; usiged log log size; } BootModuleIfo; void keel_mai(cha boot_disk_id, void *memoy_map, BootModuleIfo *boot_module_list) { cha *scee_buffe = (void*)0xB8000; cha *msg = "Hello wold!"; usiged it i = 24 * 80; while (*msg) { scee_buffe[i * 2] = *msg; msg++; i++; } } Вроде бы все ок. Имена совпадают. Но вот что выдает линкер на команду" ld -T scipt.ld -o bi\keel.bi sc\keel\mai.o sc\boot\statup.o " ...I fuctio 'stat': ...udefied efeece to 'keel_mai' ...*** [all] Eo 1

ProWersus (Гость) Assembler
3

Assembler: Помогите! Не могу в ASMе вызвать функцию из C!

8 месяцев назад ASM - расширение функции своим кодом

Делаю вставку собственного куска кода в функцию формирования отладочных сообщений - Msg.Назначение моей вставки - писать отладочное сообщение(содержимое DstBuf) в файл c:\paaoid.log,при каждом вызове функции Msg. Для вставки в dll добавляется новая секция NewSect, с размерностью == 1000,защита отсутствует.ПРОБЛЕМА: После компилляции программа не запускается.Помогите дописать мою вставку кода до рабочего состояния. Подозреваю, что нужно привести стэк в, нужное состояние, как это сделать я не знаю...

Илья Кочетков (Гость) 1 ответ
3
9 месяцев назад c++ или ассемблер - что изучать? помогите выбрать

работал на пхп, но появилась нужда освоить более быстрый язык, необходимо разрабатывать очень нагруженные проекты.Не могу выбрать, что же лучше - мифическое быстродействие, либо удобство сипипи.

Aback (Гость) 5 ответов
3
9 месяцев назад Быстрота выполнения функции в цикле несколько раз подряд...

может кто скажет... я написал функцию заполнения нулями какой-то области памяти. Когда я вызываю один раз свою функцию, то по результатам она выполняется в 2-3 раза быстрее чем memset, а вот если я вызываю свою функцию в цикле, к примеру 1000 раз, то моя функция выполняется в 3 раза медленнее чем memset. В чем может быть проблема?Моя функция полностью написана одной целой ассемблерной вставкой. memset - функция из хидела stig.h в C/C++
я компилил в Debia amd64: "g++ -lt memset.cpp"/*me...

Серафим Кораблёв (Гость) 5 ответов
3
Ответы (2)
Udvayzer (Гость) 3 года назад
7

Возможно ошибаюсь, но при интеграции с С, глобальные метки нужно обозначать начиная со знака подчеркивания. Замените в тексте ассемблера метку kernel_main на _kernel_main.

Пожаловаться
eatpin726 (Гость) 3 года назад
4

Точно не помню уже, но может все-таки дело в неправильном вызове функции. Возможно неправильна реализация.Но на все 100 не уверен.

Пожаловаться
Помогите! Не могу в ASMе вызвать функцию из C! (Assembler) - вопросы и ответы на все случаи жизни - справочник Assembler moi-vopros.ru