scanf и printf с плавающей точкой

Поэтому я следил за книгой Брюса Смита "Начинающие распианцы" и недавно работал с плавающей запятой. То, что я пытался сделать, - это прочитать в двух числах с плавающей запятой, умножить их и вывести обратно результат. Я могу читать и писать одну плавающую точку нормально, но когда я пытаюсь сделать вторую плавающую точку, она не дает мне число, которое я прочитал, а вместо этого адрес (или, по крайней мере, то, что я считаю адресом). Вот что я сделал до сих пор:

      .global main
      .func main

main:
      PUSH    {LR}
      SUB     SP,    SP,    #8
      LDR     R0,    addr_prompt1
      BL      printf

      LDR     R0,    addr_scantype
      MOV     R1,    SP
      BL      scanf

      VLDR    S14,   [SP]
      VCVT.F64.F32   D5,    S14

      LDR     R0,    addr_prompt2
      BL      printf

      LDR     R0,    addr_scantype
      MOV     R1,    SP
      BL      scanf

      VLDR    S18,   [SP]
      VCVT.F64.F32   D0,   S18

      LDR     R0,    addr_result
      VMOV    R1,    R2,   D5
      VSTR    D0,    [SP]
      BL      printf

      ADD     SP,    SP,   #8
      POP     {PC}

_exit:
      MOV     PC,    LR

addr_prompt1:       .word prompt1
addr_prompt2:       .word prompt2
addr_scantype:      .word scantype
addr_result:        .word result

     .data
prompt1:            .asciz "Enter first number: "
prompt2:            .asciz "Enter second number: "
scantype:           .asciz "%f"
result:             .asciz "YOur entered number is %f and %f.\n"

Если я просто печатаю плавающие точки, которые находятся в моем разделе данных, я должен поместить свой первый в регистры R2 и R3, а второй - в стек. Но по какой-то причине всякий раз, когда я внедряю scanf, мне приходится использовать регистры R1 и R2, иначе он не будет правильно печатать мой первый номер - и мой второй номер всегда будет неверным независимо от того, какие регистры я использую.

У кого-нибудь есть понимание того, почему это происходит, и что я должен сделать, чтобы оба моих номера вернулись правильно?

0 ответов

Другие вопросы по тегам