日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

一步步编写操作系统81 att内嵌汇编语法

發(fā)布時間:2023/12/10 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步编写操作系统81 att内嵌汇编语法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

內(nèi)聯(lián)匯編的格式也變得讓人生畏了,感覺既不像C語言,也不像匯編語言,似乎是一種中間產(chǎn)物,不信您看:

asm [volatile] (“assembly code” : output : input : clobber/modify)

和前面的基本內(nèi)聯(lián)匯編相比,擴展內(nèi)聯(lián)匯編在圓括號中變成了4部分,多了output,input,和clobber/modify三項。其中的每一部分都可以省略,甚至包括assembly code。省略的部分要保留冒號分隔符來占位,如果省略的是后面的一個或多個連續(xù)的部分,分隔符也不用保留,比如省略了clobber/modify,不需要保留input后面的冒號。

assembly code:還是用戶寫入的匯編指令,和基本內(nèi)聯(lián)匯編一樣。

匯編代碼的運行是需要輸入?yún)?shù)的,其運行之后也可產(chǎn)出結(jié)果。

在C代碼中內(nèi)嵌匯編的目的是讓匯編幫助C完成某些功能,所以C代碼就要為其提供參數(shù)和用于存放其輸出結(jié)果的空間。這樣一來,內(nèi)聯(lián)匯編代碼類似機器,C代碼類似人。機器要運行,人就要為機器提供加工的源材料(input),機器運行后,將生產(chǎn)出來的成果放到人能夠得著的地方(output),人才能獲取機器的輸出結(jié)果。input和output正是C為匯編提供輸入?yún)?shù)和存儲其輸出的部分,這是匯編與c交互的關(guān)鍵,我們之前的討論就通過這兩項解決。

output:output用來指定匯編代碼的數(shù)據(jù)如何輸出給C代碼使用。內(nèi)嵌的匯編指令運行結(jié)束后,如果想將運行結(jié)果存儲到c變量中,就用此項指定輸出的位置。output中每個操作數(shù)的格式為:

操作數(shù)修飾符 約束名”(C變量名)

其中的引號和圓括號不能少,操作數(shù)修飾符通常為等號’=’。多個操作數(shù)之間用逗號’,’分隔。

input:input用來指定C中數(shù)據(jù)如何輸入給匯編使用。要想讓匯編使用c中的變量作為參數(shù),就要在此指定。input中每個操作數(shù)的格式為:

”[操作數(shù)修飾符]?約束名”(C變量名)

其中的引號和圓括號不能少,操作數(shù)修飾符為可選項。多個操作數(shù)之間用逗號’,’分隔。

單獨強調(diào)一下,以上的output()input()括號中的是C代碼中的變量,output(c變量)input(c變量)就像c語言中的函數(shù),將C變量(值或變量地址)轉(zhuǎn)換成匯編代碼的操作數(shù)。

clobber/modify:匯編代碼執(zhí)行后會破壞一些內(nèi)存或寄存器資源,通過此項通知編譯器,可能造成寄存器或內(nèi)存數(shù)據(jù)的破壞,這樣gcc就知道哪些寄存器或內(nèi)存需要提前保護起來,后面會展開細(xì)說。

assembly code中引用的所有操作數(shù)其實是經(jīng)過gcc轉(zhuǎn)換后的復(fù)本,“原件”都在output和input括號中的c變量,后面通過各種例子您就明白了。

總結(jié)

以上是生活随笔為你收集整理的一步步编写操作系统81 att内嵌汇编语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。