内联汇编语言
Inline assembly language
本文关键字:汇编语言 更新时间:2023-10-16
我正在做64位迁移,我需要将内联汇编代码移植到cpp这里是代码
void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer)
{
// I386
// just copy the args buffer to the stack (it's already layed out correctly)
int* begin = m_argsBegin;
int* ptr = m_argsEnd;
while (ptr > begin) {
int val = *(--ptr);
__asm push val
}
}
我想把这个__asm push val迁移到cpp。这个函数被调用了四次,每次调用我们都会得到m_argsBegin和m_argsEnd的不同值(m_argsBegin和m_argsEnd都是动态数组)。这个while循环在每次调用这个"callFunction"函数时执行4次。因此,总共4x4 = 16个值将存储在"连续内存位置"中,这就是我猜的"__asm push val"。我需要在c++中实现这个。我尝试了所有可能的方法(堆栈,数组,链表,队列甚至将其分离到一个单独的asm文件,但没有一个工作)有人能帮忙吗?
我将这个内联汇编函数分离到一个单独的汇编文件中。下面是代码:
.386
.model c,flat
public callFunction_asm
CSEG segment public 'CODE'
callFunction_asm PROC
push ebp
mov ebp, esp
mov ecx, [ebp+8] ;val
push dword ptr [ecx]
mov esp, ebp
pop ebp
RETN
callFunction_asm ENDP
CSEG ends
END
其中callFunction_asm是一个外部函数,我将其声明为:
外来的"C"
,我将这个函数调用为:
while (ptr > begin) {
int val = *(--ptr);
callFunction_asm(val); //possible replacement
}
但即使这是不工作,谁能告诉我哪里错了。我是汇编代码的新手。
push
将其操作数放在堆栈上,同时堆栈指针自减。
如果你看堆栈指针加1 (1($sp)
),你应该看到值(但如果你想要它回来,你通常使用pop
)。
相关文章:
- 如何修复此汇编语言程序
- 在 netbeans 中将C++代码输出为汇编语言
- 带有X64汇编语言的Univeral Windows平台C
- 如何在汇编语言ARM中使用Neon扩展高效地反转数组
- 有人在汇编语言级别解释左值和右值吗?
- 高级语言(例如Java)和汇编语言之间的关系
- 将此 C++ for 循环转换为汇编语言
- 汇编语言来学习C / C++语言
- C++转换为汇编语言
- 如何用汇编语言编写模数(C++中的%)
- 汇编语言扫描长字符串以计数元音
- 用于逆向工程的汇编语言
- 类从c++到汇编语言
- 无法在 Visual Studio 中生成汇编语言程序
- 内联汇编语言
- 用c++和汇编语言传递字符串参数
- 汇编语言中的While循环
- 在c++代码中使用嵌入式汇编语言进行错误分析
- 用c++汇编语言编写
- 汇编语言与C或c++