Assembly 汇编:获取utf8字符函数的帮助
尝试编写一个汇编函数,返回utf-8文本中给定位置的字符 我已经尝试了很多解决方案,但我不能让它正常工作。这就是我到目前为止所做的:Assembly 汇编:获取utf8字符函数的帮助,assembly,x86,Assembly,X86,尝试编写一个汇编函数,返回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: cmp
.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
但它不会返回正确的字符
8(%ebp)
-而不是4(%ebp)
,它包含返回地址%ecx
之后,而不是之前,增加%eax
我应该返回第n个字节,而不是我写的字符。。。我试着做了一些改变,结果几乎是对的。但是我得到的字节比我不想要的字节早,似乎…我认为第一个参数是在4(%ebp)处找到的,返回地址是在0(%ebp)或仅仅是(%ebp)…在进入
utf8\u get
时,返回地址是在(%esp)
,第一个参数是在4(%esp)
。但是开场白push%ebp;movl%esp,%ebp
在复制堆栈指针之前,在推送过程中将堆栈指针递减4字节-因此,在旧的%ebp
位于(%ebp)
之后,返回地址位于4(%ebp)
,第一个参数位于8(%ebp)
。