Сборка: Помогите с функцией get utf8 char - PullRequest
1 голос
/ 01 мая 2011

Попытка написать функцию сборки, которая возвращает символ в заданной позиции в тексте utf-8.

Я пробовал много решений, но я не могу заставить его работать успешно. Это то, что я до сих пор:

    .globl utf8_get
    .globl _utf8_get
utf8_get:
_utf8_get:
        pushl   %ebp
        movl    %esp, %ebp
        movl    4(%ebp), %eax
        movl    12(%ebp), %ecx

u_loop: cmpb    $0x0, (%eax)
        jz      n_fnd
        incl    %eax
        cmpl    $0x0, %ecx
        jz      fnd
        decl    %ecx
        jmp     u_loop

n_fnd:  movl    $-0x1, %eax
        popl    %ebp
        ret

fnd:    movzbl  (%eax), %eax
        popl    %ebp
        ret

Параметры без знака char * и int.

Но он не возвращает правильный символ.

1 Ответ

0 голосов
/ 01 мая 2011
  1. Самая большая проблема в том, что первый аргумент находится в 8(%ebp), а не 4(%ebp), который содержит адрес возврата.
  2. Я думаю, что вы хотите увеличить %eax после проверки %ecx, а не раньше.
  3. Вы действительно имеете в виду UTF-8? UTF-8 - это многобайтовая кодировка символов: n th UTF-8 , символ не обязательно n th байт (для подсчета и декодирования интересующего вас символа требуется чуть больше усилий).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...