微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以汇编语言终止字符串?

如何解决如何以汇编语言终止字符串?

我想知道如何正确地以汇编语言对字符串进行空终止:我所做的只是设置movq $ 0(position_to_terminate),我认为这将终止我的字符串。但是,当我打印出缓冲区时,在null终止符之后仍然有很多东西:

58   ASSERT(0 == strcmp(buf,"48"));
(gdb) print buf
$1 = "48\000\000\000\000\000\000\000\000\246\367\377\177\000"
(gdb) n

Program received signal SIGSEGV,Segmentation fault.
0x0000000000400a78 in testFormatByteAsHex (objs=objs@entry=0x603690)

我对此感到非常困惑,因为它可以在c语言中工作,还有其他方法可以终止汇编语言中的字符串吗?预先谢谢您。这是我编写的汇编函数:该函数的目的是读取2个参数,第一个是0到255(%rdi)之间的值,第二个是length> = 2的数组(%rsi)并将十六进制表示形式存储在%rsi数组中。

hex_format_byte_as_hex:
    subq $8,%rsp
    movq $0,%r10
    movq $0,%rdx
    

.Lhex_format:
    cmpq $1,%r10
    jg .Lreturn1
    
    movq %rdi,%rax /*store input into %rax*/
    movq $16,%rbx  /*store 16 into %rbx*/
    idivq %rbx     /*store dividend in rax,and remainder in rdx*/

    cmpq $10,%rdx
    jge .Lhex
    addq $48,%rdx
    jmp .Lstore

.Lhex:
    addq $87,%rdx
.Lstore:
    movq %rdx,(%rsi,%r10) /*store remainder in %rsi[0]*/
    addq $1,%r10 /*increase %r10 by 1*/
    movq $0,%rdx
    movq %rax,%rdi
    
    jmp .Lhex_format

.Lreturn1:
    
    movq $0,%r11
    movq $1,%r10
    
    movq (%rsi,%r10),%r12
    movq (%rsi,%r11),%r13
    movq %r12,%r11)
    movq %r13,%r10)

    
    
    movq $2,%r10
    movb $0,%r10)
    addq $8,%rsp


    ret

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。