我如何使用 int、int 数组并用汇编语言打印它 [重复]

问题描述 投票:0回答:0

当我使用一些负整数或不是数字和整数数组时,我会例外:浮点核心转储和分段错误核心转储。另外,我不能写一些负数或非数字的整数。我在没有使用寄存器分配的情况下测试了我的代码(例如: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。有时我也会在这里例外。你能帮我解决这个问题吗?

assembly x86-64
© www.soinside.com 2019 - 2024. All rights reserved.