Другие языки программирования и технологии

Программа, которая находит разность двух чисел (IEEE 754 стандарт double) ассемблер.

Добрый день! Стоит задача написать программу на языке ассемблер. При запуске мы вводим два числа в 16 системе счисления (IEEE 754 стандарт double), то есть числа двоичной точности. Программа нам выводит результат вычитания этих чисел тоже в 16 системе счисления (IEEE 754 стандарт double). Помогите пожалуйста, буду крайне признателен.
format PE console
entry N197506902
include "win32a.inc"

section ".code" code readable executable
N197506902:
    cinvoke printf, Prompt1
    stdcall InputHex, Num1
    cinvoke printf, Prompt2
    stdcall InputHex, Num2
    finit
    fld [Num1]
    fld [Num2]
    fsubp
    fstp [Num1]
    cinvoke printf, Result, dword [Num1], dword [Num1+4]
    cinvoke printf, PromptW
    cinvoke getch
    cinvoke exit, 0

proc InputHex stdcall, Dest: dword
    local String rb 16
    mov ecx, 16
    lea edi, [String]
    mov esi, edi
    cld
RepeatInp:
    push ecx
    cinvoke getch
    pop ecx
    cmp ecx, 16
    je @F
    cmp al, 8
    jne @F
    push ecx
    cinvoke putch, 8
    cinvoke putch, 32
    cinvoke putch, 8
    dec edi
    pop ecx
    inc ecx
    jmp RepeatInp
@@:
    jecxz TestCR
    mov edx, eax
    sub al, '0'
    cmp al, 10
    jb SaveChar
    and dl, 0DFh
    mov eax, edx
    sub al, 'A'-10
    cmp al, 10
    jb RepeatInp
    cmp al, 16
    jae RepeatInp
SaveChar:
    stosb
    push ecx
    cinvoke putch, edx
    pop ecx
    dec ecx
    jmp RepeatInp
TestCR:
    cmp al, 0Dh
    jne RepeatInp
    mov ecx, 16
    xor edx, edx
    xor ebx, ebx
@@:
    shl ebx, 4
    mov eax, edx
    shr eax, 28
    or ebx, eax
    shl edx, 4
    or dl, byte [esi]
    inc esi
    loop @B
    mov edi, [Dest]
    mov [edi], edx
    mov [edi+4], ebx
    ret
endp

section ".data" data readable
  Prompt1 db "Введите первое число: ", 0
  Prompt2 db 13, 10, "Введите второе число: ", 0
  Result db 13, 10, "Результат вычитания: %llX", 0
  PromptW db 13, 10, 10, "Для завершения работы нажмите любую клавишу...", 0

section ".bss" data readable writeable
  Num1 rq 1
  Num2 rq 1

section ".idata" import data readable
library msvcrt, "msvcrt.dll"
import msvcrt, getch, "_getch", printf, "printf",\
    putch, "_putch", exit, "_exit"

ДО
Дима Озеров
51 590
Лучший ответ
Дима Озеров Это FASM.
Программа не контролирует случаи, когда введены денормализованные числа, нечисла или специальные вещественные значения.

Похожие вопросы