Объясните алгоритм подпрограммы

Объясните алгоритм подпрограммы
VAL proc near
push bx ; сохранение
push cx ; регистров
push dx ; в стеке
lea bx, N_INPBUF ; адрес начала числа
mov cl, N_FACTLEN ; фактическая длина числа
xor ch, ch ; расширить до сх
xor ax, ax
mov dl, 10 ; основание системы счисления
VAL1: imul dl ; умножаем на основание
mov dh, [bx]
sub dh, "0" ; преобразуем его в цифру
add al, DH ; добавляем к результату
inc bx ; на следующий символ
loop VAL1
cmp ax, 255
clc ;сброс флага CF
jle VAL2
stc ; если результат больше 255 установить флаг CF=1
VAL2: pop dx ; восстановить
pop cx ; регистры
pop bx ; из стека
ret
VAL endp

  • Вобщем то этот код имеет малое отношение к системам счисления. Если вкратце то у нас в памяти есть некая символьная строка c числом, например "143". И что мы делаем? Мы в цикле чиаем поочереди все цифирки и из них формируем число. Изначально в результате имеем 0, и на каждой итерации будем умножать результат на основание системы те 10.
    Итерация 1: 0*10=0. Читаем первую цифру 1 и прибавляем к результату, получим 1.
    Итерация 2: 1*10=10.Читаем вторую цифру 4 и прибавляем к результату, получим 14.
    Итерация 3: 14*10=140.Читаем трейтюю цифру 3 и прибавляем к результату, получим 143.
    Пробегим по коду:
    ...
    lea bx, N_INPBUF ; адрес начала числа
    mov cl, N_FACTLEN ; фактическая длина числа
    xor ch, ch ; чистим ch
    xor ax, ax ; чистим ax, здесь будет результат
    mov dl, 10 ; основание системы счисления
    VAL1:
    imul dl ; умножаем ax=ax*10
    mov dh, [bx] sub dh, "0" ; преобразуем символ в цифру (ASCII)
    add al, DH ; прибавляем к результату
    inc bx ; на следующий символ
    loop VAL1
    ....
    надеюсь понятно
  • Сомневаюсь, что здесь много кто ассемблер знают.. . А алгоритм как Я понял такой же как и в обычном переводе.