【问题标题】:Nasm "instruction expected" problem is it my compiler or my codeNasm“指令预期”问题是我的编译器还是我的代码
【发布时间】:2021-05-01 13:44:18
【问题描述】:

我对 NASM 还很陌生,我已经想大吃一惊了,因为我不知道为什么我一直收到此错误“预期的指令”第 14 行。是我的编译器还是我的代码。请帮助我,我已经做了几个小时了,我现在不知道该怎么办。

section .data
  CELC DB ?
FARH DB ?
MSG1 DB 'INPUT VALUE OF CENTIGRADE','$'
MSG DB 'EQUIVALENT FARHRENEHEIT IS','$'

section .text
    global _start
section .code

_start:
    ASSUME CS:CSEG, DS:DSEG
       MOV AX,DSEG
       MOV DS,AX ; INITIALIZE DATA SEGMENT
       LEA DX,MSG1
       MOV AH, 01H
      
       INT 21H ; DISPLAY "INPUT VALUE IN CELC"
       MOV AH, 01H
      
       INT 21H ; INPUT VALUE IN CELC
       MOV CELC,AL ; MOVE THE INPUT VALUE TO 'CELC'
       MOV AL,CELC
       MOV CL,09H
       MOV CH,00H
       MUL CL ; AX=9*CELC
       MOV CL,05H

       DIV CL ; AL=AX/CL=(9*CELC)/5
       ADD AL,20H ; ADD 20H=32 TO AL TO GET FAHR
       MOV FARH, AL ; FAHR=(9*CELC)/5+32
       MOV AH,4CH
       INT 21H

【问题讨论】:

  • 此代码采用 MASM 语法,因此需要转换为 NASM 语法。另一种选择是使用 MASM 或 JWASM(Linux/Windows//MacOS/DOS 等上可用的 MASM 的开源替代品)组装它。请注意,此代码旨在在 DOS 下运行。不要指望它会在 Linux 或 64 位 Windows 上运行。由于有 NTVDM 组件,它可以在 32 位 Windows 上运行,但它仍然是一个 DOS 程序。
  • 如果您希望此代码在 Linux/64 位 Windows/OSX 或其他一些操作系统中运行,您将需要一个模拟器。 DOSBox 是一种在虚拟 x86 环境中运行 DOS 程序的流行工具。

标签: assembly x86 nasm


【解决方案1】:

在您的代码中发现的错误几乎从来都不是编译器错误。第 14 行说 ASSUME CS:CSEG, DS:DSEG,这是 MASM 告诉汇编器应该使用哪些段寄存器来寻址段 CSEGDSEG 的方式。但是,您声明的不是这些段(别名 sections),而是 .data.text.code。除此之外,NASM doesn't ASSUME。注释掉第 14 行并声明 DATACODE 部分,这在 DOS 程序中很常见。

NASM 要求对内存变量内容的引用放在方括号中。 而不是
MOV CELC,AL ; MOVE THE INPUT VALUE TO 'CELC' 您需要MOV [CELC],AL 等。或者使用未使用的寄存器 BX、SI、DI 代替内存变量。顺便说一句,最好将温度计算为 16 位有符号整数,否则您将被限制在 0..255 度的范围内。

还要修改DOS function 并集中到AHINT 21h 之前的正确功能标识符。您需要AH=09h 来显示提示。不要忘记当用户在键盘上输入5时,DOS函数AH=1AL中返回35h,这不是你应该计算的值。

我建议从一些 HelloWorld 示例开始,学习在 DOSBox 中使用 TLINK 和 TurboDebugger,并且只有在一切正常后,逐步添加更多功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多