Как создать диапазон M..N с оболочкой для RandomRange 0..N-1? Понимание существующей реализации - PullRequest
0 голосов
/ 22 марта 2020

Нужна помощь в создании улучшенной версии процедуры 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 отрицательным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...