我正在尝试在汇编中执行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
我看了很多地方,但我找不到任何有用的东西。有什么建议?我的教授腿也断了,所以他没有给我们上课,所以我们有点搞砸了。
答案 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.exe
将for
视为内部命令,但 filespec .\for
被视为外部可执行文件(批处理文件中)这种情况,但你的exe
文件。)
答案 1 :(得分:0)
有关将立即值写入内存位置的说明,我们需要指定要访问的字节数,只需要一个字节,一个字或一个双字。
mov byte ptr [i],0 ; MASM
mov byte [i],0 ; NASM
德克