Как мне положить конец бесконечному циклу в моей программе на языке ассемблера

# #assembly #x86 #infinite-loop #cpu-architecture

Вопрос:

Меня попросили написать программу, которая просит пользователя ввести свое имя, целое число и другое целое число, сложить два целых числа и затем отобразить сумму. Предполагается, что программа сделает это три раза, очистит экран после каждой итерации и установит курсор в середине экрана. Программа размещает курсор только в середине экрана для первого вопроса, а также бесконечно зацикливается. Пожалуйста, помогите исправить код.

 INCLUDE Irvine32.inc

.data
  prompt1 BYTE "Enter Your Name:",0
  var1 byte 20 DUP(?)
  bytecount DWORD ?

  prompt BYTE "Enter Integer:",0
  resultMsg BYTE "Sum of the two integers is:",0
  Int1 DWORD ?
  Int2 DWORD ?
  Sum  DWORD ?

.code
main PROC

  MOV ECX,3


L1:
  call Clrscr
  ;Move cursor to the middle of the screen

  MOV DH,13
  MOV DL,40
  CALL GoToXY

  MOV EDX,OFFSET prompt1
  Call WriteString
  MOV EDX,OFFSET var1
  MOV ECX,sizeof var1
  Call ReadString


  MOV EDX, OFFSET prompt
  CALL WriteString
  CALL ReadInt
  MOV Int1,EAX

  CALL WriteString
  CALL ReadInt
  MOV Int2,EAX

  ;Calculate Sum

  MOV EAX,Int1
  ADD EAX,Int2
  MOV Sum,EAX

  ;display sum

  MOV EDX, OFFSET resultMsg
  call WriteString
  MOV EAX,Sum
  call WriteInt

  call Crlf
  call WaitMsg
  loop L1
  exit

main ENDP
END main
 

Комментарии:

1. MOV ECX,sizeof var1 переигрывает ecx , что является вашим счетчиком циклов.

2. Спасибо, цикл заканчивается после трех итераций