2017-10-15 152 views
1

最近我要學習一些基本的彙編語言,我已經搜索了wiki,並且我意識到彙編語言只是機器語言的「文本版本」,以便讓人們閱讀?所以這意味着任何機器語言都可以做彙編語言也可以完成,對嗎?或者它在彙編語言中存在一些限制,就像高級編程語言和彙編語言之間的差距(我們在高級語言中做不到的東西,所以我們不得不使用匯編),所以有些情況我們別無選擇,機器語言?彙編語言不能做什麼,但只有機器語言可以嗎?

另一個問題是,我發現一種低於機器語言的語言是「微碼」?有誰知道機器碼和微碼之間的關係嗎?

+2

這一切都取決於您的彙編程序,將文本轉換爲機器碼。例如,在x86上,一些彙編指令可能會以多種方式編碼爲機器代碼,而彙編器可能會或可能不會提供一種方法來指定您想要的。但它通常不重要。微碼存在於CPU內部,通常你不能以應用程序員的身份訪問它。 – Jester

+0

https://electronics.stackexchange.com/questions/1911/microprogramming-vs-machine-language-programming – Juan

+0

就像@Jester,我想到的主要問題是當你想要一個特定的編碼。在asm中,你可以使用'db 0x90'或其他任何東西來代替'nop'來手動編碼一條指令,否則,彙編程序的便利將會受益。 –

回答

3

這取決於你如何定義組件和機器代碼之間的區別:

如果調用是由彙編「彙編代碼」翻譯任何「源」代碼的明確答覆是所有裝配的99%使用:「否」

你可以任何你喜歡的機器代碼指令添加到使用像.bytedb或指令但是你的彙編名字你的彙編源代碼,該指令是這樣的:

move X,Y 
.byte 1 
.byte 2 
.byte 3 
add Y,X 

如果你說:任何指令輸入爲數字(使用.byte指令)不是彙編的答案是:「經常是」:

在8088例如存在可以以多種方式來表示一些指令:jmp或例如mov ax, value。 (對於很多像MIPS這樣的RISC CPU,情況更糟......)

如果在彙編器中輸入這樣的指令,彙編器可以自由決定如何轉換指令。 CPU將以相同的方式執行這兩種變體,那麼爲什麼彙編器可以讓您在兩種變體之間進行選擇?

但是,其他要求可能會強制您明確使用以下兩種變體之一:似乎有DOS模擬器需要某種文件格式的第一條指令爲指令的3字節變體。

如果你簡單的寫了下面的彙編代碼:

jmp _start 
_start: 
    ... 

你無法控制的,如果彙編器使用3字節或指令jmp _start的2個字節的變種。我想大多數彙編程序將使用2字節的變體。

如果它使用2字節變體,例如DOS模擬器將無法讀取該文件!