x86-64汇编中遍历存储于rdi寄存器的长字符串的高效方法
x86-64汇编高效遍历字符串(地址存于rdi寄存器)
现有一长字符串,其地址已存入rdi寄存器,需要遍历每个字符。当前尝试的方法效率低下,还得单独编写获取字符串长度的逻辑来终止循环,想找x86-64汇编里更优的实现方式。之前找到的相关参考不适用,因为这个场景里字符串是通过寄存器传递的,不是初始定义好的。
当前尝试的代码:
.global function test: .asciz "\nTest:`%c" function: pushq %rbp movq %rsp, %rbp pushq %rdi pushq %rdi movq (%rdi) %rax movq $0, %rbx movq $8, %rdx pushq %rax pushq %rbx loop: movzb %al, %rcx movq %rcx, %rsi movq $test, %rdi call printf movq (%rsp), %rbx movq 8(%rsp), %rax movq $8, %rdx shr $8, %rax incq %rbx cmpq %rbx,%rdx jne loop next_byte: add $8, %rdi movq (%rdi) %rax movq $0, %rbx pushq %rcx pushq %rdx pushq %rax pushq %rbx jmp loop movq %rbp, %rsp popq %rbp ret
内容的提问来源于stack exchange,提问作者watson
相关产品推荐
相关产品推荐

