【问题标题】:Assembly: copy contents of string into another register汇编:将字符串的内容复制到另一个寄存器中
【发布时间】:2015-03-22 22:17:58
【问题描述】:

我无法弄清楚如何将一个字符串的内容复制到另一个字符串中。这是我正在使用的内容:给定寄存器rbx 中的字符串地址,我需要将该字符串地址的内容复制到另一个寄存器(参数4)rdx

这是我目前正在做的事情

mov rbx, qword[rsi+16] ; rbx = some string address
; performs checks on string
; etc..
; string passes tests so
mov rbx, qword[rbx]
mov qword[rdx], rbx

问题在于qword 只允许我将 8 个字符存储到 rdx 中,而实际最大值为 80(只是我在程序开始时定义的任意最大值)。我当然可以将qword 更改为dqword 但这并不能解决我的问题,因为它会从8 个字符变为16 个字符。如果我将字符串Arguments 传递到上面的函数中,我将返回Argument,因为复制分配只处理 8 个字符。

我提前道歉,因为这可能是一个非常简单的解决方案,但我对组装很陌生。如何将一个字符串的内容移动到另一个字符串?

【问题讨论】:

  • 寄存器中只有字符串的地址。如果你想复制一个字符串,你需要以某种方式分配空间(取决于你的环境)并在那里复制字符,然后将该地址加载到寄存器中。

标签: assembly x86 yasm


【解决方案1】:

你为什么不写一个循环来传输 80 个字节?

 mov rcx,10
again:
 mov rax, qword[rbx+rcx*8-8]
 mov qword[rdx+rcx*8-8], rax
 loop again

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 2022-01-02
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多