Вывод сообщения - 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

Объяснение кода листинга программы

Список элементов кода:

  1. Переменные flt_num, x, y, m1, являются переменными типа double и содержат числа с плавающей точкой.
  2. Код начинается с вызова функции outfloat, которая принимает на вход число типа double, обрабатывает его и выводит в консоль.
  3. Затем код выводит строку Hello World с символом доллара в конце.
  4. Далее происходит попытка вывода числа с плавающей точкой в консоль. Функция outfloat обрабатывает число, преобразуя его в строку, используя арифметические операции для получения цифр после запятой.
  5. Для вывода цифр после запятой используется цикл, который повторяется до тех пор, пока не будут выведены все цифры числа.
  6. В конце кода происходит возврат в основную программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5