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

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

10.01.2025, 20:02. Показов 3037. Ответов 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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru