我试图让用户输入一个数字,然后打印1,2,3 ... [value]
输入数字
后调用以下内容printnum:
mov ecx,0 ;start at 0
mov bl, [value]
jmp printnumloop
printnumloop:
cmp ecx, 0
jle actuallyprint
jmp menu
actuallyprint:
mov rdi, [format]
mov edi, ecx
mov eax, 0
call printf
mov rdi, [LC8]
mov eax, 0
call printf
add edx, 1
LC8
LC8: db " , ",0
根据调试器,错误在这一行
=> 0x00007ffff7aa8ae3 <+35>: movdqu xmm0,XMMWORD PTR [rdi]
答案 0 :(得分:0)
您需要传递字符串的地址,而不是它们的值。不要取消引用format
和LC8
。现在,您传递的是字符串的前8个字符,而不是指向字符串的指针。在没有更多上下文的情况下很难确定,但看起来您获得段错误的指令可能是printf
取消引用格式字符串参数。在您的示例中,字符串的前8个字符恰好是有效的内存地址,因此会发生错误。
actuallyprint:
mov rdi, format ; pass pointer to format
movzx rsi, ecx ; pass register contents by value
mov eax, 0 ; probably don't need this
call printf
mov rdi, LC8
mov eax, 0
call printf
add edx, 1