Игорь Пашев - НОД на ассемблере (x86, 32 бита, линукс)

Jul. 4th, 2011

12:39 am - НОД на ассемблере (x86, 32 бита, линукс)

Previous Entry Add to Memories Tell A Friend Next Entry

https://github.com/ip1981/GCD/blob/master/assembler/gcd-x86-linux.s

Невероятный по красоте способ перевода строки в целое число
(http://www.cyberforum.ru/archive/t-214807.html):

str2uint_loop:
    lodsb # going forward from esi
    # HINT: assert '0' <= al <= '9'
    lea    (%ebx, %ebx, 4), %ebx # ebx = 4*ebx + ebx = 5*ebx ;-)
    lea -48(%eax, %ebx, 2), %ebx # ebx = 2*ebx + %eax - 48
                                 # ebx is multiplied by 10 each iteration,
                                 # eax-48 will be multiplied at the next iteration ;-)
    loop str2uint_loop
    ret


Алсо поупражнялся с GDB.
Алсо в планах Солярка и 64 бита.

Tags: , , ,
(Оставить комментарий)