У меня есть вопрос о встроенном ассемблере. Возможно назвать другую ассемблерную подпрограмму от встроенного ассемблера в той же функции? Например:
void FindValidPID(unsigned int &Pid)
{
__asm
{
sub esp, 20h
mov eax, Pid
add eax,eax
call sub123 ; another assm subroutine
mov Pid, eax
add esp, 20h
}
}
Где я, и как, должен записать подпрограмму sub123?
Удачи,
Thomas
Судя по синтаксису, я предполагаю, что используемый компилятор - это VC ++? Если это так, голая функция ( http://msdn.microsoft.com/en-us/library/5ekezyy2 (VS.80) .aspx ) должна позволить вам определить функцию, которую можно легко вызвать из код языка ассемблера.
(Голые функции также видны для C ++, поэтому вы можете вызывать их и из C ++ и потенциально получать неверные результаты ... так что будьте осторожны!)
Предположим, у вас есть подпрограмма _func2
, написанная на ассемблере (я знаю только синтаксис NASM).
global _func2
section .text
_func2:
ret
Вы можете вызвать эту подпрограмму из кода C ++ следующим образом
extern "C" {
void func2();
}
void func1()
{
__asm {
call func2
}
}
int main()
{
func1();
}
Конечно, func2
также может быть функцией C / C ++ с блоком __ asm
.
Формат ^ < n >
позволяет выбрать n-й родитель фиксации (релевантный в слияниях). Формат ~ < n >
позволяет выбирать n-й предок, всегда следующий за первым родителем. Некоторые примеры см. в документации git-rev-parse .
Приложение JEdivePane
не может вычислить конечную предпочтительную ширину и высоту одновременно, оно должно знать одно, прежде чем вычислить другое.
При первом проходе JEdivePane
вычисляет предпочтительную высоту, исходя из предположения, что ее ширина будет неограниченной, поэтому возвращает высоту одной строки (поскольку текст не содержит разрывов строк.)
На втором проходе ширина уже задана. (ограничено размером первого JPopupMenu
), и теперь, когда он знает максимальную ширину, он может вычислить, насколько он должен быть высоким.
Таким образом, самое простое решение состоит в том, чтобы установить максимальную ширину при каждой установке текста.
String text = "Potentially looooooong text. " +
"Lorem ipsum dolor sit amet, consectetuer" +
"adipiscing elit, sed diam nonummy nibh euismod " +
"tincidunt ut laoreet dolore magna aliquam" +
"adipiscing elit, sed diam nonummy nibh euismod" +
"erat volutpat. Ut wisi enim ad minim veniam, " +
"quis nostrud exerci tation.";
final JEditorPane editorPane = new JEditorPane("text/html", text);
editorPane.setSize(300, Integer.MAX_VALUE);
editorPane.setEditable(false);
Не беспокойтесь о том, чтобы сделать его слишком большим, он все равно будет сокращаться, чтобы соответствовать содержимому (как вы увидите, если вы измените текст на «Hello, World!»
.
Вы могли бы сделать это, создав другую функцию так же, как вы сделали с 1-й, а затем вызвать ее с искореженным именем, как вызов __ GLOBAL __ I _ sub123;
.
Может быть хорошей идеей объявить его как extern «C»
, чтобы сделать вещи проще.
В gcc можно использовать gcc -S file.cpp
для просмотра искомого имени функции.
Если вы пишете всю подпрограмму на ассемблере, вам следует рассмотреть возможность использования ассемблера на уровне файлов, а не встроенного.