2010-09-13 36 views
2

我爲Z80二進制文件製作了一個模擬器,但是我無法確定所有的整數數據類型是否有符號from the manual或來自google。那麼從AB,HL,BC等寄存器中的數字是否被簽名?Z80彙編器/機器代碼中是否有字節/字/地址有符號或無符號?

此外,在機器代碼中的字節/字/地址之後的指令作爲參數簽名或無符號?

如同這些實施例中(從8080/Z80 Instruction Set):

8080 Mnemonic Z80 Mnemonic Machine Code Operation 
------------- ------------ ------------ --------- 
MVI A,byte  LD A,byte  3Ebyte   A <- byte 
LXI B,word  LD BC,word  01word   BC <- word 
JMP address  JP address  C3address  PC <- address 

預先感謝。

回答

2
  1. 寄存器可以包含任一個,並且由於Two's complement,大多數操作數會同時計算兩個答案。但是,某些指令不管是包含值還是帶符號或無符號都需要信息。它們以兩種形式存在,一種用於簽名,另一種用於未簽名。不記得Z80是否有這些。

  2. 請參閱(1.)絕對地址是無符號的,相對地址(分支)是有符號的,以便能夠向後跳轉。

2

AKAIK,彙編語言數據和傳輸指令不包含標誌信息。數據和傳輸操作都只定義數據大小。簽名信息是一些指令的一部分,如有符號/無符號乘法指令。因此,相同的寄存器可以由imul指令作爲有符號整數來處理,並且通過作爲無符號整數的mul指令來處理。

+0

我明白了,所以'add'指令將在有符號和無符號整數上執行加法。這很煩人,至少可以這樣說,因爲我的模擬器是用C#編寫的,不支持只添加原始數據。我會做一些ASM互操作的事情。 – 2010-09-13 16:34:04

+0

您確定嗎?我比裝配更感興趣的機器碼。地址總是格式化爲無符號的,因爲擁有負面地址似乎很荒謬? – 2010-09-13 16:40:15

+0

程序集只是人類可讀的機器代碼翻譯。每個彙編指令都與某個操作碼完全匹配,反之亦然。關於地址,重點是指示與他們合作的方式,以及他們如何解釋。當然,地址總是被視爲正數。但抵消可能是負面的。 – 2010-09-13 18:03:27

2

在許多機器上,簽署和無符號數之間的唯一區別是在大小比較的執行方式,並在較短的值轉換爲較長的方式(請注意,許多處理器的乘法運算有效將較短的類型轉換爲較長的類型,並且劃分本質上執行幅度比較)。當執行除上述操作以外的任何類型的操作時,有符號和無符號操作數按照相同的方式精確(逐位)處理,因此不需要區分它們。

相關問題