2015-10-17 43 views
0

我剛安裝了emu8086,出現奇怪的錯誤,我不明白mov ax, SEG datahere。它看起來不認識SEG關鍵字。爲什麼?代碼在TASM + DosBox或GUI Turbo Assembler中編譯得很好。Mov seg到emu8086的斧頭錯誤

.model small 
    ASSUME CS: codehere, DS:datahere, SS:stackhere 

datahere segment para public 'DATA' 

; data segment goes here 

datahere ends 

stackhere segment word stack 'STACK' 

    dw 400h dup (00) 

stackhere ends 

codehere segment para public 'CODE' 
    start: 

    mov ax, SEG datahere 
    mov ds, ax 

    ; code goes here 

    ; END 
    mov ah, 4ch 
    int 21h 

codehere ends 
    end start 

錯誤:

wrong parameters: MOV ax, SEG datahere 
probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: (ITSELF) 
+0

確保您正確地複製了所有內容。特別是,你有'datah segment'還有'MOV ax,SEG duomenys' ??? – Jester

+0

固定,只是錯字。我100%確定代碼本身在TASM或GUI Turbo Aseembler中工作。我剛剛刪除了堆棧公園和其他不需要的代碼。 – Dancia

回答

0

刪除SEG。它只用於,如果你需要一個變量的段或通常也有偏移量的標籤。 datahere已被識別並作爲段地址處理(同樣在TASM中)。

+0

很好的答案。如果在我的數據段中有'num1:db 00',並且它說'num1'沒有定義,那麼我寫'mov byte ptr num1,al'。如何正確定義我的num1?似乎emu8086對編碼非常嚴格。 – Dancia

+0

@Dancia:'num1 db 00'(不含冒號)。如果彙編程序能夠識別大小(使用「al」將其識別爲字節),則不需要「投射」num1。 – rkhb

+0

對於化妝品的階梯,我使用括號「mov [num1],al」來訪問內存位置。大多數情況下,我們必須指定存儲器訪問的大小,例如,如果我們使用帶有immidiate值操作數的指令。 –