да, так и оказалось =) невнимательность, это все она..
спасибо!
Помогите новичку
-
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мог бы кто-нибудь написать, как использовать __params в колибри, тк по исходникам gifview и imgview этого понять не особо удалось =(, допустим если я хочу вывести эту строку через системный вызов 4.
*.*
там если не изменят память, лежит ASCIIZ строка, функция 4 умеет работать с такими строками.
точнее в params лежит указатель на буфер, а система в этот буфер кладет ACIIZ строку.
точнее в params лежит указатель на буфер, а система в этот буфер кладет ACIIZ строку.
Имеется смесь *.cpp и *.c файлов. Как объединить все объектники? Ругательства при линковке, относящиеся к *.cpp, вида "x.o:x.cpp: undefined referenced to '_x_y_x' ".
staper
В .cpp-файлах все внешние функции (как экспортируемые, так и импортируемые) следует помечать как extern "C".
В .cpp-файлах все внешние функции (как экспортируемые, так и импортируемые) следует помечать как extern "C".
Code: Select all
extern "C" void x_y_x(void) {...}
Ушёл к умным, знающим и культурным людям.
Существуют ли обёртки под GCC для libimg.obj? Хотелось бы отрисовать в окне BMP-файл.
Переделываю программу под макросы из proc32.inc возник вопрос. Как вернуть переменную через стек из функции, если используется макрос proc ?
Допустим нужно вернуть переменную ccc ? Без макроса в параметрах ret можно было задать меньшее число и оно в стеке возвращало переменную, а теперь неясно.
Code: Select all
proc aaa, bbb:dword
locals
ccc dd ?
endl
.........
ret
endp
Не знаю ни одного соглашения о вызове, которое предполагало бы то, что ты хочешь. Нужно вернуть что-то не в регистре - предоставь функции (в качестве параметра) адрес буфера, в который она может это записать.
in code we trust
Жуть какая. Определи функцию как cdecl и передай ccc как параметр через стек. Но так поступают только злобные буратины и оптимизирующие компиляторы.
Попробую объяснить чего я хочу на примерах:
1) допустим есть функция aaa, принимает параметр bbb и ничего не возвращает по завершении:
2) функция aaa, принимает параметр bbb и возвращает по завершении значение bbb+333:
Теперь те же примеры с макросом proc:
3) функция aaa принимает bbb ничего не возвращает:
4) функция aaa принимает bbb ничего и возвращает bbb+333:
Правильно ли я набрал 4-й пример где ret -4 ? Будет ли оно правильно работать ?
1) допустим есть функция aaa, принимает параметр bbb и ничего не возвращает по завершении:
Code: Select all
aaa:
push ebp
mov ebp,esp
...
add dword[ebp+8],333 ;bbb+=333
...
pop ebp
ret 4
Code: Select all
aaa:
push ebp
mov ebp,esp
...
add dword[ebp+8],333 ;bbb+=333
...
pop ebp
ret ;возвращаем bbb, которое стало равным bbb+333
3) функция aaa принимает bbb ничего не возвращает:
Code: Select all
proc aaa, bbb:dword
...
add dword[bbb],333 ;bbb+=333
...
ret
endp
Code: Select all
proc aaa, bbb:dword
...
add dword[bbb],333 ;bbb+=333
...
ret -4 ;???
endp
IgorA
Нет, так работать не будет. Если очень хочется именно этого, можно, например, использовать инструкцию retn (retn - "настоящая" инструкция процессора, ret переопределяется в proc). Естественно, чистить стек при этом придётся руками:
Альтернативные варианты разной степени читабельности для разных ситуаций - переопределить код эпилога для proc:
(вариант 1)
(вариант 2)
(вариант 3)
Нет, так работать не будет. Если очень хочется именно этого, можно, например, использовать инструкцию retn (retn - "настоящая" инструкция процессора, ret переопределяется в proc). Естественно, чистить стек при этом придётся руками:
Code: Select all
...
leave
retn
(вариант 1)
Code: Select all
; somewhere before the code
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
{
if procname eq xxx
leave
retn
else
epiloguedef procname,flag,parmbytes,localbytes,reglist
end if
...
proc xxx ...
...
; ret here will be 'leave/retn'
endp
}
Code: Select all
; immediately before proc xxx
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
{
leave
retn
}
proc xxx
...
; ret here will be leave/retn
endp
purge epiloguedef
Code: Select all
; somewhere before the code
macro myepilogue procname,flag,parmbytes,localbytes,reglist
{
leave
retn
}
...
; immediately before proc xxx
epilogue@proc equ myepilogue
proc xxx
...
; ret here will be leave/retn
endp
restore epilogue@proc
Ушёл к умным, знающим и культурным людям.
Доброго всем дня.
Занялся выводом несжатых BMP картинок, а точнее пишу макрос, по выводу оных. Я заметил что в некторых 24-х битных BMP картинках, присутствует N-ое кол-во мусора, смотрел в HEX-редактре. Хочу узнать, как автоматически определить кол-во мусора, в несжатых 24-х битных BMP картинках? У меня есть 3 вида картинок: в первой нет мусора, во второй в каждом ряду один байт лишний, а в третьей уже по три байта на ряд лишние. Собственно, их вывод я сделал. Получилсь три макроса на каждый тип, а я хочу чтобы всё в одном.
Занялся выводом несжатых BMP картинок, а точнее пишу макрос, по выводу оных. Я заметил что в некторых 24-х битных BMP картинках, присутствует N-ое кол-во мусора, смотрел в HEX-редактре. Хочу узнать, как автоматически определить кол-во мусора, в несжатых 24-х битных BMP картинках? У меня есть 3 вида картинок: в первой нет мусора, во второй в каждом ряду один байт лишний, а в третьей уже по три байта на ряд лишние. Собственно, их вывод я сделал. Получилсь три макроса на каждый тип, а я хочу чтобы всё в одном.
В bmp картинках в каждая строка пикселей начинается с адреса кратного 4-м байтам, на сколько я понял это для ускорения операций преобразования изображений. Потому мусора всегда будет столько байт, сколько их не хватает до адреса кратного 4-м. Например если ширина 24 битной картинки кратна 4-м пикселями (4,8,12,16,...), то в ней мусора не будет, т. к. width*3(rgb)=число кратное 4-м.Rock_maniak_forever wrote:Я заметил что в некторых 24-х битных BMP картинках, присутствует N-ое кол-во мусора, смотрел в HEX-редактре. Хочу узнать, как автоматически определить кол-во мусора, в несжатых 24-х битных BMP картинках?
http://ru.wikipedia.org/wiki/BMP
А вообще, какой смысл реализовывать код написанный ажно в двух библиотеках под Колибри, исходники которых вполне себе доступны. Имхо лишняя трата времени.
А вообще, какой смысл реализовывать код написанный ажно в двух библиотеках под Колибри, исходники которых вполне себе доступны. Имхо лишняя трата времени.
Спасибо за быстрый ответ. Буду разбираться.
Есть ещё вопрос. Как преобразовать 1,4,8, и 16 битные несжатые BMP картинки в 24 бита? Погуглив ничего толком не нашёл, потому как все примеры на наСильниках, а я с ними не дружу. Понял только то, что надо умножать байты битовых картинок, на какое-то число, или сдвигать что-ли, а на какое незнаю.
Есть ещё вопрос. Как преобразовать 1,4,8, и 16 битные несжатые BMP картинки в 24 бита? Погуглив ничего толком не нашёл, потому как все примеры на наСильниках, а я с ними не дружу. Понял только то, что надо умножать байты битовых картинок, на какое-то число, или сдвигать что-ли, а на какое незнаю.
Who is online
Users browsing this forum: No registered users and 3 guests