0

アセンブリで for ループを実行しようとしています。TASM と TLINK を使用しています。教授がくれたライブラリもありますが、すべて自分でやろうとしていますが、驚いたことに、うまくいきません。そのため、教授のコードをコピーして貼り付けただけで、同じエラーが発生します。エラーは次のとおりです。

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

私は多くの場所を調べましたが、役立つものを見つけることができませんでした。助言がありますか?また、私の教授は足を骨折しているため、私たちに授業を教えていないので、私たちはちょっとうんざりしています.

4

2 に答える 2

0

メモリ位置に即値を書き込むための命令では、アクセスするバイト数を指定する必要があります。1 バイト、ワード、または dword のみです。

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

ダーク

于 2014-02-27T08:09:19.880 に答える