2015-10-17 228 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值操作数的指令。 –