2013-05-08 55 views
0

我想在汇编中做一个循环。我正在使用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 

我看了很多地方,但我一直没能找到任何帮助。有什么建议么?另外,我的教授腿断了,所以他没有给我们上课,所以我们有点儿拧。

+0

你有什么叫这个可执行程序? – paxdiablo 2013-05-08 08:03:02

+0

for.exe,哈哈我也注意到我没有翻译成英文的一些代码,哈哈对不起! Hola mundo意味着你好世界。 – 2013-05-08 08:05:51

回答

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.exe对待for作为内部命令时,文件规范.\for被视为外部可执行文件(在这种情况下是批处理文件,但在您的文件中为exe)。

+0

OHHHHH MEN!哈哈哈哈,你明白了,现在它正在工作。伙计,谢谢!哈哈这么小的事情会导致这样的问题。再次感谢。 – 2013-05-08 08:11:42

+1

@Hector,那没什么,我曾经把一个常量头文件从'const.h'缩短到'con.h',并想知道编译器为什么会挂起。原来,MSDOS用_any_扩展名处理'con'作为控制台设备'con:'意味着它正在等待我实际输入一个头文件:-)啊,这是我们漫长职业生涯中遇到的问题。 – paxdiablo 2013-05-08 08:14:20

+0

哈哈哦,是的,有时候我觉得我们的工程师对疼痛有一定的爱......哈哈。男人,我欠你的。 – 2013-05-08 08:18:35

0

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

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

德克