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