Как вывести 80-битное число с плавающей запятой двойной точности повышенной точности в сборке x8086? - PullRequest
1 голос
/ 16 мая 2019

Я работаю над домашним заданием и хочу напечатать 80-битное число с двойной точностью повышенной точности через printf. Число вычисляется с помощью некоторой функции масштабирования, и с помощью gdb я вижу, что оно вычисляет правильное число. Я указываю на блок из 10 байтов, используя некоторый указатель с именем var1, определенный в разделе bss как: var1: rest 1 затем var1 указывает на блок из 10 байтов в памяти.

До сих пор я пытался вставить 10 байтов в стек, а затем распечатать число в формате% f или% lf, оба не смогли распечатать число, также я заметил, что использовал qword и дважды вставлял 4 байта в стек (часть из числа работали хорошо), но мне нужно использовать определение tword.


scale_number:
  push ebp                  ;; Pushing Base pointer (contains address of current activation frame
                            ;; which is actually the return address of the caller) to the stack

  mov ebp, esp              ;; Overrides ebp value to Stack pointer's value which contains the
                            ;; address of last used dword in the stack.

  pushad                    ;; Push all significant registers (8 general purpose registers)
                            ;; onto the stack (backup registers values)

  mov ebx, [ebp + 12]       ;; Upper bound
  sub dword ebx, [ebp + 8]  ;; Substruct ebx with the Lower bound
  mov ecx, [ebp + 16]       ;; get the pointer of the result contianer

  finit

  mov eax, dword [seed]
  mul ebx
  push eax
  fild dword [esp]
  add esp, 4
  push 0x0000FFFF
  fidiv dword [esp]
  add esp, 4
  fiadd dword [ebp + 8]
  fstp tword [ecx]

  ffree

  popad
  return_from_function ; macro for quiting the function

прямо сейчас ecx указывает на var1

остальной код:


  push dword var1
  push 100
  push 40

  call scale_number

  ;; Floating point tester TWORD
  sub esp, 10
  mov ebx, 0
  .loop4:
    mov eax, [var1 + ebx]
    mov [esp + ebx], eax
    inc ebx
    cmp ebx, 10
    jne .loop4

  push format_fp ;; using "%f" , 10, 0 as the format_fp
  call printf
  add esp, 14

  jmp exit

вывод, который у меня есть, равен -0,000000, но мой ожидаемый результат - 80. что-то ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...