汇编:帮助获取utf8 char函数

时间:2011-05-01 12:31:50

标签: assembly x86

尝试编写一个汇编函数,该函数以utf-8文本返回给定位置的char。

我尝试了很多解决方案,但我无法正常工作。这就是我到目前为止所做的:

    .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

参数是unsigned char *和int。

但它没有返回正确的字符。

1 个答案:

答案 0 :(得分:0)

  1. 最大的问题是第一个参数位于8(%ebp) - 而不是4(%ebp),其中包含返回地址。
  2. 我认为您希望在检查%eax之后增加%ecx,而不是之前。
  3. 你真的是指UTF-8吗? UTF-8是一个多字节字符编码: n th UTF-8 字符不一定是 n < / i> th 字节(计算字符和解码你感兴趣的字符需要花费更多的精力)。