У вас есть несколько проблем здесь.В основном это то, что вы не вызываете ОС для выхода из процесса.Решение состоит в том, чтобы вызвать ExitProcess :
.386
include \masm32\include\masm32rt.inc
.data
n BYTE 255
count BYTE 0
.code
start:
mov bl, 0
lp:
cmp bl, 8
jz endl
inc bl
shr n, 1
jc inccount
jmp lp
inccount:
inc count
jmp lp
endl:
invoke ExitProcess, 0
end start
Вы заметите, что я включил masm32rt.inc
, который содержит прототип функции и файл .lib
для ExitProcess.Кроме того, сравнение для bl должно быть 8, чтобы убедиться, что вы сместились 8 раз, а не 7.
Причина, по которой ваша программа раньше выглядела аварийно, была в том, что она не выполнялась должным образом, а не из-залюбая проблема переполнения.Если вы удалите inc bl
, оно никогда не прекратится, скрывая исходную проблему.(На самом деле это не совсем так, в конечном итоге он должен переполниться до 7, потому что вы получите целочисленное переполнение, и оно будет перенесено).