0

これは、この無限ループを修正する必要がある複数のループを含むコードです。誰でも修正できますか?

.data   



 a dword 10

 b dword 1

 d dword 35



 delta dword ?
.code

main PROC

  call clrscr

  mov dh,0

  mov ecx,10

  push ecx

  row:
mov dl,01
mov ecx, a
mov eax,'*'
line:

       call gotoxy

       call writechar

       inc dl

    loop line



    mov ecx, b

    mov eax,'p'

   line1:

     call gotoxy

     call writechar

     inc dl

   loop line1

   mov ecx, d

    mov eax,'c'

   line2:

     call gotoxy

     call writechar

     inc dl

   loop line2

   inc dh

   mov dl,1

   dec a

   inc b

   inc b

   dec d

   dec d

   dec d

   pop ecx

  loop row

無限ループに役立ちます。

4

2 に答える 2

0

loop命令を使用してネストされたループを作成しないでください。

理由はわかりませんが、最近の SO では、loop命令 (および MASM) を使用していくつかのネストされたループを作成しようとしている初心者が多くいます。これらはおそらく、アセンブリでネストされたループを作成する方法を気にする愚かな教師です。

だから、やめて!それはまったく悪い習慣です。命令を忘れloopて、ループ カウンターに別のレジスタを使用します。それはとても簡単で明確です:

        mov  edx, 1000
loop1:
        mov  ecx, 2000
loop2:
        mov  ebx, 3000
loop3:
        ......
        dec  ebx
        jnz  loop3

        dec  ecx
        jnz  loop2

        dec  edx
        jnz  loop1

また、おそらくいくつかのレジスターが変更されるため、どのレジスターgotoxyとプロシージャーが保持されているかを確認してください。writechar特にループで使用するレジスタを確認してください。

于 2013-11-06T07:21:53.923 に答える