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

Необходимо написать подробные комментарии кода программы

05.06.2012, 13:05. Показов 1445. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пользователь вводит два числа А и В в десятичном виде. Программа должна:
1. Посчитать С=(А-В)*4.
2. Выполнить циклический сдвиг полученного числа С на 3 бита вправо.
3. Вывести на экран число С и все промежуточные результаты в двоичном виде.

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
.model small 
.data 
mesInputA db "Vvedite A(ot 0 do 255): $"
mesInputB db "Vvedite B(ot 0 do 255): $"
    binA db "A v binarnom: $"
    binB db "B v binarnom: $"
    inErr db "Owibka vvoda!! Vvedite zanovo: $"
    AsubB db "A - B = $"
    rez db "C = (A - B)*4 = $"
    rezSdvig db "C = (A - B)*4  > 3 = $"
    .stack 
    db 256 dup("?")
    .code 
    coutStr macro a
    push ax
    push dx
    mov ah, 9
    mov dx, offset a
    int 21h
    pop dx
    pop ax
    endm
    ;--------------------------------------------
    cinChar macro       
    mov ah, 1h          
    int 21h
    sub al, 30h         
endm                
;------------------------------------------------
endl macro              
    push ax             
    push dx              
    mov ah, 2           
    mov dx, 10          
    int 21h
    pop dx              
    pop ax              
endm
;---------------------------------------------------------
print proc              
    push cx
    push bx
    push dx
    mov bx, ax
    push ax
    mov cx, 16          
cicl:
    xor dx, dx          
    sal bx, 1           
    adc dl, 30h         
    mov ah, 2           
    int 21h             
    loop cicl                                                       
    pop ax
    pop dx
    pop bx
    pop cx
    ret                 
endp
;---------------------------------------------------------
input macro
    local startErr, start, m1, m2 
    jmp start   
startErr:
    endl
    coutStr inErr
start:
    mov cx, 3       
    xor dx, dx
m1:                 
    xor ax, ax      
    cinChar         
    cmp al, 9       
    ja m2           
    xor bx, bx      
    mov bl, al      
    xor ax, ax      
    mov al, dl      
    xor dx, dx      
    mov dl, 10
    mul dl          
    cmp ah,0        
    ja  startErr        
    xor dx, dx
    mov dl, al          
    add dx, bx          
    cmp dh, 0              
    ja startErr         
    loop m1
m2:
 
endm
;---------------------------------------------------------
calc proc               
    sub ax, dx          
    endl
    coutStr AsubB        
    call print          
    shl ax, 2   
    endl
    coutStr rez  
    call print  
    ror ax, 3    
    ret 
endp
;---------------------------------------------------------
vyvod proc          
    endl
    coutStr rezSdvig
    call print
    ret
    
endp
;---------------------------------------------------------
main proc
    mov ax, @data   
                    
    mov ds, ax      
    xor ax, ax      
    
    coutStr mesInputA   
    input               
    mov ax, dx          
    endl                
    coutStr binA        
    call print                      
    push ax             
    
    endl
    coutStr mesInputB   
    input               
    mov ax, dx          
    endl                
    coutStr binB        
    call print          
    push ax             
    
    pop dx              
    pop ax              
    call calc           
    call vyvod
    
    
    mov AH, 08h         
    int 21h             
                        
    mov AX, 4c00h        
                        
    int 21h             
 
 
main endp
 
end main
Добавлено через 2 минуты
Очень нужна помощь, я в этом вапще не шарю
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2012, 13:05
Ответы с готовыми решениями:

Написать комментарии для программы, пожалуйста)
.model tiny .stack 100h .data outStr db '0000$' .code translByte proc push ax push ax shr al,4 cmp al,9

Написать подробные комментарии к каждой строке кода
Напишите комментарий к каждой команде что она делает пожалуйста #include<stdio.h> #include<stdlib.h> ...

Написать подробные комментарии к каждой строке кода
Напишите комментарий к каждой команде что она делает пожалуйста #include <iostream> #include <algorithm> #include...

8
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
05.06.2012, 13:24
Вот с комментами:
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
.model small;малая модель
.data;сегмент данных
mesInputA db "Vvedite A(ot 0 do 255): $"
mesInputB db "Vvedite B(ot 0 do 255): $"
binA db "A v binarnom: $"
binB db "B v binarnom: $"
inErr db "Owibka vvoda!! Vvedite zanovo: $"
AsubB db "A - B = $"
rez db "C = (A - B)*4 = $"
rezSdvig db "C = (A - B)*4 > 3 = $";сообщения
.stack
db 256 dup("?");стек
.code;сегмент кода
coutStr macro a;первый макрос
push ax
push dx;параметры сохраняем
mov ah, 9
mov dx, offset a
int 21h;сообщение выводим
pop dx
pop ax;и возвращаем
endm
;--------------------------------------------
cinChar macro;макрос ввода цифры
mov ah, 1h
int 21h;ждем нажатие
sub al, 30h;и получаем цифру из ASCII кода
endm
;------------------------------------------------
endl macro;макрос перевода строки
push ax
push dx;сохраняем изменяемые регистры
mov ah, 2
mov dx, 10
int 21h;выводим перевод строки
pop dx
pop ax;достаем регистры
endm
;---------------------------------------------------------
print proc;процедура вывода
push cx
push bx
push dx;сохраняем изменяемые регистры
mov bx, ax;AX берем себе
push ax;и в стек пихаем
mov cx, 16;16 иттераций
cicl:
xor dx, dx;обнуляем DX
sal bx, 1;сдвигаем арифметически Bx на 1 позицию
adc dl, 30h;
mov ah, 2
int 21h;и вывод двоичного разряда
loop cicl;так 16 раз
pop ax
pop dx
pop bx
pop cx;достаем регистры
ret;возврат
endp
;---------------------------------------------------------
input macro;макрос ввода
local startErr, start, m1, m2;локальные переменные
jmp start;на код
startErr:
endl;первод строки при ошибке
coutStr inErr;выводим сообщение
start:
mov cx, 3;3 прохода
xor dx, dx;обнуляем DX
m1:
xor ax, ax;AX обнуляем
cinChar;вводим символ
cmp al, 9;если больше 9 или отрицательный результат, то выход из цикла
ja m2
xor bx, bx;обнуляем BH
mov bl, al;заносим цифру
xor ax, ax;обнуляем AX
mov al, dl;заносим значение из DL
xor dx, dx;обнуляем DX
mov dl, 10;заносим множитель
mul dl;и перемножаем
cmp ah,0;если >256, то ошибка
ja startErr
xor dx, dx;обнуляем регистр
mov dl, al;заносим значение, которое получили
add dx, bx;плюсуем накопленное значение
cmp dh, 0
ja startErr;если больше 65536, то Error
loop m1;так 3 раза
m2:
;вот сюда происходит вылет, если введен недопустимый символ
endm
;---------------------------------------------------------
calc proc;процедура подсчета
sub ax, dx;AX-DX
endl;перевод строки
coutStr AsubB;вывод сообщения
call print;вывод числа
shl ax, 2;AX множим на 4
endl;перевод строки
coutStr rez;выводим сообщение
call print;и результат
ror ax, 3;циклически сдвигаем на 3 разряда.
ret;возврат
endp
;---------------------------------------------------------
vyvod proc;вывод
endl;перевод строки
coutStr rezSdvig;вывод сообщения
call print;и числа
ret;возврат
 
endp; конец процедуры
;---------------------------------------------------------
main proc; главная процедура
mov ax, @data
 
mov ds, ax;настраиваем сегменты
xor ax, ax;обнуляем AX
 
coutStr mesInputA;выводим сообщение
input;вводим число
mov ax, dx
endl;переводим строку
coutStr binA;выводим строку
call print;выводим число
push ax;AX сохраняем
 
endl;перевод строки выводим
coutStr mesInputB;выводим строку
input;вводим
mov ax, dx;заносим в регистр
endl;перевод строки
coutStr binB;выводим строку
call print;выводим результат
push ax
 
pop dx
pop ax;размещаем введеное в регистры
call calc;считаем
call vyvod;выводим результат
 
 
mov AH, 08h
int 21h;ждем клавиши
 
mov AX, 4c00h
 
int 21h;выход из программы
 
 
main endp;главная процедура
 
end main;конец кода
1
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 2
07.06.2012, 15:24  [ТС]
Цитата Сообщение от Anonimys Посмотреть сообщение
Вот с комментами:
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
.model small;малая модель
.data;сегмент данных
mesInputA db "Vvedite A(ot 0 do 255): $"
mesInputB db "Vvedite B(ot 0 do 255): $"
binA db "A v binarnom: $"
binB db "B v binarnom: $"
inErr db "Owibka vvoda!! Vvedite zanovo: $"
AsubB db "A - B = $"
rez db "C = (A - B)*4 = $"
rezSdvig db "C = (A - B)*4 > 3 = $";сообщения
.stack
db 256 dup("?");стек
.code;сегмент кода
coutStr macro a;первый макрос
push ax
push dx;параметры сохраняем
mov ah, 9
mov dx, offset a
int 21h;сообщение выводим
pop dx
pop ax;и возвращаем
endm
;--------------------------------------------
cinChar macro;макрос ввода цифры
mov ah, 1h
int 21h;ждем нажатие
sub al, 30h;и получаем цифру из ASCII кода
endm
;------------------------------------------------
endl macro;макрос перевода строки
push ax
push dx;сохраняем изменяемые регистры
mov ah, 2
mov dx, 10
int 21h;выводим перевод строки
pop dx
pop ax;достаем регистры
endm
;---------------------------------------------------------
print proc;процедура вывода
push cx
push bx
push dx;сохраняем изменяемые регистры
mov bx, ax;AX берем себе
push ax;и в стек пихаем
mov cx, 16;16 иттераций
cicl:
xor dx, dx;обнуляем DX
sal bx, 1;сдвигаем арифметически Bx на 1 позицию
adc dl, 30h;
mov ah, 2
int 21h;и вывод двоичного разряда
loop cicl;так 16 раз
pop ax
pop dx
pop bx
pop cx;достаем регистры
ret;возврат
endp
;---------------------------------------------------------
input macro;макрос ввода
local startErr, start, m1, m2;локальные переменные
jmp start;на код
startErr:
endl;первод строки при ошибке
coutStr inErr;выводим сообщение
start:
mov cx, 3;3 прохода
xor dx, dx;обнуляем DX
m1:
xor ax, ax;AX обнуляем
cinChar;вводим символ
cmp al, 9;если больше 9 или отрицательный результат, то выход из цикла
ja m2
xor bx, bx;обнуляем BH
mov bl, al;заносим цифру
xor ax, ax;обнуляем AX
mov al, dl;заносим значение из DL
xor dx, dx;обнуляем DX
mov dl, 10;заносим множитель
mul dl;и перемножаем
cmp ah,0;если >256, то ошибка
ja startErr
xor dx, dx;обнуляем регистр
mov dl, al;заносим значение, которое получили
add dx, bx;плюсуем накопленное значение
cmp dh, 0
ja startErr;если больше 65536, то Error
loop m1;так 3 раза
m2:
;вот сюда происходит вылет, если введен недопустимый символ
endm
;---------------------------------------------------------
calc proc;процедура подсчета
sub ax, dx;AX-DX
endl;перевод строки
coutStr AsubB;вывод сообщения
call print;вывод числа
shl ax, 2;AX множим на 4
endl;перевод строки
coutStr rez;выводим сообщение
call print;и результат
ror ax, 3;циклически сдвигаем на 3 разряда.
ret;возврат
endp
;---------------------------------------------------------
vyvod proc;вывод
endl;перевод строки
coutStr rezSdvig;вывод сообщения
call print;и числа
ret;возврат
 
endp; конец процедуры
;---------------------------------------------------------
main proc; главная процедура
mov ax, @data
 
mov ds, ax;настраиваем сегменты
xor ax, ax;обнуляем AX
 
coutStr mesInputA;выводим сообщение
input;вводим число
mov ax, dx
endl;переводим строку
coutStr binA;выводим строку
call print;выводим число
push ax;AX сохраняем
 
endl;перевод строки выводим
coutStr mesInputB;выводим строку
input;вводим
mov ax, dx;заносим в регистр
endl;перевод строки
coutStr binB;выводим строку
call print;выводим результат
push ax
 
pop dx
pop ax;размещаем введеное в регистры
call calc;считаем
call vyvod;выводим результат
 
 
mov AH, 08h
int 21h;ждем клавиши
 
mov AX, 4c00h
 
int 21h;выход из программы
 
 
main endp;главная процедура
 
end main;конец кода
Если можно с комментами каждой строчки, а то препод валит
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
07.06.2012, 15:59
Цитата Сообщение от olo Посмотреть сообщение
а то препод валит
держись, мы с тобой
0
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 3
27.01.2013, 16:54
помогите с комментариями пожалуйста, есть программа (незнаю на сколько рабочая) нужны комментарии (работа над ошибками), возможно исправление кода (сделать как можно поще).
Здавать завтра... а пытаюсь разобраться с ассемлером со вчера, уже наступил мозговой коллапс, и уже смутно что понимаю.
вобщем помогите люди добрые.

;Пользователь вводит два числа А и В в десятичном виде. Про-грамма должна:
;1. Посчитать С=А+В.
;2. Обнулить все нечетные биты С.
;3. Вывести на экран число С и все промежуточные результаты в двоичном виде.
;4. Написать процедуру для вывода результата
;5. Написать макрос для ввода чисел
;6. Написать макрос для расчета
;7. Передача параметров через стек
;8. Используйте упрощенные директивы сегментации и формат exe-программы.

masm
model small
stack 256
.data
msg1 db 13,10,'Введите десятичное число A= $' ; строка1
msg2 db 13,10,'Введите десятичное число B= $' ; строка2
msg3 db 13,10,'Результат С=A+B $' ; строка3
a1 dw 0 ;что это?
x db 10

vvod macro ;задамим макросы
local m1,m2,m3,m4,end1
xor cx,cx ;очистка сx
m1: xor dx,dx
mov ah,6
mov dl,0ffh
int 21h
cmp al,13
jne m2
jmp end1
m2: cmp al,'0'
jnb m3
jmp m1
m3: cmp al,'9'
jna m4
jmp m1
m4: mov dl,al
mov ah,6 ;ф-ция вывода символа
int 21h ;выводим
sub dl,'0'
mov dh,10
xor ah,ah
mov al,cl
mul dh
add al,dl ;сложение
mov cl,al
jmp m1
end1: pop bx
push cx ;параметры сохраняем
push bx ;параметры сохраняем
endm

calc macro ;макрос расчета
pop bx
pop ax
pop cx
push bx
add ax,cx
and ax,0101010101010101b ; Обнулить нечетные биты?
pop bx
push ax
endm

.code

output proc ;макрос вывода
pop bx
pop ax
push bx
push ax
mov cl,16
l1: pop ax
shl ax,1
push ax
jc l2
mov dl,'0'
mov ah,6
int 21h
jmp l3
l2: mov dl,'1'
mov ah,6
int 21h
l3: cmp cl,0
loopne l1
pop ax
ret
endp

main proc
mov ax,@data
mov ds,ax
;ввод 1
mov ah,9
lea dx,msg1
int 21h
Vvod
;ввод 2
mov ah,9
lea dx,msg2
int 21h
Vvod
calc
mov ah,9
lea dx,msg3
int 21h
call output
mov ah,4ch
int 21h

main endp ;конец процедуры main
mov ah,0 ;ждем нажатия
int 16h ;любой клавиши
mov ax,4c00h
int 21h ;выход из программы
end main ;конец программы
0
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
27.01.2013, 17:55
Цитата Сообщение от mastervlad Посмотреть сообщение
a1 dw 0 ;что это?
Ерунда, которая так и не используется. Выкинуть.
Цитата Сообщение от mastervlad Посмотреть сообщение
and ax,0101010101010101b ; Обнулить нечетные биты?
Вроде обнуляются четные, если считать справа налево.
1
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 3
27.01.2013, 18:12
а поподробнее?
0
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
28.01.2013, 09:03
Цитата Сообщение от mastervlad Посмотреть сообщение
а поподробнее?
Что именно поподробнее?
1
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 3
28.01.2013, 10:25
Цитата Сообщение от Anonimys Посмотреть сообщение
Что именно поподробнее?
где ошибка в программе?,
и по возможности коментарии к каждой строке..
по возможности упростить пограмму, чтобы оставить минимум комманд, если возможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2013, 10:25
Помогаю со студенческими работами здесь

Написать максимально подробные комментарии к данной программе
#include "stdafx.h" const int N=10000; double calculateIntegral(double x); double Function(double x); double...

Написать подробные комментарии к каждой инструкции заданного исходника
#include <iostream> using namespace std; int main() { int a,b,a1,b1,r; r=1; cout << "Pervoe chislo = "; ...

Объяснить, что происходит в заданных примерах с кодом (написать подробные комментарии к каждой инструкции)
Доброго времени суток, уважаемые форумчане! :) Программный код, в данном сообщение к 2 программам, требуется закомментировать, в чем я...

Подробные комментарии к программе
Что-то никак не могу разобраться. Нужны подробные комментарии где, что и как происходит. Буду благодарен за помощь!) #include...

Напишите, пожалуйста, подробные комментарии
Закомментируйте код пожалуйста, подробно если можно, чтоб понять что к чему #include "stdafx.h" #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru