Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
1

Написать комментарии к 2-ум программам

19.05.2016, 12:11. Показов 902. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу разобраться с программами, писал не сам, очень не хватает комментариев, буду очень благодарен за их написание, заранее спасибо
Первая программа, удаляет лишние пробелы со строки:
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
ASSUMe CS:CODE,DS:CODE,ES:CODE
CODE segment
org 100h
start:
mov di,offset startstring
mov cx,0
foreverloop:
mov ah,10h
int 16h
mov dl,al
mov ah,2
int 21h
mov [di],dl
inc di
cmp dl,'.'
je outlrfwrwr
inc cx
jmp foreverloop
outlrfwrwr:
 
mov si,offset startstring
mov di,offset endstring
loopwerwtwty:
mov ax,[si]
cmp ax,2020h
je nosigse
mov [di],al
inc di
nosigse:inc si
loop loopwerwtwty
 
inc di
push ax
mov al,10
mov [di],al
mov al,13
mov [di],al
mov al,'$'
mov [di],al
pop ax
mov ah,9
mov dx,offset endstring
int 21h
mov ah,10h
int 16h
int 20h
startstring db 80 dup (?)
endstring db 80 dup (?)
CODE ends
end start
Вторая программа выводит дату из CMOS:
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
.186
.model small
.stack 100h
.data
Messd   db  "Current date: ","$"
dt_ db  ?,?,'-',?,?,'-',?,?,?,?, 0Ah, 0Dh, "$"
 
.code
start:
    mov ax, @data
    mov ds, ax
    mov ax,3
    int 10h
    xor ax, ax  
    xor dx,dx
    mov dx, offset Messd
    call    showmess
    xor dx,dx
    call    getdate
    mov ah, 4Ch
    int 21h
 
showmess proc   
    mov ah,09h
    int 21h
    ret
showmess endp       
 
toasci proc
    ror ax, 4
    shr ah, 4
    or ax,'00'
    ret
toasci endp
    
 
getdate proc
    xor ax, ax
    mov ah, 04h
    int 1Ah
    xor ah, ah
    mov al, dl
    call toasci
    mov word ptr dt_, ax
    xor ah, ah
    mov al, dh
    call toasci
    mov word ptr dt_+3, ax
    xor ah, ah
    mov al,ch
    call toasci
    mov word ptr dt_+6, ax
    xor ah, ah
    mov al, cl
    call toasci
    mov word ptr dt_+8, ax  
    mov dx, offset dt_
    call showmess
    ret
getdate endp
 
end start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.05.2016, 12:11
Ответы с готовыми решениями:

комментарии к программам
есть 2 программки, одна складывает 32-битные числа и выводит на экран "картинку". ...

Нужно написать комментарии
Хотя бы к каждому макросу, можно и к каждой строке, нужно написать комментарий, какую функцию он...

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

Необходимо написать подробные комментарии кода программы
Пользователь вводит два числа А и В в десятичном виде. Программа должна: 1. Посчитать С=(А-В)*4....

7
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
19.05.2016, 14:24 2
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

Цитата Сообщение от Max00766 Посмотреть сообщение
писал не сам
а отдавать преподавателю хоть сам будешь?

Добавлено через 43 минуты
Цитата Сообщение от Max00766 Посмотреть сообщение
очень не хватает комментариев
так уж и быть написал. разбирайся
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
.model small            ;модель памяти              
.386                    ;процессор, для которого написана программа
 
.data                   ;сегмент данных
startstring db 80 dup(?);исходная строка
endstring   db 80 dup(?);результирующая строка
 
.stack                  ;сегмент стека      
    db  256 dup(?)      ;выделение памяти под стек
 
.code                   ;сегмент кода                
start:                  ;метка, с которой должна начаться выполняться программа
    mov ax,@data        ;используем промежуточный регистр ax
    mov ds,ax           ;для инициализации сегмента данных
                        ;т.к. запись напрямую в сегментный регистр запрещена
    
    push ds             ;проделываем простые действия со стеком
    pop es              ;чтобы сегментный регистр es указывал на сегмент данных
    
    mov di,offset startstring;загрузка адреса строки startstring в регистр di
    mov cx,0            ;счетчик вводимых символов       
    foreverloop:        ;метка foreverloop
    mov ah,10h          ;чтение символа с клавиатуры с ожиданием
    int 16h             ;прерывание, чтобы функция выполнилась
    
    mov ah,02h          ;функция вывода символа на консоль
    mov dl,al           ;помещаем введенный символ в регистр dl
    int 21h             ;прерывание, чтобы функция выполнилась
    
    mov [di],dl         ;помещаем введенный символ по адресу, который в di
    inc di              ;продвигаем указатель di к следующему элементу строки
    
    cmp dl,'.'          ;проверяем введенный символ на знак точки
    je outlrfwrwr       ;если введена точка, то прыгаем на метку outlrfwrwr
    
    inc cx              ;если введена не точка, то увеличиваем на единицу
                        ;число введенных символов
    jmp foreverloop     ;и прыгаем далее на ввод следующего символа
    
    outlrfwrwr:         ;метка outlrfwrwr
    mov si,offset startstring;загружаем адрес строки startstring в регистр si
    mov di,offset endstring  ;загружаем адрес строки endstring в регистр di
    loopwerwtwty:       ;метка loopwerwtwty
    mov ax,[si]         ;загружаем слово по адресу si в регистр ax
    
    cmp ax,2020h        ;проверяем загруженое слово на равенство 
                        ;двум подряд идущим пробелам
    je nosigse          ;если проверка завершилась удачно,
                        ;то прыгаем на метку nosigse    
    mov [di],al         ;помещаем младший байт из загруженного слова
                        ;по адресу, на который указывает регистр di
    inc di              ;продвигаем указатель di на следующий элемент
                        ;в результирующей строке
    nosigse:            ;метка nosigse
    inc si              ;продвигаем указатель si на следующий элемент
                        ;в исходной строке
    loop loopwerwtwty   ;проходим все элементы строки
    
    inc di              ;продвигаем указатель di на следующий элемент
    
    push ax             ;сохраняем значение, которое находится 
                        ;в регистре ax, в стеке
    
    mov al,10           ;символ перевода строки
    mov [di],al         ;помещаем по адресу di результирующей строки
    
    inc di              ;продвигаем указатель di на следующий элемент
    
    mov al,13           ;символ возврата каретки
    mov [di],al         ;помещаем по адресу di результирующей строки
    
    inc di              ;продвигаем указатель di на следующий элемент
    
    mov al,'$'          ;символ конца строки
    mov [di],al         ;помещаем по адресу di результирующей строки
    
    pop ax              ;восстанавливаем значение из стека
    
    mov ah,02h          ;функция вывода символа на консоль
    mov dl,0Ah          ;символ конца строки
    int 21h             ;прерывание, чтобы функция выполнилась
    
    mov ah,02h          ;функция вывода символа на консоль
    mov dl,0Dh          ;символ возврата каретки
    int 21h             ;прерывание, чтобы функция выполнилась
    
    mov ah,9            ;функция вывода строки
    mov dx,offset endstring;результирующая строка
    int 21h             ;прерывание, чтобы функция выполнилась
    
    mov ah,10h          ;чтение символа с клавиатуры с ожиданием
    int 16h             ;прерывание, чтобы функция выполнилась
    
    mov ah,4Ch          ;функция выхода из программы            
    mov al,00h          ;код возврата
    int 21h             ;прерывание, чтобы функция выполнилась
end start               ;указывается метка, с которой должна 
                        ;начаться выполняться программа
1
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
19.05.2016, 14:55  [ТС] 3
proc3nt, Спасибо большое, отдавать к сожалению сам)
0
Эксперт CЭксперт С++
 Аватар для liv
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
19.05.2016, 15:36 4
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

Max00766, держи вторую с комментариями... Эх, студенты...
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
.186        ;чтобы работало ror ax, 4
.model small    ;модель пам¤ти
.stack 100h ;стек
.data       ;сегмент данных
Messd   db  "Current date: ","$"        ;сообщение - заголовок
dt_ db  ?,?,'-',?,?,'-',?,?,?,?, 0Ah, 0Dh, "$"  ;дата
 
.code           ;сегмент кода
start:          ;стартова¤ метка
    mov ax, @data   ;инициируем регистр
    mov ds, ax      ; сегмента данных
    mov ax,3        ;устанавливаем текстовый режим экрана
    int 10h     ; одновременно очищаетс¤ экран
;    xor ax, ax     ;лишнее
;    xor dx,dx      ;лишнее
    mov dx, offset Messd    ;адрес строки дл¤ вывода
    call    showmess    ;выводим сообщение
;    xor dx,dx      ;лишнее
    call    getdate ;получаем и выводим дату
    mov ah, 4Ch ;выход
    int 21h     ; из программы
 
;вывод строки на экран
;ds:dx - адрес строки, в конце '$'
showmess proc
    mov ah,09h      ;ф-¤ вывода
    int 21h     
    ret
showmess endp       
 
;преобразование BCD в al в два ASCII-кода
;вход:  al - BCD, ah = 0
;выход: al - старша¤ цифра-символ
;       ah - младша¤
toasci proc     
;младшие 4 бита al в старние биты ah
;старшие 4 бита al в младшие биты al
    ror ax, 4       
;старшие 4 бита ah в младшие биты ah
    shr ah, 4
;превращаем в символы
    or ax,'00'
    ret
toasci endp
    
;получаем дату из CMOS и выводим
getdate proc
;    xor ax, ax     ;лишнее
    mov ah, 04h ;необходима¤ функци¤
    int 1Ah     ;получили в виде BCD: 
            ;ch - столетие 
            ;cl - год
            ;dh - мес¤ц
            ;dl - день
    xor ah, ah
    mov al, dl      ;день
    call toasci ;преобразовываем в два символа
    mov word ptr dt_, ax ;пишем на место дн¤
    xor ah, ah      ;надо дл¤ преобразовани¤
    mov al, dh      ;мес¤ц
    call toasci
    mov word ptr dt_+3, ax ;пишем на позицию мес¤ца
    xor ah, ah
    mov al,ch       ;столетие
    call toasci
    mov word ptr dt_+6, ax ;пишем в строку столетие
    xor ah, ah
    mov al, cl      ;год
    call toasci
    mov word ptr dt_+8, ax ;добавл¤ем год  
    mov dx, offset dt_;адрес строки даты
    call showmess   ;выводим
    ret
getdate endp
 
end start       ;конец кода с указанием точки входа
1
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
19.05.2016, 15:40  [ТС] 5
_liv_, И Вам спасибо огромное
0
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
19.05.2016, 16:02 6
ну и мое чуть более подробное
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
.model small            ;модель памяти              
.386                    ;процессор, для которого написана программа
 
.data                   ;сегмент данных
        db 'BeginOfData$'
Messd   db 'Current date: $';строка-подсказка
dt_     db ?,?,'-',?,?,'-',?,?,?,?,0Ah,0Dh,'$';строка с датой
        db 'EndOfData$'
 
.stack                  ;сегмент стека      
    db  256 dup(?)      ;выделение памяти под стек
 
.code                   ;сегмент кода                
start:                  ;метка, с которой должна начаться выполняться программа
    mov ax,@data        ;используем промежуточный регистр ax
    mov ds,ax           ;для инициализации сегмента данных
                        ;т.к. запись напрямую в сегментный регистр запрещена
    
    mov ax,00h          ;выбор видеорежима
    mov al,03h          ;текстовый видеорежим 80*25
    int 10h             ;прерывание видеосервиса биос,
                        ;чтобы функция выполнилась
    
    xor ax,ax           ;обнуление регистра ax
    xor dx,dx           ;обнуление регистра dx
    
    mov ah,09h          ;функция вывода сообщения на консоль
    mov dx,offset Messd ;сообщение о текущей дате
    int 21h             ;прерывание, чтобы функция выполнилась
    
    xor dx,dx           ;обнуление регистра dx
    
    call getdate
    
    mov ah,4Ch          ;функция выхода из программы            
    mov al,00h          ;код возврата
    int 21h             ;прерывание, чтобы функция выполнилась
    
    getdate proc        ;начало процедуры getdate
        mov ah,04h      ;функция чтения даты из "постоянных" (CMOS) часов
                        ;реального времени
        int 1Ah         ;прерывание, чтобы функция выполнилась
    
        xor ah,ah       ;обнуление регистра ah
        mov al,dl       ;день в коде BCD
        call toasci     ;вызов процедуры преобразования BCD числа (день недели), 
                        ;который находится в регистре ax, в ASCII-формат        
        mov word ptr dt_,ax;запись дня недели в память
        
        xor ah,ah       ;обнуление регистра ah
        mov al,dh       ;месяц в коде BCD
        call toasci     ;вызов процедуры преобразования BCD числа (месяц), 
                        ;который находится в регистре ax, в ASCII-формат
        mov word ptr dt_+3,ax;запись месяца в память
        
        xor ah,ah       ;обнуление регистра ah
        mov al,ch       ;столетие в коде BCD
        call toasci     ;вызов процедуры преобразования BCD числа (столетие), 
                        ;который находится в регистре ax, в ASCII-формат
        mov word ptr dt_+6,ax;запись столетия в память
        
        xor ah,ah       ;обнуление регистра ah
        mov al,cl       ;год в коде BCD
        call toasci     ;вызов процедуры преобразования BCD числа (год), 
                        ;который находится в регистре ax, в ASCII-формат
        mov word ptr dt_+8,ax;запись года в память
        
        mov ah,09h      ;функция вывода строки на консоль
        mov dx,offset dt_;строка с текущей датой
        int 21h         ;прерывание, чтобы функция выполнилась
        
        ret             ;возврат из процедуры
    getdate endp        ;конец процедуры getdate
    
    toasci proc         ;начало процедуры toasci
                        ;преобразовываем BCD число из упакованного формата
                        ;в неупакованный формат
                        ;к тому же меняем местами байты, т.к. после
                        ;выхода из процедуры все число (слово) будет писаться в память
                        ;(обратный порядок байт)
        ror ax,4        ;циклически сдвигаем регистр ax на четыре бита вправо
        shr ah,4        ;сдвигаем регистр ah на четыре бита
        
        or ax,'00'      ;конвертируем цифры BCD числа в ASCII-коды
    
        ret             ;возврат из процедуры
    toasci endp         ;конец процедуры
end start               ;указывается метка, с которой должна 
                        ;начаться выполняться программа
1
Эксперт CЭксперт С++
 Аватар для liv
5118 / 4558 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
19.05.2016, 16:29 7
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

proc3nt, мои комментарии полезнее
Сравни:
Цитата Сообщение от _liv_ Посмотреть сообщение
.186 ;чтобы работало ror ax, 4
Цитата Сообщение от proc3nt Посмотреть сообщение
.386 ;процессор, для которого написана программа
Цитата Сообщение от _liv_ Посмотреть сообщение
;преобразование BCD в al в два ASCII-кода
;вход: al - BCD, ah = 0
;выход: al - старша¤ цифра-символ
; ah - младша¤

;младшие 4 бита al в старние биты ah
;старшие 4 бита al в младшие биты al
ror ax, 4
;старшие 4 бита ah в младшие биты ah
shr ah, 4
Цитата Сообщение от proc3nt Посмотреть сообщение
;преобразовываем BCD число из упакованного формата
;в неупакованный формат
;к тому же меняем местами байты, т.к. после
;выхода из процедуры все число (слово) будет писаться в память
;(обратный порядок байт)
ror ax,4 ;циклически сдвигаем регистр ax на четыре бита вправо
shr ah,4 ;сдвигаем регистр ah на четыре бита
Цитата Сообщение от _liv_ Посмотреть сообщение
; xor ax, ax ;лишнее
Цитата Сообщение от proc3nt Посмотреть сообщение
xor ax,ax ;обнуление регистра ax
2
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
19.05.2016, 20:05 8
Цитата Сообщение от _liv_ Посмотреть сообщение
мои комментарии полезнее
_liv_, хорошо. убедил меня
1
19.05.2016, 20:05
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2016, 20:05
Помогаю со студенческими работами здесь

Дана программа. Нужно написать комментарии к ней
.data mass db 1,4,5,3,6 summ db 0 .code start: xor eax,eax xor ebx,ebx ...

Написать комментарии к 2 программам
вычислить сумму ряда, используя while и do-while. Слагаемые, по модулю меньше заданного...

Комментарии к программам
Здравствуйте, мне нужны подробные комментарии к практически каждой строке в программе, пожалуйста,...

Комментарии к программам
Кто хорошо разбирается помогите! Нужно написать коментарии к прогам. Пытался разобраться сам но для...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru