Другие языки программирования и технологии
Программа, которая находит разность двух чисел (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"

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"

Похожие вопросы
- Напишите программу, которая находит максимальное среди чисел, записанных в файле, и выводит результат в другой файл.
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- Напишите программу, которая находит в массиве количество элементов, равных заданному значению X .
- Как написать программу, которая будет представлять вещественное число в памяти компьютера
- напишите программу которая находит минимальный и максимальный элементы матрицы и их индексы
- Написать программу, которая формирует два массива чисел
- Проверте программу, которая вычисляет сумму целых чисел от а до 500 (значение a вводится с клавиатуры). c++
- Написать на языке Паскаля программу, которая находит сумму и произведение первых 5 элементов массива.
- аскаль. Написать программу которая переводит число из одной системы счисления в другую
- Требуется написать программу, которая из цифр двух натуральных чисел создает наименьшее возможное число, сохраняя при эт
Программа не контролирует случаи, когда введены денормализованные числа, нечисла или специальные вещественные значения.