您好,欢迎来到刀刀网。
搜索
您的当前位置:首页在c语言(C++或G++)中如何嵌入汇编

在c语言(C++或G++)中如何嵌入汇编

来源:刀刀网

有网友碰到这样的问题“在c语言(C++或G++)中如何嵌入汇编”。小编为您整理了以下解决方案,希望对您有帮助:

解决方案1:

今天有点时间,重新改下了下,为避免因编译器和平台实现而出现的问题,我写了三个版本,分别是windows下vc6.0,windows下mingw和cygwin和linux下的gcc/g++。

vc6.0:

#include <stdio.h>

const char* input = "%d";

const char* output = "%d\n";

int n;

int main()

{

__asm

{

lea eax, n

push eax

push input
loopx:

call scanf

cmp eax, 1

jne end

mov ecx, n

jecxz end

dec ecx

push ecx

push output

call printf

add esp, 8

jmp loopx
end:

add esp, 8

}

return 0;

}

mingw/cygwin:

#include <stdio.h>

const char* input = "%d";

const char* output = "%d\n";

int n;

int main()

{

__asm__

(

"loop: \n"

"pushl $_n \n"

"pushl _input \n"

"call _scanf \n"

"addl $8, %esp \n"

"cmpl $1, %eax \n"

"jne end \n"

"movl _n, %ecx \n"

"jecxz end \n"

"decl %ecx \n"

"pushl %ecx \n"

"pushl _output \n"

"call _printf \n"

"addl $8, %esp \n"

"jmp loop \n"

"end:"

);

return 0;

}

linux gcc/g++:

#include <stdio.h>

const char* input = "%d";
const char* output = "%d\n";
int n;

int main()
{
__asm__
(
"pushl $n \n"
"pushl input \n"
"loop: \n"
"call scanf \n"
"cmp $1, %eax \n"
"jne end \n"
"movl n, %ecx \n"
"jecxz end \n"
"decl %ecx \n"
"pushl %ecx \n"
"pushl output \n"
"call printf \n"
"addl $8, %esp \n"
"jmp loop \n"
"end: \n"
"addl $8, %esp \n");

return 0;
}

解决方案2:

C语言中嵌入汇编的方法是加入关键字“asm”来实现的,如:
例1:
main()
{
asm
mov
ah,2;
asm
mov
bh,0;
asm
mov
dl,
20;
asm
mov
dh,10;
asm
int
10h;
}
例2:
main()
{
asm{
mov
ah,2;
mov
bh,0;
mov
dl,
20;
mov
dh,10;
int
10h;
}
}

解决方案3:

__asm{

汇编代码

}
例如a+b程序
int main()
{
int a,b;
__asm{
mov a , eax
add b , eax
mov eax , a
}
return 0;
}

解决方案4:

我不知道你的测试是干什么用的。
但是想要提高效率。你可以试着把scanf和printf都改为用文件输入输出。你scanf不会是用手输入的吧?估计是在一个文件中准备的数据。

解决方案5:

上面的仁兄 mian()不是在吗,你没看到?

VC 是可以嵌入汇编,可是你嵌入的是一个完整的汇编程序,这有些不合理吧. 试想,如果可以嵌入完整的汇编程序,那 VC 岂不是可以叫 VA(Visual Asm)了:) 你把那些定义段的伪代码去掉,然后将变量定义放在 __asm{} 前面(嵌入代码可以访问到这些变量的).然后再编译,应该没问题了:)
在VC中嵌入汇编,只需在
_asm
{
加入实现应用的汇编代码。
}
就行了。

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务