String 用汇编语言将字符存储在内存位置
我正在尝试用汇编语言编写一个程序,它将字符串STRVAR中的所有字母“T”替换为“U”,并将新字符串放入输出中。我认为我应该在整个循环过程中将每个字符逐个存储在输出中,尽管在对mov进行了多次尝试和错误处理之后,我已经没有办法将字符存储在新的内存位置String 用汇编语言将字符存储在内存位置,string,assembly,replace,x86,character,String,Assembly,Replace,X86,Character,我正在尝试用汇编语言编写一个程序,它将字符串STRVAR中的所有字母“T”替换为“U”,并将新字符串放入输出中。我认为我应该在整个循环过程中将每个字符逐个存储在输出中,尽管在对mov进行了多次尝试和错误处理之后,我已经没有办法将字符存储在新的内存位置 STRVAR db "ACGTACGTCCCTTT",0 OUTPUT times 21 db 0 section .text global CMAIN CMAIN: ;write your code here
STRVAR db "ACGTACGTCCCTTT",0
OUTPUT times 21 db 0
section .text
global CMAIN
CMAIN:
;write your code here
lea esi, [STRVAR]
L1:
mov al, [esi]
cmp al, 0
JE FINISH
cmp al, 'T'
JE REPLACE
JNE CONTINUE
inc esi
jmp L1
REPLACE:
;store character here
inc esi
jmp L1
CONTINUE:
;store character here
inc esi
jmp L1
FINISH:
xor eax, eax
ret
我遵循Jester共享的信息,最终让程序根据规范中的说明工作。我意识到我需要添加
section.data
,并引入了另一点,在本例中,leaedi,[OUTPUT]
来存储每个字符并使用它打印新字符串
%include "io.inc"
section .data
STRVAR db "ACGTACGTCCCTTT",0
OUTPUT times 21 db 0
section .text
global CMAIN
CMAIN:
;write your code here
lea esi, [STRVAR]
lea edi, [OUTPUT]
L1:
mov al, [esi]
cmp al, 0
JE FINISH
cmp al, 'T'
JE REPLACE
JNE CONTINUE
inc esi
inc edi
jmp L1
REPLACE:
mov byte[edi], 'U'
inc esi
inc edi
jmp L1
CONTINUE:
mov byte[edi], al
inc esi
inc edi
jmp L1
FINISH:
mov byte [edi], 0
PRINT_STRING OUTPUT
PRINT_DEC 1, [edi] ;check if the terminating 0 is also included
xor eax, eax
ret
我遵循Jester共享的信息,最终让程序根据规范中的说明工作。我意识到我需要添加
section.data
,并引入了另一点,在本例中,leaedi,[OUTPUT]
来存储每个字符并使用它打印新字符串
%include "io.inc"
section .data
STRVAR db "ACGTACGTCCCTTT",0
OUTPUT times 21 db 0
section .text
global CMAIN
CMAIN:
;write your code here
lea esi, [STRVAR]
lea edi, [OUTPUT]
L1:
mov al, [esi]
cmp al, 0
JE FINISH
cmp al, 'T'
JE REPLACE
JNE CONTINUE
inc esi
inc edi
jmp L1
REPLACE:
mov byte[edi], 'U'
inc esi
inc edi
jmp L1
CONTINUE:
mov byte[edi], al
inc esi
inc edi
jmp L1
FINISH:
mov byte [edi], 0
PRINT_STRING OUTPUT
PRINT_DEC 1, [edi] ;check if the terminating 0 is also included
xor eax, eax
ret
您可以为输出引入另一个指针,通常是
edi
。然后只需使用一个mov
,就像在您的加载中一样,但反向使用。是什么导致了您的问题?@Jester我尝试了您建议的解决方案,但我不确定是否正确实现了它,因为我引入了另一个指针lea edi,[OUTPUT]
,然后添加了mov byte[edi]、'U'
和mov byte[edit],al
。有什么我遗漏的吗?这些都是正确的(除了打字错误)。您还需要inc-edi
。哦,感谢您指出输入错误(我将确保更正该错误),我还将inc-edi
包含在L1下,替换并继续。构建是成功的,尽管每次我运行程序时,它都会崩溃。我是否执行不正确?请确保顶部还有一个部分。数据
,否则字符串将进入默认部分,即.text
,并且是只读的。您可以为输出引入另一个指针,通常是edi
。然后只需使用一个mov
,就像在您的加载中一样,但反向使用。是什么导致了您的问题?@Jester我尝试了您建议的解决方案,但我不确定是否正确实现了它,因为我引入了另一个指针lea edi,[OUTPUT]
,然后添加了mov byte[edi]、'U'
和mov byte[edit],al
。有什么我遗漏的吗?这些都是正确的(除了打字错误)。您还需要inc-edi
。哦,感谢您指出输入错误(我将确保更正该错误),我还将inc-edi
包含在L1下,替换并继续。构建是成功的,尽管每次我运行程序时,它都会崩溃。我是否执行不正确?请确保顶部还有一个部分。data
,否则字符串将进入默认部分,即。text
,并且是只读的。