当前位置: 技术问答>linux和unix
c嵌入汇编求解
来源: 互联网 发布时间:2016-06-24
本文导语: 本帖最后由 baiafeu 于 2009-08-13 20:43:02 编辑 01 #define get_seg_byte(seg,addr) 02 ({ 03 register char __res; 04 __asm__("push %%fs; 05 mov %%ax,%%fs; 06 movb %%fs:%2,%%al; 07 pop %%fs" 08 :"=a" (__res) 09 :"" (seg),"m" (*(addr))); 10 __r...
02 ({
03 register char __res;
04 __asm__("push %%fs;
05 mov %%ax,%%fs;
06 movb %%fs:%2,%%al;
07 pop %%fs"
08 :"=a" (__res)
09 :"" (seg),"m" (*(addr)));
10 __res;})
这个宏用于取段seg中addr偏移处的一字节数据,为什么addr用*(addr),不直接用addr?addr本身不就是偏移值么?
那位大侠赐教。谢谢……
|
"m" (*(addr)),m限制符表示取变量的内存位置,即是,汇编成汇编代码时,该变量不被从内存送入
寄存器后,在使用,直接使用其内存位置。若使用addr ,则变成了使用该指针,而不是该指针指向的变量。
因此,使用*(addr)。楼主,可以看看汇编后的汇编代码,就清楚了。