Подсчет разности чисел в формате 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д