mez*_*hic 0 c++ linux assembly x86-64 inline-assembly
我试图找到一个非常基本的C++内联x86-64汇编示例,类似于:
C/C++中的简单"Hello World"内联汇编语言程序
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
}
Run Code Online (Sandbox Code Playgroud)
哪个适用于英特尔编译器.有人可以帮忙吗?
编辑关于操作系统我在Windows和Linux上有ICC - 让我们说Linux吧!
您发布的代码是16位代码.64位Windows(或任何版本的Linux)不支持16位代码.[并且它有点儿麻烦,因为它将长度设置为6,当字符串的实际长度为12 ...]
你可能想出如何在Windows代码中做同样的事情,但我没有看到学习如何在汇编程序中在Windows中进行系统调用的重点.编写一些可以在现实生活中实际应用的代码,例如计算字符串中的字符数.
当然,您需要使用Intel或GCC编译器,因为Microsoft编译器不允许在64位模式下使用内联汇编程序.
下面是使用"读取时间戳计数器"指令的内联汇编程序的一些示例,它将与gcc编译器一起使用(并且兼容性也应该与英特尔编译器一起使用).
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 );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5050 次 |
| 最近记录: |