我试图找到一个非常基本的 C++ 内联 x86-64 汇编示例,类似于:
a Simple "Hello World" Inline Assembly language Program in C/C++
char msg[] = "Hello, world";
asm {
mov ax,4 // (I/O Func.)
mov bx,1 // (Output func)
lds cx, msg // (address of the string)
mov dx,6 // (lenght of the string)
int 0x21 // system call
}
这将与英特尔编译器一起工作。有人可以帮忙吗?
编辑关于操作系统我有 Windows 和 Linux 上的 ICC - 让我们说 Linux!
最佳答案
您发布的代码是 16 位代码。 64 位 Windows(或任何版本的 Linux)不支持 16 位代码。 [而且它有点问题,因为它将长度设置为 6,而字符串的实际长度是 12...]
你可能想出如何在 Windows 代码中做同样的事情,但我看不出学习如何从汇编器在 Windows 中进行系统调用的意义。编写一些您可以在现实生活中实际应用的代码,例如计算字符串中的字符数。
当然,您需要使用 Intel 或 GCC 编译器,因为 Microsoft 编译器不允许在 64 位模式下使用内联汇编程序。
这里有一个使用“读取时间戳记计数器”指令的内联汇编程序的小示例,它可以与 gcc 编译器一起使用(并且通过兼容性应该也可以与 Intel 编译器一起使用)。
static __inline__ unsigned long long rdtsc(void)
{
unsigned hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
关于c++ - 简单的 x86-64 C++ 内联汇编 "Hello World"示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534899/