【发布时间】:2016-07-05 09:58:13
【问题描述】:
我有一个任务,我必须输入一个字符串和一个数字,然后通过添加该数字来返回字符串。我已经制作了一个程序,但是在 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
【问题讨论】:
-
是什么导致了您的问题?考虑算法还是实现它?
-
您可以使用
resb len+1而不是resb 10,因此它的长度始终与bang+newline 相同。或者只是len,因为您似乎将换行符与字符串分开?哦,所以它不会被修改。 -
哦,谢谢。假设我将 bang 更改为“wxyz”,那么它将返回“yz{|” ,但我希望它返回“yzab”。该怎么做?
-
如果结果 > 'z',减去 26 ('z'+1-'a')。