Linux 0.11汇编的语法问题
2011-03-11 22:29
148 查看
#define _set_tssldt_desc(n,addr,type) / __asm__ ("movw $104,%1/n/t" / "movw %%ax,%2/n/t" / "rorl $16,%%eax/n/t" / "movb %%al,%3/n/t" / "movb $" type ",%4/n/t" / //这里用了$" type ",后面用了"0x89"," type "在这里为何要加上双引号?另外type的前面为何加了“$”?AT&T汇编立即数前面才加"$"的啊,为何? "movb $0x00,%5/n/t" / "movb %%ah,%6/n/t" / "rorl $16,%%eax" / ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), / "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) / ) #define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") //这里的"0x89"又为何要加上双引号呢? #define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") |
原因解释:
因为在$" type "处的本意是要取type的内容作为立即数操作
简单比较一下几种形式
1) "movb type ,%4/n/t" /
得到的结果只是 movb type ,...
2)"movb $type,%4/n/t" /
得到的结果是type的地址movb $type,...
3)"movb " type ",%4/n/t" /
得到的结果是 type的内容,此时type应该是具有内容的数据,比如"0x89","test",而不能是常量0x89
movb 0x89, ...
4)"movb $" type ",%4/n/t" /
这种形式即原代码形式,其中" " 部分解析出type的“内容”,$ 表示是立即数,得到的结果是
movb $0x89, ....
相关文章推荐
- Linux 0.11汇编的语法问题
- arm-Linux汇编语法及它和ADS汇编转换的问题
- bochs中加载linux0.11版本遇到的一些问题
- Linux gcc for 循环中 i=i++ 会造成死循环问题及 ++i / i++ 汇编分析
- linux汇编工具之GAS(AT&T 语法)和NASM(Intel 语法)比较
- Linux下ARM汇编语法
- Linux下AT&T汇编语法格式简介1
- Linux下的AT&T语法(即GNU as 汇编语法)入门
- AT&T 格式Linux 汇编语法格式
- linux汇编 常见问题 (zz)
- Linux下的一个简单汇编程序, .long声明数据的长度问题!
- Linux下ARM汇编语法(转载学习)
- Linux0.11内核--汇编代码实现C函数
- 关于linux-0.11文件属组为4096的问题与解答
- 8259芯片的初始化-在重现linux-0.11遇到的问题 (博古以通今)
- Linux下汇编语法和内嵌汇编
- ARMLinux的C嵌入汇编语法
- linux 内嵌汇编语法
- Linux0.11内核--汇编代码实现C函数
- Linux下ARM汇编语法