


Бесконечный цикл masm, хотя тут нет ошибок....
; *************************************************************************
; 32-bit Windows Console Hello World Application - MASM32 Example
; EXE File size: 2,560 Bytes
; Created by Visual MASM ( http://www.visualmasm.com )
; *************************************************************************
.386 ; Enable 80386+ instruction set
.model flat, stdcall ; Flat, 32-bit memory model (not used in 64-bit)
option casemap: none ; Case insensitive syntax
; *************************************************************************
; MASM32 proto types for Win32 functions and structures
; *************************************************************************
include c:\masm32\include\masm32rt.inc
includelib c:\masm32\lib\kernel32.lib
; *************************************************************************
; Our data section. Here we declare our strings for our message
; *************************************************************************
; Процедура для определения центра экрана по оси X и Y
.data
N dd ?
A dd 30 dup(?)
B dw 30 dup(?)
C1 dw 30 dup(?)
Leng dw 6
BufAdr dw 0
TextMessage1 db "Правило построения массива С:" ,0
TextMessage2 db "A(i): A(i)>B(i)",0
TextMessage3 db "C(i)=<",0
TextMessage4 db "B(i): B(i)>=A(i)",13,10,10,0
InputBuffer db 10 dup(?)
CRD COORD <?> ; структура координат
csbi CONSOLE_SCREEN_BUFFER_INFO <>
dOut dd ?
.code
start:
invoke AllocConsole ; запросим консоль
mov cx,16
lab_cycl:
print "A"
loop lab_cycl
inkey "Для завершения работы программы нажмите любую клавишу!"
exit ; выход из приложения
end start
Проблема решилась. Возможно, cx как-то изменятется при выводе. Цикл с другим регистром работает нормально
1) исходник 32-битный, а задаётся только регистр cx вместо ecx. В старших битах окажется произвольное значение и цикл будет выполнятся миллиарды раз.
2) Если при корректном значении ecx все равно будет вечный цикл - значит вызов print портит значение ecx - нужно сохранять/восстанавливать перед вызовом