Вывод сообщения - Assembler
Формулировка задачи:
После вывода вещественного числа, не могу вывести сообщение. TASM
Листинг программы
- .286C
- .model small
- .data
- flt_num dq -324.7341234781
- x dq 5.5
- y dq 1.1
- m1 DB 'Hello World',13,10,'$'
- .code
- start:
- mov ax, @data
- mov ds, ax
- finit
- fld x
- fld y
- fadd
- push 10
- call outfloat
- .exit
- length_frac equ [bp+4]
- ten equ word ptr [bp-2]
- temp equ word ptr [bp-4]
- OutFloat proc near
- enter 4, 0
- mov ten, 10
- ftst
- fstsw ax
- sahf
- jnc @positiv
- mov al, '-'
- int 29h
- fchs
- @positiv:
- fld1
- fld st(1)
- fprem
- fsub st(2), st
- fxch st(2)
- xor cx, cx
- @1:
- fidiv ten
- fxch st(1)
- fld st(1)
- fprem
- fsub st(2), st
- fimul ten
- fistp temp
- push temp
- inc cx
- fxch st(1)
- ftst
- fstsw ax
- sahf
- jnz @1
- @2:
- pop ax
- add al, '0'
- int 29h
- loop @2
- fstp st
- fxch st(1)
- ftst
- fstsw ax
- sahf
- jz @quit
- mov al, '.'
- int 29h
- mov cx, length_frac
- @3:
- fimul ten
- fxch st(1)
- fld st(1)
- fprem
- fsub st(2), st
- fxch st(2)
- fistp temp
- mov ax, temp
- or al, 30h
- int 29h
- fxch st(1)
- ftst
- fstsw ax
- sahf
- loopne @3
- @quit:
- fstp
- fstp st
- leave
- ret 2
- OutFloat endp
- mov ax, @data
- mov ds, ax
- mov dx,offset m1
- mov ah,9
- int 21h
- mov ax,4c00h
- int 21h
- end start
Решение задачи: «Вывод сообщения»
textual
Листинг программы
- .286C
- .model small
- .stack
- .data
- flt_num:dq -324.7341234781
- x: dq 5.5
- y: dq 1.1
- m1: DB 13,10,'Hello World',13,10,'$'
- .code
- start:
- mov ax, @data
- mov ds, ax
- finit
- fld x
- fld y
- fadd
- push 10
- call outfloat
- mov dx,offset m1
- mov ah,9
- int 21h
- mov ax,4c00h
- int 21h
- length_frac equ [bp+4]
- ten equ word ptr [bp-2]
- temp equ word ptr [bp-4]
- OutFloat proc near
- enter 4, 0
- mov ten, 10
- ftst
- fstsw ax
- sahf
- jnc @positiv
- mov al, '-'
- int 29h
- fchs
- @positiv:
- fld1
- fld st(1)
- fprem
- fsub st(2), st
- fxch st(2)
- xor cx, cx
- @1:
- fidiv ten
- fxch st(1)
- fld st(1)
- fprem
- fsub st(2), st
- fimul ten
- fistp temp
- push temp
- inc cx
- fxch st(1)
- ftst
- fstsw ax
- sahf
- jnz @1
- @2:
- pop ax
- add al, '0'
- int 29h
- loop @2
- fstp st
- fxch st(1)
- ftst
- fstsw ax
- sahf
- jz @quit
- mov al, '.'
- int 29h
- mov cx, length_frac
- @3:
- fimul ten
- fxch st(1)
- fld st(1)
- fprem
- fsub st(2), st
- fxch st(2)
- fistp temp
- mov ax, temp
- or al, 30h
- int 29h
- fxch st(1)
- ftst
- fstsw ax
- sahf
- loopne @3
- @quit:
- fstp
- fstp st
- leave
- ret 2
- OutFloat endp
- end start
Объяснение кода листинга программы
Список элементов кода:
- Переменные flt_num, x, y, m1, являются переменными типа double и содержат числа с плавающей точкой.
- Код начинается с вызова функции outfloat, которая принимает на вход число типа double, обрабатывает его и выводит в консоль.
- Затем код выводит строку
Hello World
с символом доллара в конце. - Далее происходит попытка вывода числа с плавающей точкой в консоль. Функция outfloat обрабатывает число, преобразуя его в строку, используя арифметические операции для получения цифр после запятой.
- Для вывода цифр после запятой используется цикл, который повторяется до тех пор, пока не будут выведены все цифры числа.
- В конце кода происходит возврат в основную программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д