Assembly 我无法解决的基本装配练习
我刚开始学习汇编x86,我必须做一个练习,我无法解决这个问题。 其想法是制作一个程序,让用户使用Scanf输入一个数字。然后程序在数字上加1并输出该数字,因此基本上输出=输入+1 当我使用代码时,控制台会显示一个分段错误 守则:Assembly 我无法解决的基本装配练习,assembly,x86,Assembly,X86,我刚开始学习汇编x86,我必须做一个练习,我无法解决这个问题。 其想法是制作一个程序,让用户使用Scanf输入一个数字。然后程序在数字上加1并输出该数字,因此基本上输出=输入+1 当我使用代码时,控制台会显示一个分段错误 守则: mystring: .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n" #Creëert een stuk tekst nrstring: .as
mystring: .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n" #Creëert een stuk tekst
nrstring: .asciz "%d"
.global main
main:
movq $0, %rax #Geeft de locatie %rdi een waarde van 0, maakt %rdi leeg
movq $mystring, %rdi #Voegt de waarde van mystring (het stuk tekst) toe aan %rdi
call printf #Print de waarde van %rdi
call inout #roept inout op
inout:
pushq %rbp
movq %rsp , %rbp
subq $8, %rsp #Plaatst stackPointer goed
leaq -8(%rbp), %rsi #Laad het adres in rsi
movq $0, %rdi #Maakt rdi leeg
movq $nrstring, %rdi #Verplaatst string nrstring naar rdi (1e arg. scanf)
movq $0, %rax #Maakt RAX leeg (2e arg. scanf)
call scanf #Roept Scanf op
incq %rdi
movq %rdi, %rax
call printf
movq %rbp, %rsp
popq %rbp
ret
end:
mov $0, %rdi #Maakt %rdi leeg
call exit #Sluit het programma af
我来自荷兰,所以请不要担心评论,我为我的英语不好道歉。问题是分段错误在哪里?您可以使用调试器单步执行程序,并找到导致该程序的步骤。一旦知道是哪条指令导致了错误,您就可以思考该指令出错的原因,并对其进行修复。带你去调试器那儿。@TNH你的英语没那么差。一、 例如,他一个字也不会说荷兰语。然而,在源代码中使用除英语以外的任何语言,无论是代码还是注释,通常都不是一个好主意。这是一个完美的例子:如果这些评论是英文的,那么我们中的一些人可能会发现你的代码偏离了你的实际意图;或者至少他们会提供一些更清晰的线索,说明断层可能来自哪里。