您的位置 首页 开关

关于Linux0.11汇编的语法问题

关于Linux0.11汇编的语法问题-得到的结果是 type的内容,此时type应该是具有内容的数据,比如”0x89″,”test”,而不能是常量0x89

#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, ….

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/99928.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部