【发布时间】:2014-10-07 13:12:39
【问题描述】:
我是汇编语言编程的新手,遇到的问题对于有经验的汇编语言用户来说可能很明显。我有一个 100 字节的缓冲区,我需要找到 n = 1 到 5 的每个第 n 个字节的总和,并将结果存储在 5 个整数的数组中。我需要在我的 c++ 代码中使用内联汇编来执行此操作。我写了以下代码:
void main()
{
char *buffer = new char[100];
int *result = new int[5]();
for (int i = 0; i < 100; i++)
buffer[i] = i;
char *start = buffer;
for (int k = 0; k < 20; k++)
{
for (int j = 0; j < 5; j++)
{
__asm
{
mov eax, start[j]
mov ebx, result[j]
add eax, ebx
mov result[j], eax
}
}
start += 5;
}
}
所以最后,result[0] 应该有 buffer[0], buffer[5], buffer[10] .... 的总和,result[1] 会有 buffer[1], buffer[ 的总和6],缓冲区[11] ....等等。 我在第一条汇编指令本身(mov eax,start [j])中遇到访问冲突错误。谁能帮我找出我犯的错误?如果有人可以帮助我用汇编语言编写整个循环和求和部分,那就太好了
【问题讨论】:
-
你确定这是你想要的吗?因为那不是,我将其理解为每第 n 个字节的总和。
-
装配中有多少任务要完成?您只是在程序集中添加数字。
-
这是我想做的简化版。现在,如果我可以在汇编中编写循环和求和,我会很高兴。我知道与普通的 c++ 代码相比不会有太大的性能优势,但是我想使用这个概念的真实场景可能会带来一些优势
-
您真的想要内联汇编还是对 NASM 满意?还有,用静态数组代替动态数组怎么样?
标签: c++ x86 inline-assembly