Лестницы ни какой нет.
При срабатывании инструкции на адресе НР:
mov [ebx],eax
в eax лежит текущее значение НР, в ebx временно лежит адрес НР ГГ, т.е. этой инструкцией записываются текущие НР в адрес НР ГГ.
mov ebx,eax
эти же текущие НР записываются в ebx, по видимому дальше по коду игры текущее значение НР будет ещё использоваться.
mov eax,[esp+18]
загрузка в регистр eax (который на данный момент кода свободен) какого-то значения из стека (значение находится на 6 позиции от верха стека 18(HEX)=24, 24/4=6), esp всегда - это указатель на вершину стека. Стек используется для экономии памяти, т.е. при загрузке значения в стек не нужно куда-то записывать указатель на это значение (т.е. при каждой загрузке в стек мы экономим 4 байта на указателе и ещё на доп.инструкциях.) Про стек, его организацию почитай например статью из вики:
Что точно хранится в этом моменте на 6 позиции стека без игры тебе не скажет никто, Это может быть урон, рассчитанный ранее или например наоборот лечение рассчитанное ранее.
Ну допустим это урон.
Тогда дальше возможен например такой код.
cmp ebx,eax // сравниваем текущее значение НР ГГ с нанесённым по нему уроном.
jbe @F // если меньше или равно, то прыгаем например на функцию смерти ГГ.
sub ebx,eax // если больше, то отнимаем от НР ГГ урон.