2015-10-17 5 views
0

Я только что установил emu8086, и я получаю странную ошибку. Я не понимаю в строке mov ax, SEG datahere. Похоже, что он не распознает ключевое слово SEG. Зачем? Код компилируется только в TASM + DosBox или в GUI Turbo Assembler.Mov seg to ax error в 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'. Как правильно определить мой номер1? Кажется, что emu8086 очень строг для кодирования. – Dancia

+0

@ Dancia: 'num1 db 00' (без двоеточия). Вам не нужно «бросать» 'num1', если ассемблер может распознать размер (с' al' он признан байтом). – rkhb

+0

Для косметического стиля я использую скобки «mov [num1], al» для доступа к ячейке памяти. И в основном мы должны указывать размер доступа к памяти, если мы используем команду с операндом с неограниченным значением, например. –

Смежные вопросы