【发布时间】:2009-12-19 07:32:13
【问题描述】:
好的,这是我的问题。我想循环使用一个简单的字符缓冲区 内联 asm 和 VC++;
我的议程是创建一个循环,尽可能快地从内存中读取信息
这是我的代码
char buffer[howmany];
memset(buffer,33,howmany);
char arr = 0;
__asm
{
MOV eax,seg buffer ;operand size conflict
MOV eds,eax
MOV ecx,[howmany]
MOV ebx,ip
MOV arr, ES::buffer[ecx] ;operand size conflict
;inline assembler syntax error in 'third operand'
;found 'bad token'
LOOP ebx ;inline assembler syntax error in 'opcode'; found 'bad token'
; 'LOOP' : identifier is reserved word
}
我对组装很陌生,但这似乎是正确的,但它不起作用?我不确定为什么。提前致谢。
最终解决方案
__asm
{
LEA esi, buffer
MOV ecx,howmany
buf_loop:
mov eax, [esi]
inc esi
dec ecx
jnz buf_loop
}
【问题讨论】:
-
成功了吗?你应该做的第一件事是测试它。然后,如果它不起作用并且您无法弄清楚原因,请回到我们这里。
-
有比循环更好的方法,检查我编辑的答案。
-
我怀疑闯入组装会让你在这里获得任何额外的速度。根据具体情况,您的瓶颈将是内存 IO 和缓存命中等。如果您的目标是用汇编语言编写,请忽略我的评论,但如果您的目标是速度,那么 asm 在这里不会有太大优势。用一粒盐和个人资料来接受我的建议。
-
@amwinter 已经有一段时间了,但是闯入 asm 让我的速度有了很大的提升。