Linux 0 11彙編的語法問題

2021-08-25 18:11:28 字數 1128 閱讀 8102

#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核心編譯問題

弄了好長時間,只是可以用linux 0.11我的linux實驗室環境,使用bochs模擬,進入linux 0.11 cd cd src linux make 這樣就編譯成image了 mkdir a mkdir a boot mcopy image a boot 將映象檔案拷貝到啟動軟盤 修改men...

Linux 0 11核心編譯問題

弄了好長時間,只是可以用linux 0.11我的linux實驗室環境,使用bochs模擬,進入linux 0.11 cd cd src linux make 這樣就編譯成image了 mkdir a mkdir a boot mcopy image a boot 將映象檔案拷貝到啟動軟盤 修改men...

Linux 0 11 核心筆記

1 任務0的堆疊問題 一直不明白schedule.c裡的task union的stack和user stack是什麼關係,head.s裡就設定了esp指向user stack,卻一直沒有用到task union,直到看到init task才明白,從進入保護模式到跳轉進使用者態都是用的user sta...