我是靠谱客的博主 成就钢笔,最近开发中收集的这篇文章主要介绍Intel汇编-递减传送字符串,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

# An example of the MOVS instructions (递减传送字符串)
#
# MOVS    把字符串从一内存位置传送到另一个内存位置的简单途径。
# movsb : 8bit
# movsw : 16bit
# movsl    : 32bit
#
# MOVS使用隐含的源和目标操作数。
# 隐含的源操作数是ESI寄存器,它指向源字符串的内存位置。 ESI(S)->source
# 隐含的目标操作数是EDI寄存器,它指向字符串要被复制到的目标内存位置。EDI(D)->destination
#
# 每次执行MOVS时,数据传送后,ESI和EDI寄存器会自动改变,为另一次传送做准备。但有时候这会变得有些难于处理。
# ESI和EDI自动传递增,也可能自动传递减,这取决于EFLAGS寄存器中的DF标志。
# DF清零, 增, DF被设置,减。
#
# CLD 用于将DF标志清零
# STD 用于设置DF标志
#
#
# 两种方式加载ESI、EDI值。
# 间接寻址:通过在内存位置标签前面添加美元符号,内存位置的地址被加载到ESI或EDI寄存器中
# movl $output, %ed        # 把output标签的32位内存位置传送给EDI
#
# LEA:加载一个对象的有效地址。
# leal output, %edi
#
    .section .data
value1:
    .ascii "This is a test string.n"

    .section .bss
.lcomm output, 23

    .section .text
    .globl main
main:
    nop
    leal value1+22, %esi    # 指向字符串的末尾
    leal output+22, %edi    # 指output的末尾
    std
    movsb
    movsw
    movsl

    movl $1, %eax
    movl $0, %ebx
    int $0x80

# gcc -g -o 02 02-movs.s -m32
# x/23b &output
# 0x56559028 <output>:    ""
# 0x56559029 <output+1>:  ""
# 0x5655902a <output+2>:  ""
# 0x5655902b <output+3>:  ""
# 0x5655902c <output+4>:  ""
# 0x5655902d <output+5>:  ""
# 0x5655902e <output+6>:  ""
# 0x5655902f <output+7>:  ""
# 0x56559030 <output+8>:  ""
# 0x56559031 <output+9>:  ""
# 0x56559032 <output+10>: ""
# 0x56559033 <output+11>: ""
# 0x56559034 <output+12>: ""
# 0x56559035 <output+13>: ""
# 0x56559036 <output+14>: ""
# 0x56559037 <output+15>: ""
# 0x56559038 <output+16>: ""
# 0x56559039 <output+17>: ""
# 0x5655903a <output+18>: ""
# 0x5655903b <output+19>: "ng.n"
# 0x56559040:     ""
# 0x56559041:     ""
# 0x56559042:     ""

# 向前移动时填充了7个内存位置,向后只填充了4个内存,为何?
#
# 和值如何被复制有关。
# 尽管ESI、EDI向后计数,MOVSW和MOVSL指令还是按照向前的顺序获得内存位置。当MOVSB指令完成时,它使ESI和EDI递减1,
# 但是MOVSW获得两个内存位置。同样,当MOVSW完成时,它使ESI和EDI递减2,但是MOVSL获得4个内存位置。
#
# 解决这个问题的方法是使每条指令使用相同长度的块进行传送。
#
# 记住:STD向后处理字符串,MOVSW和MOVSL仍旧向前获取内存位置。

最后

以上就是成就钢笔为你收集整理的Intel汇编-递减传送字符串的全部内容,希望文章能够帮你解决Intel汇编-递减传送字符串所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部