我有一个分配,我必须输入一个字符串和一个数字,并通过添加该数字返回字符串。我做了一个程序,但在Z之后它会返回尴尬的值,因为ascii,我想。如何纠正?
这是我的代码 -
section .text
global _start
_start:
mov ecx, len
mov esi, bang
mov edi, tang
loop_here:
lodsb
add al, 02
stosb
loop loop_here
cld
rep movsb
mov edx,20
mov ecx,tang
mov ebx,1
mov eax,4
int 0x80
mov edx,len2
mov ecx,newline
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
section .data
bang db 'password' ;source
len equ $-bang
newline db 0xa
len2 equ $ - newline
section .bss
tang resb 10
答案 0 :(得分:2)
loop_here: lodsb add al, 02 stosb loop loop_here
当加法产生的结果超出范围[a,z](正好在 z 之上)时,只需通过减去26来校正。
loop_here:
lodsb
add al, 02
cmp al, 'z'
jbe OK
sub al, 26
OK:
stosb
loop loop_here
loop loop_here cld rep movsb
rep movsb
毫无意义,因为此时ECX将在loop
正下方为零。 cld
放在 loop_here 标签之前。mov edx,20 mov ecx,tang mov ebx,1 mov eax,4 int 0x80
如果 tang 定义为 10 字节,为什么还要尝试写 20 字节?