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

#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","     te   st",而不能是常量0x89
movb 0x89, ...

4)"movb $" type ",%4/n/t" /
这种形式即原代码形式,其中" " 部分解析出type的“内容”,$ 表示是立即数,得到的结果是
movb $0x89, ....



关于Linux0.11汇编的语法问题_设计制作_电源/新能源
36
132
0
78

相关资讯

  1. 1、《白日焰火》获赞美媒评论:中国电影翻盘之作3940
  2. 2、宁浩徐峥联手燃爆暑期,那么,宁浩黄渤再加沈腾肯定燃爆春节档!2605
  3. 3、[影评人]《铁娘子》:不是撒切尔的撒切尔3402
  4. 4、巨石强森与神奇女侠又合作,6年之后迎来的必看佳作!1698
  5. 5、《陆贞传奇》腾讯首播新人挑大梁配角更出彩1959
  6. 6、《香蜜沉沉烬如霜》出场的8个美女,杨紫的颜值排第六,第一是她2022
  7. 7、息影多年的家庭主妇,周星驰多次邀请她,所演角色成为经典!924
  8. 8、网曝《维和警察》争番位,王一博钟楚曦僵持不下,片方态度明显!1438
  9. 9、《一触即发》二轮热播李钟汉良联袂“潜伏”2305
  10. 10、魏嬿婉为何在最后败给了海兰,从一开场就注定结局238
全部评论(0)
我也有话说
0
收藏
点赞
顶部