Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 29.08.2021
Сообщений: 43
MASM

Библиотека макроопределений: ввод / вывод чисел

10.01.2025, 20:02. Показов 3925. Ответов 25

Студворк — интернет-сервис помощи студентам
Создать библиотеку макроопределений, выполняющих выбранные действия:
-ввод строки текста(подразумевается прием ввденных данных)
- перевод введенных символов в число;
- выполнение арифметических действий: умножение
- перевод полученного числового значения в символы;
- вывод результата на экран.
Написать программу на Ассемблере, близкую по синтаксису к языку высокого
уровня, для вычисления в соответствии с вариантом. Например, сложение трех чисел
можно организовать следующей последовательностью строк:
read a
read b
sum a, b
read b
sum a, b
write a
(при условии, что результат будет храниться в переменной a). Следовательно, в
библиотеке должны присутствовать макроопределения read, sum и write, выполняющие
соответствующие действия. Не забудьте, что вводить с клавиатуры можно только
символы, после чего их необходимо преобразовать в числа с помощью таблицы ASCII
кодов. Обратное действие нужно проделать при выводе.
ВНИМАНИЕ! Вводить однозначные числа.
В моем варианте вычисление площади окружности по радиусу.
Возможно есть уже похожие темы, но я их не нашел. С чего начать не представляю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2025, 20:02
Ответы с готовыми решениями:

Ввод последовательности чисел и вывод из неё в другую последовательность - только нечетных чисел
помогите пожалуйста с кодом не понимаю как используя подпрограмму input, заполнять с клавиатуры массив ideal P386N Model Small ...

Ввод и вывод чисел
Как ввести число 2017 ?; как вывести число 137?(если учесть, что необходимо число 2017 перевести в ASCII код, а число 137 - наоборот)...

Ввод и вывод чисел
У меня есть вот такая программа, которая выполняет функция от -10 до +10 с шагом 1 Мне надо ее модернизировать сделать так, чтобы она...

25
1 / 1 / 0
Регистрация: 29.08.2021
Сообщений: 43
12.01.2025, 18:45  [ТС]
Студворк — интернет-сервис помощи студентам
Из result dw в output db, в строку, потомучто потом я эту строку вывед макросом
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8679 / 4516 / 1670
Регистрация: 01.02.2015
Сообщений: 13,957
Записей в блоге: 14
12.01.2025, 18:59
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
.model  medium
 
.stack  200h
 
.data
        CrLf            db      0Dh, 0Ah, '$'
        msgResult       db      'Result array:', 0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
.data?
        X               dw      ?
        acBuffer        db      100 dup(?)
.code
 
uint16_to_string        macro   uint16, string
        local   @@div,  @@store
        mov     ax,     uint16
        mov     si,     10
        xor     cx,     cx
        @@div:
                xor     dx,     dx
                div     si
                push    dx
                inc     cx
                test    ax,     ax
        jnz     @@div
        lea     si,     string
        @@store:
                pop     ax
                add     al,     '0'
                mov     [si],   al
                inc     si
        loop    @@store
        mov     [si],   byte ptr '$'
endm
 
int16_to_string macro   int16, string
        local   @@div
        local   @@store
        local   @@process
        mov     ax,     int16
        xor     bx,     bx
        test    ax,     ax
        jns     @@process
                neg     ax
                inc     bx
        @@process:
        mov     si,     10
        xor     cx,     cx
        @@div:
                xor     dx,     dx
                div     si
                push    dx
                inc     cx
                test    ax,     ax
        jnz     @@div
        lea     si,     string
        test    bx,     bx
        jz      @@store
                mov     [si],   byte ptr '-'
                inc     si
        @@store:
                pop     ax
                add     al,     '0'
                mov     [si],   al
                inc     si
        loop    @@store
        mov     [si],   byte ptr '$'
endm
 
 
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
 
        mov     [X],    -12345
        int16_to_string X, acBuffer
 
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [acBuffer]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
Добавлено через 3 минуты
Смысл алгоритма - выделяем по одной цифре (делением на 10), запоминаем цифру в стеке, а потом отдельным циклом выводим содержимое стека в строку. Через стек, чтобы цифры шли по порядку, т.к. при делении первой выделяется последняя (младшая) цифра.

Для чисел со знаком сначала определяется знак, а потом с положительным числом делают те же манипуляции.
1
1 / 1 / 0
Регистрация: 29.08.2021
Сообщений: 43
12.01.2025, 19:13  [ТС]
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
input macro _str
    mov ah, 07h
    int 21h
    mov [_str], al
endm
char_to_number macro _str
    sub _str, '0'     
endm
mult macro _str,_result
    mov al,_str   
    mul al            
    mov bl, 3
    mul bl  
    mov _result, ax     
endm
dec_to_str macro _result,_str
        local   div,  store
        mov     ax,     _result
        mov     si,     10
        xor     cx,     cx
        div:
                xor     dx,     dx
                div     si
                push    dx
                inc     cx
                test    ax,     ax
        jnz     div
        lea     si,     _str
        store:
                pop     ax
                add     al,     '0'
                mov     [si],   al
                inc     si
        loop    store
        mov     [si],   byte ptr '$'
endm
write macro output
    lea dx,output
    mov ah,09h
    int 21h
endm
proc_end macro
mov ax, 4C00h
int 21h
endm
macros.lib

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
include <macros.lib>
data segment 'data'
input_str db '?','$'         ; Переменная для ввода символа
    result dw ?        ; Переменная для хранения результата
    resultStr db 100 dup(?) ; Строка для вывода результата
data ends
text segment 'code'
assume CS:text, DS:data
 
myproc proc
mov ax, data ; загрузка сегмента данных
mov ds, ax
 
input input_str
char_to_number input_str
mult input_str,result
dec_to_str result,resultStr
write resultStr
proc_end
myproc endp
text    ends
stack segment para stack 'STACK'
    db 128 dup (?)
stack ends
 
end myproc
macros.asm ругается на
Assembling: macros.asm
macros.asm(17) : error A2008: syntax error : si
dec_to_str(7): Macro Called From
macros.asm(17): Main Line Code
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8679 / 4516 / 1670
Регистрация: 01.02.2015
Сообщений: 13,957
Записей в блоге: 14
12.01.2025, 19:18
Кто молодец?
Assembler
17
        local   div,  store   <=== div ???????
1
1 / 1 / 0
Регистрация: 29.08.2021
Сообщений: 43
12.01.2025, 19:22  [ТС]
Все заработало, спасибо большое
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8679 / 4516 / 1670
Регистрация: 01.02.2015
Сообщений: 13,957
Записей в блоге: 14
12.01.2025, 19:24
Если проверка преподавателя будет в masm 6.14+, то можно использовать анонимные метки @@ и переходы к ним назад @b и вперёд @f
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
uint16_to_string        macro   uint16, string
        mov     ax,     uint16
        mov     si,     10
        xor     cx,     cx
        @@:
                xor     dx,     dx
                div     si
                push    dx
                inc     cx
                test    ax,     ax
        jnz     @b
        lea     si,     string
        @@:
                pop     ax
                add     al,     '0'
                mov     [si],   al
                inc     si
        loop    @b
        mov     [si],   byte ptr '$'
endm
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2025, 19:24

Ввод и вывод чисел
Добрый вечер, господа. Перейду сразу к сути. Простенькая программа, по вводу и выводу чисел, но работает через раз. Что я имею в виду....

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и переводит её в двоичный код. затем наоборот...

Ввод и вывод вещественных чисел
Помогите, пожалуйста. Расскажите, как осуществить ввод/вывод десятичных дробей. Помогите.

Ввод и вывод чисел на экран
Требовалось ввести 2 числовые стоки, преобразовать их в числа, затем обратно в символы и вывести. Подскажите, где ошибки. masm ...

Ввод-вывод длинных чисел
Нужна помощь в написании программы! Надо реализовать программу ввод-вывод(числа вводятся с клавиатуры) анриально длинных чисел(очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru