2014-10-01 127 views
2

我正在使用emu8086。我有一個問題,它負責顯示我們在從其hexa輸入轉換後在七段顯示器上看到的內容。我應該輸入我的數據在六進制,如果它匹配七段表的十六進制輸入,它顯示十進制數,例如。 3FH = 0,06H = 1。我使用數組來實現這個程序。下面是工作源程序:未知的操作碼已跳過:66,而不是8086指令 - 尚未支持

ORG 100H  

MOV AL,[1840H] ;input in this memory location 
MOV CL,0AH  ; initialize length counter 

AGAIN: CMP AL,MSG+BX  ; compare to check if the data matches 
     JE RESULT   ; jump to RESULT if data matched 
     INC BX   ; increase decimal output by 1 if data not matched 
LOOP AGAIN 

MOV [1841H],0FFH   ; display FF if no data matched the array 

HLT 

MSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH  ; my array with hexa inputs 

RESULT: MOV [1841H],BL     ; display data if matched 

我有這個程序的工作。但是我嘗試了一些我將數組MSG DB 3FH ...切換到ORG 100H之後和MOV AL [1840H]之前的位置,運行該程序會給出錯誤消息「未知操作碼已跳過:66,而不是8086指令 - 尚未支持「。我無法找到原因。

任何人都會有什麼想法是什麼原因,我可以修復任何東西,使我的程序工作,如果我要保持ORG 100H和MOV AL,[1840H]之間的陣列?

+0

您正在使用非法操作碼指令芯片集 – jgr208 2014-10-01 16:35:30

+0

http://stackoverflow.com/questions/5209835/program-which-asks-if-you-want-beer – jgr208 2014-10-01 16:39:07

+0

@ jgr208我將能夠做任何事情讓它起作用?我已經嘗試將66H改爲60H至6FH的其他六進制數,其中一些包含指令,但程序不會按照我想要的方式工作,儘管沒有彈出消息,那些不包含指令的彈出窗口「未知的操作碼跳過...」消息,不是60H-6FH沒有定義任何指令,爲什麼他們中的一些人有它,有些沒有? – OneBaseNotch 2014-10-02 00:46:59

回答

0

通過在第一條指令前移動數據數組MSG,您有效地要求emu8086執行它! MSG的第一個字節對應有效的8086指令(AAS,PUSH ES,POP BX和DEC DI),但第五個字節代表8086處理器中不可用的OPERAND OVERRIDE PREFIX!
解決您的問題只是躍過味精:

ORG 100H  
jmp start 
MSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH  ; my array with hexa inputs 
start: 
MOV AL,[1840H] ;input in this memory location 
MOV CL,0AH  ; initialize length counter 

AGAIN: CMP AL,MSG+BX  ; compare to check if the data matches 
    JE RESULT   ; jump to RESULT if data matched 
    INC BX   ; increase decimal output by 1 if data not matched 
LOOP AGAIN 

MOV [1841H],0FFH   ; display FF if no data matched the array 
HLT 

RESULT: MOV [1841H],BL     ; display data if matched 

什麼混淆我是你的方括號的使用。
你不應該寫cmp al,[MSG+BX]因爲你使用它們與p.e. mov AL,[1840H]
此外,LOOP在初始化CL時使用CX作爲計數器。

+0

我明白了,這清理了很多,非常感謝。 我已經試過括號括號,沒有括號,他們工作得很好。可以這樣說,沒有括號,我的模擬器仍然可以參考數組? – OneBaseNotch 2014-10-07 22:52:39

+0

我想編譯器可以另外接受無方括號的形式,因爲寫'+ BX'明確指向內存訪問。除非編譯器接受標籤名的registernames,否則標籤名會變成2個標籤偏移量的總和! – 2014-10-12 14:25:53

+0

哦,好的。所以它取決於編譯器本身。謝謝。 – OneBaseNotch 2014-10-15 01:59:36

相關問題