Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2023, 01:32   #1
alonil
Пользователь
 
Регистрация: 14.01.2023
Сообщений: 38
По умолчанию Как сделать процедуры на вод переменных и вывод сообщений и результата

Код:
.model small
 data segment
        msg_a db 13,10, "a = ", '$'
        msg_b db 13,10, "b = ", '$'
        msg_c db 13,10, "c = ", '$'
        msg_d db 13,10, "d = ", '$'
        msg_result db 13,10, "a*c*(a+b)-d = ", '$'
        a db ?
        b db ?
        c db ?
        d dw ?
        result dw ?
data ends
stk segment stack
    db 256 dup(?)
stk ends
code segment
    assume cs: code, ds: data, ss: stk 
 start:
        mov ax, data
        mov ds, ax
 Vvod_peremenou:
        mov ah, 09h
        lea dx, [msg_a]
        int 21h
        mov di, (offset store_A)
        jmp ReadInt16
store_A:
        mov [a], al
        
        mov ah, 09h
        lea dx, [msg_b]
        int 21h
        mov di, (offset store_B)
        jmp ReadInt16
store_B:
        mov [b], al
        
        mov ah, 09h
        lea dx, [msg_c]
        int 21h
        mov di, (offset store_C)
        jmp ReadInt16
store_C:
        mov [c], al
        
        mov ah, 09h
        lea dx, [msg_d]
        int 21h
        mov di, offset store_D
        jmp ReadInt16
store_D:
        mov [d], ax
 Vichislenia:       
        mov al,[a]
        imul [c]
        mov  bx, ax
        mov al,[a]
        add al,[b]
        cbw
        imul bx
        sub  ax,[d]
        mov  [result],  ax
Vivod_resultata:      
        mov     ah,     09h
        lea     dx,     [msg_result]
        int     21h
        mov     ax,     [result]

Vivod_result:        
        mov     bx,     10      ;основание системы счисления (делитель)
        xor     cx,     cx      ;количество символов в модуле числа
        or      ax,     ax      ;для отрицательного числа
        jns     _div
                neg     ax      ;поменять знак (сделать положительным)
                push    ax      ;и вывести на экран символ "-" (минус)
                mov     ah,     02h
                mov     dl,     '-'
                int     21h
                pop     ax
        _div:                  ;делим число на 10
                xor     dx,     dx
                div     bx
                push    dx      ;остаток сохраняем в стеке
                inc     cx      ;количество цифр в числе
                or      ax,     ax
                jnz     _div           ;повторяем, пока в числе есть цифры
        mov     ah,     02h
        store:
                pop     dx      ;извлекаем цифры (остатки от деления на 10) из стека
                add     dl,     '0'     ;преобразуем в символы цифр
                int     21h     ;и выводим их на экран
        loop    store
ReadInt16:
        xor     bx,     bx      ;очищение от мусора, туда будет заносится признак положительного или  отрицательного числа
        xor     cx,     cx      ;очищение от мусора счетчика
        do:
                mov     ah,     00h ;читать следующий символ
                int     16h
                
                mov dl, al ;записываем в dl введенное число
                cmp al, 0Dh ;сравниваем не Enter ли это был
                je  _break; перейдем, если равен Enter
                cmp al, '-';проверка на знак введенного числа
                jne  @endif; если минус,то перейдём
                mov  bx, 1; положим признак знака в bx
                        jmp     putchar
                @endif:
                sub al, '0';это число?
                jc do; если нет - возвращаемся,будет возвращать ,если в 6-том разряде ноль
                cmp al, 9+1
                jnc    do;так как символ буквы нам не нужен
                xor     ah,     ah
                shl     cx,     1       ;cx=cx*10
                mov     si,     cx
                shl     cx,     1
                shl     cx,     1
                add     cx,     si
                add     cx,     ax      ;cx=cx+ax
        putchar:
                mov     ah,     02h
                int     21h
        jmp     do
_break:
        mov  ax, cx;тогда полностью обнулим  и введенное значение и функцию для считывания символа
        
        test bx, bx; проверяем  это ноль
        jz  exit; если Да,то перейдем
        neg  ax;Нет, тогда сделаем же число положительным
exit:
        jmp di

 
; выводит знаковое 16-разрядное число из регистра AX на экран
; на входе:
;  ax - число для отображения
; на выходе:
;  число на экране

 
 
        ;завершение программы
        mov     ax,     4C00h
code ends
end    start
alonil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поправить программу - поправить процедуры и сделать из глобальных переменных - локальные Topse Паскаль, Turbo Pascal, PascalABC.NET 10 16.03.2018 09:30
Количество строк по условию из результата выборки хранимой процедуры yulia БД в Delphi 10 01.06.2015 08:45
вывод результата DontStopMe! Паскаль, Turbo Pascal, PascalABC.NET 12 11.12.2013 16:43
Вывод результата! Аделинкка Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 29 09.05.2012 08:12
вывод результата Илья- Общие вопросы C/C++ 0 16.11.2011 17:29