2013-05-14 66 views
0

我們如何把程序指令c = a-b;在機器代碼說明中?我已經提供了操作碼,內存地址爲a = 80,b = 81,c = 82和程序計數器= 30十六進制。指令長16位,4位操作碼,4位寄存器,16位存儲器地址。一個程序的機器碼指令

我只需要知道它是如何啓動的正式方式。這是因爲我真的不明白我的講師教授什麼。如果我能得到一個明確的方向,那麼我有信心在沒有我的講師的幫助下做到這一點。

+1

你爲什麼不問你的講師? – 2013-05-14 15:01:59

+0

我不想問他,因爲我真的不理解他LOl – 2013-05-14 15:24:04

+0

好吧,下面是你如何開始:弄清楚如何減去一些東西。你可能有一個減法的指令,也許不是 - 如果不是的話,看看你是否可以使用'a - b ==〜(〜a + b)'或其他身份,直到你得到可實現的東西。可能出現這種情況,你只能從兩個寄存器中減去兩個寄存器,在這種情況下,要弄清楚如何從存儲器中獲取'a'和'b'的值到寄存器中。然後弄清楚如何將結果寫入'c'。 – harold 2013-05-14 15:48:32

回答

1

的助記符將是這個樣子:

mov eax, [a] ; move 4 bytes starting at address a to the eax register 
sub eax, [b] ; subtract 4 bytes starting at memory address b from the eax register 
mov [c], eax ; move the contents of the eax register to the memory address of c 

你代替你的操作碼的操作(movsub),寄存器地址(eax),用於(abc內存地址),然後結果是實際的機器指令。我在這裏假設你的數字是32位整數,所以我使用的是x86處理器的32位長的eax寄存器,但是使用哪個寄存器的細節是任意的,只要它足夠容納你的數。 mov指令將從所提供的存儲器地址開始讀取與寄存器可容納的字節數相同的字節數。

在本例中,您不需要對程序計數器做任何事情,CPU會在執行每條指令時遞增程序計數器。