Таблица умножения с использованием вложенных циклов

Сборка x86 MASM

Я создал следующий код, который будет печатать таблицу умножения, которая умножает 1 * 1, 1 * 2, 1 * 3,..., 1 * 10. Я хочу создать непрерывную таблицу 1 * 1, 1 * 2, 1 * 3,..., 1 * 10 и другую таблицу 2 * 1, 2 * 2, 2 * 3,..., 2 * 10 и 3 * 1, 3 * 2, 3 * 3,..., 3 * 10 и т. Д. До 10 * 10 с использованием циклов, выписывая каждую процедуру отдельно. Однако у меня возникают трудности при создании петель. Пожалуйста, кто-нибудь может показать мне. Огромное спасибо.

INCLUDE Irvine32.inc
.data
  a dword 1
  b dword 1
  z dword ?
  times byte " * ",0
  equals byte " = ",0
.code
main PROC
        call clrscr
        mov ecx,10
        outloop :
         push ecx
         call printtimes

         call crlf
         inc a
         pop ecx
        loop outloop

        call crlf 

        mov ecx,10
        mov a, 1
        outloop1 :
        push ecx 
        call printtimes1 

        call crlf 
        inc a 
        pop ecx 
        loop outloop1 

        call crlf 

        mov ecx,10
        mov a, 1
        outloop2 :
        push ecx 
        call printtimes2 

        call crlf 
        inc a 
        pop ecx 
        loop outloop2 


        exit

main ENDP



    mymul proc
        mov ecx,a
        mov eax,0
        myloop:
         add eax,b
        loop myloop
        mov z,eax

        ret
    mymul endp



    mymul1 proc

        mov ecx,a
        mov eax,0
        mov b, 1
        inc b
        myloop:
         add eax,b
        loop myloop
        mov z,eax

        ret
    mymul1 endp


    mymul2 proc

        mov ecx,a
        mov eax,0
        mov b, 2
        inc b
        myloop:
         add eax,b
        loop myloop
        mov z,eax

        ret
    mymul2 endp




    printtimes proc

      call mymul
        mov eax,a
        call writedec
        mov edx, offset times
        call writestring
        mov eax,b
        call writedec
        mov edx,offset equals
        call writestring
        mov eax,z
        call writedec
        call crlf
        ret 
     printtimes endp

         printtimes1 proc
      call mymul1
        mov eax,a
        call writedec
        mov edx, offset times
        call writestring
        mov eax,b
        call writedec
        mov edx,offset equals
        call writestring
        mov eax,z
        call writedec
        call crlf
        ret 
     printtimes1 endp

     printtimes2 proc
      call mymul2
        mov eax,a
        call writedec
        mov edx, offset times
        call writestring
        mov eax,b
        call writedec
        mov edx,offset equals
        call writestring
        mov eax,z
        call writedec
        call crlf
        ret 
     printtimes2 endp

end main

Результаты (я хочу этот результат, используя вместо этого вложенные циклы, но у меня возникают трудности при его создании):

1*1=1 
2*1=2 
3*1=3 
4*1=4 
5*1=5
6*1=6 
7*1=7 
8*1=8 
9*1=9 
10*1=10 

1*2=2 
2*2=4 
3*2=6 
4*2=8 
5*2=10
6*2=12 
7*2=14 
8*2=16 
9*2=18 
10*2=20 


1*3=3 
2*3=6 
3*3=9 
4*3=12 
5*3=15
6*3=18 
7*3=21 
8*3=24 
9*3=27 
10*3=30 

1 ответ

Решение
   mov ecx,10
outloop :
    push ecx
    call printtimes
    call crlf
    inc a
    pop ecx
    loop outloop
    call crlf

Весь предыдущий ваш код для создания 1-й таблицы (1*1=1 2*1=2 ... 10*1=10)
Чтобы начать использовать вложенные циклы для вывода всех таблиц, вам нужно окружить этот код дополнительным циклом, который будет

  • сбросить переменную до 1
  • увеличить переменную b

Вы продолжаете повторять этот дополнительный (внешний) цикл, пока переменная b не станет больше 10.
Для упрощения вы можете отказаться от использования ECX зарегистрироваться для внутреннего цикла, а также следить за тем, чтобы значение переменной a становилось больше 10.

    mov     b, 1
OuterLoop:
    mov     a, 1
InnerLoop:
    call    printtimes
    call    crlf
    inc     a
    cmp     a, 10
    jbe     InnerLoop
    call    crlf
    inc     b
    cmp     b, 10
    jbe     OuterLoop

Вам больше не нужны printtimes1, printtimes2, mymul1 и mymul2 в вашей программе.

Другие вопросы по тегам