# An example of using the LODS and STOS instruction (存储和加载字符串)
#
# LODS : 用于把内存中的字符串传送到EAX中。
# 使用ESI作为隐含的源操作数,必须包含要加载的字符串所在的内存地址。递增或递减(DF标志)ESI。
#
# STOS : 把字符串存放到另一个内存位置中。
# 使用EDI作为隐含的目标操作数。
# STOS真正能够提供的方便是和REP一起使用,多次把一个字符串值复制到大型字符串值中的时候。
# 如把空格字符(ASCII->0x20)复制到256字节的缓冲区区域。
#
.section .data
space:
.ascii " "
.section .bss
.lcomm buffer, 256
.section .text
.globl main
main:
nop
leal space, %esi
leal buffer, %edi
movl $256, %ecx
cld
lodsb
rep stosb
movl $4, %eax # 系统调用值 4 --> write
movl $1, %ebx # 要写入的文件描述符, 1 --> STDOUT
movl $buffer, %ecx # 字符串的开头
movl $24, %edx # 字符串的长度 write(STDOUT, buffer, 24)
int $0x80 # write(STDOUT, buffer, 24)
movl $1, %eax
movl $0, %ebx
int $0x80
# gcc -g -o 08 08-lods-stos.s -m32