Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 26.09.2011
Сообщений: 12

Базовый интерфейс, функция вывода звука, функция для просчёта выражения

12.10.2012, 19:10. Показов 1910. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ОЧЕНЬ НУЖНА ПОМОЩЬ!
Нужно реализовать программу, которая по нажатию клавиши, а после "enter" выполняла такие функции:

"a": Расчёт значения выражения ((a1-a2)*a3*a4+a5)
Значения a1=-1, a2=2, a3=1, a4=2, a5=3 должны вводиться с клавиатуры.

"s": Вывод звука динамика.

"d": Выход из программы.

Шаблоны файлами прикреплены к сообщению.

Шаблон программы прилагается:
Кликните здесь для просмотра всего текста
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
                   IDEAL
                   MODEL   small
                   STACK   256
 
                   DATASEG
; При входе буфер по адресу ds:dx должен быть оформлен так:
; -------T---T---T---T---T---┐
; │string│ ? │ ?   ?   ?   ?  - string- максимально допустимая
; L------+---+---+---+---+----- длина ввода (от 1 до 254)
;
; При выходе буфер заполнен данными следующим образом:
; -------T---------T---T---T---T---┐
; │string│ str_len │ T   E   X   T  - 0dH str_len- действительная длина
; L------+---------+---+---+---+----- данных без завершающего CR(здесь -04H).
 
      string  db      254     ;объявление переменной string,
                              ;определяющей максимально допустимое
                              ;число вводимых символов
      str_len db      0       ;под запись реально
                              ;выводимого числа символов: str_len
      db 254 dup ('*')        ; Буфер
                              ;первоначально заполнен символами '*'для
                              ;удобства его просмотра в отладчике до и
                              ;после выполнения программы.
        
system_message_1   DB "Input command\  "  ,'$'
system_message_2   DB "Program end"       ,'$'                             
 ; 
 
display_message_0  DB "------------programm for lab 3 is running !!!--------", 13, 10, '$'
display_message_1  DB "c - for count",   13, 10,  '$'
display_message_2  DB "b - for beep",    13, 10,  '$'
display_message_3  DB "q - for exit",    13, 10,  '$' 
display_message_4  DB "----------programm for lab is END !!! - for exit", 13, 10,  '$'
message  DB ?
 
test_message_1  DB "!!! count DISPLAY",    13, 10,  '$' 
test_message_2  DB "!!! beep DISPLAY",       13, 10,  '$'
test_message_3  DB "q - for exit",       13, 10,  '$'
 
  CODESEG
   Start:
     mov ax, @data            ;Инициализируем сегмент данных
     mov ds, ax
 
Main_cikle: 
;-------------------------------------------------------------------
call display_foo_main
;------------------------------------------------------------------
 
 
;считать строку символов из стандартного ввода в буфер
     mov ah, 0ah              ; ah <- 0ah (пересылаем в регистр
                              ; ah номер функции DOS для ввода: 0ah)
     mov dx, offset string     ; dx <- offset string (пересылаем в
                              ; регистр dx смещение началабуфера в
                              ;сегменте данных)
     int 21h                  ; реализуем функцию DOS для ввода: 0ah
                              ;через прерывание int 21h
 xor ax, ax
 mov bx, offset string
 mov ax, [bx+1]
 shr ax, 8
 
cmp ax, 063h ; c ascii =63h
je Count
cmp ax, 062h ; b ascii =62h
je Beep
cmp ax, 071h ; q ascii =71h
je  Exit
jmp Main_cikle
 
Count:
mov dx, offset test_message_1
call display_foo
; any foo
jmp Main_cikle
 
Beep:
; any foo
 
mov dx, offset test_message_2
call display_foo
jmp Main_cikle
 
 
 
 
 
 
; После появления запроса с текущей позиции курсора вводим произвольную
; строку символов с числом <= 254. После ввода последнего символа
; нажимаем ENTER и возвращаемся в отладчик (TD).
;В отладчике с адреса <=DS:0000 просматриваем состояние буферапосле ввода
; Для вывода строки из буфера на экран необходимо преобразоватьформат
; введенной строки данных. Для этого заменяем последний символ введенной
; строки: возврат каретки - 0dh на символ '$'-24h. Символ $ завершает
; ASCII$ - строку
 
     xor bh, bh              ;bh <- bh xor bh (обнуляем регистр bh)
     mov bl, [str_len]       ;bl <- M(DS:str_len)
                             ;пересылаем в bl длину реально
                             ;введенной строки
     mov [byte bx + 2], '$'  ;M(DS:(bx+2)) <- 24h,
                             ;ASCII - код '$'
; заменяем символ 0dh на '$'
; заменяем в буфере значение переменной <string> на 0dh - ASCII - код, а
; значение переменной <str_len>   - на 0ah - перевод строки
 
     mov [byte ds:0], 0dh    ; M(DS:0000 <- 0dh)
     mov [byte ds:1], 0ah    ; M(DS:0001 <- 0ah)
 
 
 
; реализуем функцию DOS 09h для вывода на экран строки из буфера.
; При выводе строки по первому символу (0dh) произойдет возврат
; каретки, а по второму (0ah) - перевод строки при    этом выводимая
; строка будет располагаться в начале следующей строки экрана
; при выполнении функции 09h вывод символов на экран будет
; продолжаться до появления символа '$' - код 24h.
 
     mov ah, 09h            ;ah<-09h (записываем номер функции
                            ;DOS в регистр ah)
     mov dx, offset string  ; dx<-offset string=0000h
                            ;записываем в регистр DX смещение
                            ;выводимой строки
     int 21h                ;вызов системной функции DOS
 
; стандартный выход из выполняемой программы
   Exit:
   mov dx, offset display_message_4  
   call display_foo
   mov ax,04C00h          ; ah - 4ch (функция DOS выхода из
                            ; программы и передачи управления
                           
 
     int 21h                ;вызов пpеpывания DOS
 
;-------------------------------------------------------
 
PROC display_foo_main
mov dx, offset display_message_0
call display_foo
mov dx, offset display_message_1
call display_foo
mov dx, offset display_message_2
call display_foo
mov dx, offset display_message_3
call display_foo
mov dx, offset system_message_1
call display_foo
  ret
ENDP display_foo_main
 
PROC display_foo
mov ah,9
int 21h
xor dx, dx
  ret
ENDP display_foo 
;-----------------------------------------------------
 
 
 
END Start


Есть пример выполнения, но он не компилируется TASM'ом 16\32-битным.
Кликните здесь для просмотра всего текста
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
TITLE   A10SELMU (EXE)
    .MODEL SMALL
    .STACK 256
    .DATA
;----------------------------------------------------------------
TOPROW  EQU 08      ;
BOTROW  EQU 15      ;
LEFCOL  EQU 26      ;
ATTRIB  DB  ?       ;
ROW DB  00      ;
SHADOW  DB  19 DUP(ODBH)    ;
MENU    DB  0C9H, 17 DUB(OCDH), 0BBH
    DB  0BAH, 'L - for count    ', 0BAH
    DB  0BAH, 'Z - for beep ', 0BAH
    DB  0BAH, 'X - for quit ', 0BAH
    DB  0C8H, 17 DUP(0CDH), 0BCH
PROMPT  DB  'To select an item , use Up/Down Arrow'
    DB  ' and press Enter'
.386 ;------------------------------------------------------------
    .CODE
A10MAIN PROC    FAR         ;
    MOV AX,@data        ;
    MOV DS,AX           ;
    MOV ES,AX           ;
    CALL    Q10CLEAR        ;
    MOV ROW,BOTROW+4        ;
A20:
    CALL    B10MENU         ;
    MOV ROW,TOPROW+1        ;
    MOV ATTRIB,16H      ;
    CALL    D10DISPLAY      ;
    CALL    C10INPUT        ;
    CMP AL,1BH          ;
    JNE A20         ;
    MOV AX,0600H        ;
    CALL    Q10CLEAR        ;
    MOV AX,4C00H        ;
    INT 21,H
A10MAIN ENDP
;------------------------------------------------------------------
B10MENU PROC    NEAR
    PUSHA               ;
    MOV AX,1301H        ;
    MOV BX,0060H        ;
    LEA BP,SHADOW       ;
    MOV CX,19           ;
    MOV DH,TOPROW+1     ;
    MOV DL,LEFCOL+1     ;
B20:    INT 10H
    INC DH          ;
    CMP DH,BOTROW+2     ;
    JNE B20         ;
    MOV ATTRIB,71H      ;
    MOV AX,1300H        ;
    MOVZX   BX,ATTRIB       ;
    LEA BP,MENU         ;
    MOV CX,19           ;
    MOV DH,TOPROW       ;
    MOV DL,LEFCOL       ;
B30:
    INT 10H
    ADD BP,19           ;
    INC DH          ;
    CMP DH,BOTROW+1     ;
    JNE B30         ;
    MOV AX,1301H        ;
    MOVZX   BX,ATTRIB       ;
    LEA BP,PROMPT       ;
    MOV CX,79           ;
    MOV DH,BOTROW+4     ;
    MOV DL,00           ;
    INT 10H
    POPA                ;
    RET
B10MENU ENDP
;---------------------------------------------------------------------
C10INPUT    PROC    NEAR
    PUSHA               ;
C20:    MOV AH,10H          ;
    INT 16H         ;
    CMP AH,50H          ;
    JE  C30         ;
    CMP AH,48H          ;
    JE  C40         ;
    CMP AL,0DH          ;
    JE  C90         ;
    CMP AL,1BH          ;
    JE  C90         ;
    JMP C20         ;
C30:
    MOV ATTRIB,71H      ;
    CALL    D10DISPLAY      ;
    INC ROW         ;
    CMP ROW,BOTROW-1        ;
    JBE C50         ;
    MOV ROW,TOPROW+1        ;
    JMP C50
C40:    MOV ATTRIB,71H      ;
    CALL    D10DISPLY       ;
    DEC ROW         ;
    CMP ROW,TOPROW+1        ;
    JAE C50         ;
    MOV ROW,BOTROW-1        ;
C50:    MOV ATTRIB,17H      ;
    CALL    D10DISPLY       ;
    JMP C20
C90:    POPA RET
C10INPUT ENDP
;-----------------------------------------------------------------------
D10DISPLY PROC  NEAR            ;
    PUSHA               ;
    MOVZX   AX,ROW          ;
    SUB AX,TOPROW       ;
    IMUL    AX,19           ;
    LEA SI,MENU+1       ;
    ADD SI,AX           ;
    MOV AX,1300H        ;
    MOVZX   BX,ATTRIB       ;
    MOV BP,SI           ;
    MOV CX,17           ;
    MOV DH,ROW          ;
    MOV DL,LEFCOL+1     ;
    INT 10H
    POPA
    RET
D10DISPLY ENDP
;------------------------------------------------------------------------
Q10CLEAR PROC NEAR
    PUSHA
    MOV AX,0600H
    MOV BH,61H          ;
    MOV CX,0000         ;
    MOV DX,184FH        ;
    INT 10H
    POPA
    RET
Q10CLEAR ENDP
    END A10MAIN
Вложения
Тип файла: txt l7_2.txt (6.4 Кб, 12 просмотров)
Тип файла: txt l7_2_3.txt (5.7 Кб, 7 просмотров)
Тип файла: txt ZAD_3.txt (2.6 Кб, 5 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2012, 19:10
Ответы с готовыми решениями:

Функция для вывода сообщения в консоль
В общем есть программа conout.asm extern _lstrlenA@4 extern _WriteConsoleA@20 extern _GetStdHandle@4 global conout ...

Функция заполняющая массив и функция вывода массива
Напишите две функции. Первая функция заполняет массив, вторая функция выводит массив на экран

Функция для вывода матрицы.
Доброго времени суток! Хотелось бы узнать, есть ли в VBA MS Word функция для вывода двух мерного массива? Буду очень признателен если...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2012, 19:10
Помогаю со студенческими работами здесь

Функция для вывода в строку
Есть таблица Заселение Создать запрос количества клиентов за год+вывести номера гостиницы которые были заказаны в определенный год. Не...

Функция для вывода массива
Проблема с написанием функции для вывода массива. Ошибка error C2664: невозможно преобразовать параметр 1 из &quot;int&quot; в &quot;int...

Рекурсивная функция для вывода массива
Напишите рекурсивную функцию для вывода массива в следующем порядке. ......... ......... Входные данные: 5 1 5 7 8...

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

Функция для вывода массива string
И снова здравствуйте! Я создаю функцию list, которая должна выводить массив переменных string, выводя каждую переменную с новой строки. ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru