当我使用一些负整数或不是数字和整数数组时,我会例外:浮点核心转储和分段错误核心转储。另外,我不能写一些负数或非数字的整数。我在没有使用寄存器分配的情况下测试了我的代码(例如:mov rax,longDigit]并且它有效。我无法找出问题所在,但我认为我使用了寄存器分配过程错误。请帮助我。
我像这样使用 qword ( mov rcx, qword [digit] ) 但我再次采用浮点异常。
global _start
section .data
digits dd 100000000
number dd 321762410, 9, 2943018, 0, 19372039, 18, -76241, -208424
section .text
_start:
mov rdi, number ; rdi stores adress of number array
mov r12, 0 ; determine index of number array
mov r14, [digits] ; get number of digits
mov r13, [rdi + r12*4] ; get array number for using array adress. We use 4*k because we take k. index of array
我这里取一个浮点异常。如果我使用数字而不是 [digits] 和 [rdi + r12*4] 我的代码有效。同样在除法运算之后,我需要在一个重复 8 次的循环中打印数字。
L1
; division operation digit = (number/digits)
mov rax, r13 ; dividend
mov rbx, r14 ; divisor
div rbx ; after the div operation rbx store division
mov r10, rax ; result is egual digit (r10)
; print digit
add rsp , 8
add r10, 48
mov rax , 1
mov rdi, 1
push r10
mov rsi, rsp
mov rdx, 1
syscall
; mod operation number = number % digits
; division operation digits = (digits/10)
; return L1 and repeat 8 times
这个问题在第一次打印 true value 但在其他时候打印 unknow symbol。有时我也会在这里例外。你能帮我解决这个问题吗?