彙編語言的種類

彙編語言的種類

彙編語言和CPU息息相關,但是不能把彙編語言完全等同於CPU的機器指令。不同架構的CPU指令並不相同,如x86powerpcarm各有各的指令系統;甚至同一種架構的CPU有幾套指令集,典型的如arm除了有32位的指令集外,還有一套16位的thumb指令集。但是作爲開發語言的彙編,本質上是一套語法規則和助記符的集合,它可以包容不同的指令集。如果從CPU體系來劃分,常見的彙編有兩種:IBM PC彙編和ARM彙編。

IBM PC彙編也就是Intel的彙編,因爲IBM 最早推出PC機,後來的體系很多都要和它兼容,所以也使用了相同的彙編語言。ARM壓根沒考慮過兼容,它的指令集和x86完全是兩個體系,所以彙編語言也獨立發展出一套。

CPU只是限定了機器碼,作爲開發語言的彙編,其實還和編譯器息息相關。彙編語言出現的早,沒有像C語言一樣定義出標準,所以編譯器的廠商各搞一套。到現在,最有名的也是兩家:MASMGNU ASM。前者是微軟的,只支持x86,用在DOS/Windows平臺中;後者是開源產品,主要用在Linux中,基本上支持大部分的CPU架構。這兩者的區別在於僞指令的不同,僞指令是用來告訴編譯器如何工作的,和編譯器相關,和CPU無關。其實彙編的編譯相當簡單,這兩套僞指令只是符號不相同,含義是大同小異,明白了一種,看另一種就很容易了。

從彙編格式分,還有Intel格式和AT&T格式的區別,前者是Intel的,windows平臺常見,後者最早由貝爾實驗室推出,用於Unix中,GUN彙編器的缺省格式就是AT&T。不過GNU的彙編器和調試器gdb對這兩種格式都支持,可以隨便切換。MASM只支持Intel格式。Intel格式和AT&T格式的區別只是符號系統的區別,這與x86arm的區別可不一樣,後者是CPU體系的區別。

最後談談內嵌彙編,它是用於C語言和彙編語言混合編程的,所以和編譯器也關係緊密,目前也是有兩種,GNU的內嵌彙編和MASM的內嵌彙編,它們的語法和普通匯編是有區別的,特別是GNU的內嵌彙編不是很容易看懂,需要專門學習才行。MASM的內嵌彙編和普通匯編的區別則不大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章