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

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

10.01.2025, 20:02. Показов 3862. Ответов 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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8675 / 4512 / 1670
Регистрация: 01.02.2015
Сообщений: 13,949
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru