Подсчет разности чисел в формате double IEEE 754 - Assembler
Формулировка задачи:
Доброго времени суток. Написал программу, которая должна считать разность двух чисел введеных в 16 системе счисления в формате double IEEE 754. Но программа считает не то, что нужно.
Например: Вводим первое число (4024000000000000) = 10
Вводим второе число (4014000000000000) = 5
Как результат выводит 0
В чем проблема?
.model small
.stack 512
.386
.data
vvedite db 13,10,'Vvedite chislo.',13,10,'$'
rezultat db 'Rezultat:$'
z1 dd 0
.code
mov ax, @data
mov ds, ax
finit
mov ah, 9
lea dx, vvedite
int 21h
mov cx, 2
chislo:
push cx
mov cx, 16
mov ebx, 0
schitivay:
mov ah, 10h
int 16h
cmp al, '0'
jl schitivay
cmp al, '9'
jle pish10
cmp al,'A'
jl schitivay
cmp al,'F'
jle pish16d
cmp al, 'a'
jl schitivay
cmp al, 'f'
jg schitivay
pish16m:
mov ah, 0eh
int 10h
sub al, 87
mov ah, 0
jmp koniec_petli
pish16d:
mov ah, 0eh
int 10h
sub al, 55
jmp koniec_petliРешение задачи: «Подсчет разности чисел в формате double IEEE 754»
textual
Листинг программы
.model small .stack 512 .386 .data vvedite db 13,10,'Vvedite chislo.',13,10,'$' rezultat db 'Rezultat:$' z1 dd 0 .code mov ax, @data mov ds, ax finit mov ah, 9 lea dx, vvedite int 21h mov cx, 2 chislo: push cx mov cx, 16 mov ebx, 0 schitivay: mov ah, 10h int 16h cmp al, '0' jl schitivay cmp al, '9' jle pish10 cmp al,'A' jl schitivay cmp al,'F' jle pish16d cmp al, 'a' jl schitivay cmp al, 'f' jg schitivay pish16m: mov ah, 0eh int 10h sub al, 87 mov ah, 0 jmp koniec_petli pish16d: mov ah, 0eh int 10h sub al, 55 jmp koniec_petli pish10: mov ah, 0eh int 10h sub al, '0' mov ah, 0 koniec_petli: shl ebx, 1 shl ebx, 1 shl ebx, 1 shl ebx, 1 sub bx, ax loop schitivay pop cx mov z1, ebx fld z1 mov al, 13 mov ah, 0eh int 10h mov al, 10 mov ah, 0eh int 10h loop chislo fsub fst z1 mov ebx, z1 lea dx, rezultat mov ah, 09h int 21h mov cx, 16 xor ax,ax _2: rol ebx, 4 mov al, bl and al, 00001111b cmp al, 9 ja bukva add al, '0' jmp pish bukva: add al, 55 pish: mov ah, 0eh int 10h loop _2 ;koniec mov ah, 0 int 16h mov ax,4c00h int 21h end xor ax,ax _2: mov al, bl and al, 00001111b cmp al, 9 ja bukva add al, '0' jmp pish bukva: add al, 55 pish: mov ah, 0eh int 10h loop _2