第22部分- Linux x86 64位汇编 字符串传送REP
REP指令
REP指令本身不执行什么操作,指令可以按照特定次数重复执行字符串指令,由ECS寄存器中的值进行控制。类似循环,但是不需要额外的loop指令。
Rep指令重复执行紧跟其后的字符串指令,知道ECX寄存器中的值为0.
此外,还有一些REP指令如下:
其中REPE和REPZ同义词。
REPNE和REPNZ指令是同义词。
示例
.extern printf ;//调用外部的printf函数
.section .data
value1:
.ascii "This is a test string.\n"
.section .bss
.lcomm output, 24
.section .text
.globl _start
_start:
nop
leal value1+22, %esi
leal output+22, %edi
movl $23, %ecx
std
rep movsb
cld;//这里要清理DF,不然输出函数printf会包core dump
movq $value1,%rdi
call printf
mov $60,%rax
syscall
as -o reptest.o reptest.s
ld -o reptest reptest.o -lc -I /lib64/ld-linux-x86-64.so.2