对于汇编,"语法错误"没有错误

时间:2013-05-08 07:58:28

标签: assembly tasm

我正在尝试在汇编中执行for循环。我正在使用TASM和TLINK。我还有一个我的教授给我的图书馆,但我正在尝试自己做所有的事情,令我惊讶的是,它没有用。所以,我只是复制粘贴我的profesor的代码,我收到同样的错误。错误如下。

我可以使用TASM编译,即使我创建.exe,我运行它,并在运行它之后,做了它应该做的事情,它只是说“语法错误”。

这是我的代码:

MODEL small
.stack 100h
    N   equ 20
.DATA
    mensaje     db "Hola mundo",10,13,"$"
    mensajefin  db  "Finalizo el for, presiona cualquier tecla para terminar$"
    i           db  (?)
.code
imprimefor  PROC
            mov ax,@data
            mov ds,ax
            mov ah,03h
            int 10h
            mov [i],0
@@for_cmp:  cmp [i],N
            ja @@for_end
            mov dx,offset mensaje
            mov ah,09h
            int 21h
            inc [i]
            jmp @@for_cmp
@@for_end:  mov dx,offset mensajefin
            mov ah,09h
            int 21h
            mov ah,01h
            int 21h
            mov ax,4c00h
            int 21
            ENDP
    END

这是我的教授:

MODEL small
   .STACK 100h

   ;----- Insert INCLUDE "filename" directives here
   ;----- Insert EQU and = equates here
 INCLUDE procs.inc

       LOCALS

      N     equ 20
      CR    EQU 13
      LF    EQU 10

   .DATA
      mens       db  'Hola Mundo',CR,LF,0
        i        db (?)


   .CODE
    ;-----   Insert program, subrutine call, etc., here

    Principal   PROC
                mov ax,@data    
                mov ds,ax       

                call clrscr

                ; i=0
                mov [i],0

                ; i<n
     @@cmp_for: cmp [i],N
                ja @@fin_for

                mov al,[i]
                inc al
                add al,30h    ; convierte a ASCII

                call putchar

                mov ax,'-'
                call putchar                

                mov  dx,offset mens
                call puts

                ; i++
                inc [i]
                jmp @@cmp_for

     @@fin_for: call getch

                mov ah,04ch      ; fin de programa
                mov al,0             ;
                int 21h              ; 

                ENDP
         END

我看了很多地方,但我找不到任何有用的东西。有什么建议?我的教授腿也断了,所以他没有给我们上课,所以我们有点搞砸了。

2 个答案:

答案 0 :(得分:3)

我不会打电话给你的可执行文件for.exe,这只是在惹麻烦。

FOR实际上是一个DOS / Windows内部命令,因此,如果您在命令提示符下键入for,它会抱怨:

c:\Users\Pax> for
The syntax of the command is incorrect.

您可以使用完整路径规范解决此问题,如以下脚本中所示:

c:\Users\Pax> type for.cmd
@echo off
echo hello

c:\Users\Pax> for
The syntax of the command is incorrect.

c:\Users\Pax> .\for
hello

您可以看到,虽然cmd.exefor视为内部命令,但 filespec .\for被视为外部可执行文件(批处理文件中)这种情况,但你的exe文件。)

答案 1 :(得分:0)

有关将立即值写入内存位置的说明,我们需要指定要访问的字节数,只需要一个字节,一个字或一个双字。

mov byte ptr [i],0 ; MASM
mov byte [i],0    ; NASM

德克

相关问题