Assembly 如何在汇编代码中执行外部子例程
我试图学习如何在外部文件中使用子程序。 所以我有一个名为shift的文件,它接收一个字符串,我试图将每个字符改为“a”。但是,我遇到了一个分割错误。 它将字符串和字符串长度作为参数发送Assembly 如何在汇编代码中执行外部子例程,assembly,x86-64,Assembly,X86 64,我试图学习如何在外部文件中使用子程序。 所以我有一个名为shift的文件,它接收一个字符串,我试图将每个字符改为“a”。但是,我遇到了一个分割错误。 它将字符串和字符串长度作为参数发送 extern printf, scanf extern shift global _start section .data format3 db "%s ",0 message1: db "1. Input New Message",10,
extern printf, scanf
extern shift
global _start
section .data
format3 db "%s ",0
message1: db "1. Input New Message",10,0
original: db "This is the original message.",10,0
len1: equ $ - original
section .text
global main
main:
mov rsi, message1
call messages
mov rdi,[original]
mov rsi, [len1]
call shift
mov [original],rax
mov rsi, original
call messages
ret
; end main
messages
mov rdi,format3
mov rdx,rsi
mov rax,0
call printf
ret
);班次代码:
global shift
section .text
shift:
mov rax, rdi ;string to shift
mov rdx, rsi ;rdx length of string
mov rcx,0
loop: cmp rcx, rdx
jge done
mov byte [rax+rcx], 97
inc rcx
jmp loop
done:
ret
您需要无括号的
mov-rdi、原始和mov-rsi、len1
。您的函数不会返回任何内容,因此请删除mov[original],rax
,这是错误的。PS:您不需要将参数从初始位置移动。PPS:学习使用调试器。