Нужна помощь в создании улучшенной версии процедуры RandomRange с именем BetterRandomRange. RandomRange выдает целое число от 0 до N - 1. Для процедуры BetterRandomRange я должен заставить ее сгенерировать число от M до N (m передается в EBX, а N в EAX).
Я нашел Блок кода из inte rnet, но я не понимаю, что в нем происходит. Может кто-нибудь, пожалуйста, объясните это?
.code
main PROC
mov ebx, -300 ; lower bound (m)
mov eax, 100 ; upper bound (n)
call BetterRandomRange
call WriteInt
;; Editor's note: missing ret
;; so main falls through into a tailcall to BetterRandomRange
BetterRandomRange PROC
sub ebx, eax
xchg ebx, eax
call RandomRange
neg ebx
sub eax, ebx
call writeint
ret
BetterRandomRange ENDP
Почему необходима инструкция "neg ebx"? Почему мы должны сделать EBX отрицательным?