嗨,大家好,我遇到了一些烦人的问题,所以我尝试编写代码以反转小字符串顺序
我已经知道了:
.section .data
string:
.ascii "AAAAAABBBBBB"
length:
.quad . -string #Dot = 'here'
.section .text
.globl _start #Make entry point visible to linker
_start:
movl $4, %eax #4=write
movl $1, %ebx #1=stdout
movl $string, %ecx
movl length, %edx
int $0x80 #Call Operating System
movl length,%edi #counter
shrl $1,%edi #half of string
movl $0,%ecx #start from index one
movl length,%edx #start from end
reverse:
movl string(,%ecx,1),%eax
movl string(,%edx,1),%ebx
movl %eax,string(,%edx,1)
movl %ebx,string(,%ecx,1)
inc %ecx
dec %edx
dec %edi
loop reverse #looping
movl $4, %eax #4=write
movl $1, %ebx #1=stdout
movl $string, %ecx
movl length, %edx
int $0x80 #Call Operating System
movl $0, %ebx #Make program return syscall exit status
movl $1, %eax #1=exit
int $0x80 #Call System Again
而且它无法正常工作,在gbd中的cuz使我在寄存器中得到错误的值
movl string(,%ecx,1),%eax或下一步,我认为A字母应该在%eax值中,但它没有任何想法吗?
你应该处理的字节不多头,所以使用movb
具有8个寄存器(al
和bl
,例如)。另外,该LOOP
指令会ECX
自动使用,您可能JNZ
希望重复执行直到EDI
达到零。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句