【问题标题】:Mov seg to ax error in emu8086将 seg 移动到 emu8086 中的斧头错误
【发布时间】:2015-10-17 15:39:23
【问题描述】:

我刚刚安装了emu8086,我在mov ax, SEG datahere 线上遇到了我不明白的奇怪错误。看起来它无法识别 SEG 关键字。为什么?代码在 TASM+DosBox 或 GUI Turbo Assembler 中编译得很好。

.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) 

【问题讨论】:

  • 确保您正确复制了所有内容。特别是,您有datah segmentMOV ax, SEG duomenys ???
  • 已修复,只是拼写错误。我 100% 确定代码本身可以在 TASM 或 GUI Turbo Aseembler 中运行。我刚刚删除了堆栈公园和其他不需要的代码。

标签: assembly tasm emu8086


【解决方案1】:

删除SEG。仅当您需要通常也具有偏移量的变量或标签的段时才使用它。 datahere 已被识别并作为段地址处理(也在 TASM 中)。

【讨论】:

  • 很好的答案。如果我的数据段中有num1: db 00,它说num1 未定义,那么我写mov byte ptr num1, al。如何正确定义我的 num1?看来emu8086对编码很严格。
  • @Dancia: num1 db 00(不带冒号)。如果汇编程序可以识别大小(al 被识别为字节),则无需“转换”num1
  • 对于装饰框,我使用括号“ mov [num1],al ”来访问内存位置。大多数情况下,我们必须指定内存访问的大小,例如,如果我们使用带有立即值操作数的指令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多