Eld*_*dad 6 c 64-bit assembly inline-assembly
我有一个用我的C代码编写的小内联汇编代码.asm遍历数组,如果需要,将值从不同的数组移动到寄存器.最后,调用一个中断.代码类似于:
cmp arrPointer[2],1h
jne EXIT
mov AX, shortArrPtr[2]
EXIT:
int 3h
Run Code Online (Sandbox Code Playgroud)
这一切都在x86中工作,但根据microsoft:x64不支持内联汇编.如何将其全部翻译为支持x64?我找不到执行我想要的编译器内部过程,我无法弄清楚如何将参数传递给外部asm文件.
我认为你只是找到内联汇编是一个痛苦的原因 - 它完全不可移植(而不仅仅是架构之间;编译器通常有不同的和不兼容的语法).编写外部程序集文件,并按此方式执行所需操作.将参数传递给汇编例程与将它们传递给C函数完全相同; 只需向前声明你的函数签名,调用代码(在C中)将做正确的事情.然后在外部程序集文件中实现例程(确保遵守调用约定)并导出相应的符号以使链接器正确地绑定所有内容.Presto - 工作组装!
一个例子,按要求.我没有尝试以任何方式编译或测试它,所以它可能不是100%.祝好运.
myHeader.h:
void *someOperation(void *parameter1, int parameter2);
Run Code Online (Sandbox Code Playgroud)
myAssemblyFile.s:
.text
.globl someOperation
someOperation:
add %rdx, %rcx
mov %rcx, %rax
ret
.end
Run Code Online (Sandbox Code Playgroud)
mySourceCode.c:
#include "myHeader.h"
void someFunction(void)
{
void *arg1 = (void *)0x80001000;
int arg2 = 12;
void *returnValue;
printf("Calling with %x %x\n", arg1, arg2);
// call assembly function
returnValue = someOperation(arg1, arg2);
printf("Returned: %x\n", returnValue);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |