Kel*_*ton 1 c x86 assembly gcc inline-assembly
const int howmany = 5046;
char buffer[howmany];
asm("lea buffer,%esi"); //Get the address of buffer
asm("mov howmany,%ebx"); //Set the loop number
asm("buf_loop:"); //Lable for beginning of loop
asm("movb (%esi),%al"); //Copy buffer[x] to al
asm("inc %esi"); //Increment buffer address
asm("dec %ebx"); //Decrement loop count
asm("jnz buf_loop"); //jump to buf_loop if(ebx>0)
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc编译器.出于某种原因,我的缓冲区/ howmany变量在我的asm眼中是不确定的.我不知道为什么.我只想将缓冲区数组的起始地址移动到esi寄存器中,在将每个元素复制到al寄存器时循环"howmany"次.
你在gcc中使用内联汇编程序吗?(如果没有,在其他C++编译器中,究竟是什么?)
如果是gcc,请参阅此处的详细信息,特别是此示例:
asm ("leal (%1,%1,4), %0"
: "=r" (five_times_x)
: "r" (x)
);
Run Code Online (Sandbox Code Playgroud)
%0并且%1指的是C级变量,它们被特别列为第二个(用于输出)和第三个(用于输入)参数asm.在您的示例中,您只有"输入",因此您有一个空的第二个操作数(传统上,在该冒号之后使用注释,例如/* no output registers */,以更明确地指示).
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |