Важная информация
Показано с 1 по 4 из 4

Тема: Комментарии к коду

  1. #1 Комментарии к коду 
    Новичок
    Регистрация
    17.09.2013
    Сообщений
    2
    Сказал(а) спасибо
    2
    Поблагодарили 0 раз(а) в 0 сообщениях
    Есть программа, чтоб сдать экзамен надо объяснить её преподу, но с этим совсем беда. Помогите, пожалуйста, закомментировать её по максимуму, чтоб смогла объяснить:
    Код asm:
    .model tiny ;Модель для COM-файла
    .386 ;Будут использоваться инструкции процессора 80386 (на самом деле в этой программе - нет)
    .code ;Начала сегмента кода
    org 100h ;Код пойдет по смещению в 256 байт от начала сегмента, 256 байт на блок PSP
    start: ;Адрес начала выполнения программы
    mov ax,3 ;Перемещение в регистра AX значения 3. В дальнейшем такие команды комментировать не буду
    int 10h ;При AL = 3 функция BIOS INT 10h установит текстовой режим 80x25 символов
     
    mov ax,0b800h ;Адрес сегмента текстовой видеопамяти в регистр AX
    mov es,ax ;Затем его-же в сегментный регистр ES. 
     
    xor si,si ;обнуление регистра si
    mov dh,0 ;bl 13-pink; 14-yellow;15 - white ;DH - цвет
    mov dl,15 ;wh 7-green; 9-blue;2-darkgeen;3 - blue-grey;5-violet;6-darkyellow;11-aqua;12 - red; ;DL - цвет.
    mov cx,8
    stolb: ;Метка, за ней идет код вывода столбца
    push cx ;Сохранение значения регистра CX в стеке
     
    ;1-а строка
    mov cx,8
    line: ;Далее - код вывода строки
    push cx  ;Сохранение значения регистра CX в стеке
    mov cx,2
    ;color
    cmp ah,dl ;wh  - сравнение регистров ah и dl
    je nx - если равны - переход на метку nx
    mov ah,dl ;wh ;регистр ah становится равен значению в регистре dl
    jmp kub ;Безусловный переход на метку kub
    nx: ;Метка NX
    mov ah,dh ;регистр ah становится равен значению в регистре dl
    kub: ;Метка kub
    mov byte ptr es:[si],0dbh ;Записать шестнадцатеричное значение db по адресу es:[si]. es:[si] в этой ситуации - это видеопамять.
    ;этой командой (сверху) выводится символ в видеопамять
    inc si ;увеличить содержимое регистра si на единицу
    mov byte ptr es:[si],ah ;Записать значение регистра ah по адресу es:[si]. В данном случае пишется атрибут символа - влияет на его цвет и фон
    inc si ;Перейти к следующему символу (увеличение фактически и переходит, т.к si адресует видеопамять в этом случае примерно также, как индекс массива в языках высокого уровня)
    loop kub ;Пока cx больше нуля - он уменьшается на единицу и происходит переход по метке kub
    pop cx  ;Восстановление старого значения регистра cx
    loop line  ;Пока cx больше нуля - он уменьшается на единицу и происходит переход по метке line
     
    pop cx ;Восстановление старого значения регистра cx
    xchg dh,dl ;Обмен местами значений регистров dh и dl
    mov ah,1 ;sboi
    add si,128 ;увеличение si на 128. Фактически, происходит что-то вроде перехода на новую строку
    loop stolb ;Пока cx больше нуля - он уменьшается на единицу и происходит переход по метке stolb
     
    call TIMER ;Вызов процедуры TIMER
    xor si,si ;SI приравнивается нулю
    mov cx,8 
    xchg dl,dh ;Обмен местами значений регистров dh и dl
    add ah,7 ;определение цвета для нового кадра
    jmp stolb ;,безусловный переход на метку отрисовки столба
    ;цикл бесконечный, поэтому нет выхода из программы
     
    TIMER proc ;Процедура TIMER
    push es ;сохранение в стек старого значения регистра ES
    mov ax,40h ;AX приравнивается 40h
    mov es,ax  ;переходим на 40-ой сегмент (помещается в ES, потом с него идет адресация).
    mf: ;метка MF
    mov al,byte ptr es:[40h] ;Пишем в регистр AL содержимое ячейки памяти 40h:40h. Это... 40:40 = Motor shutoff counter - decremented until 0 then shuts off diskette motor. Судя по названию процедуры, хотят прочитать значение тиков таймера, но оно находится по адресу es:[6ch] в данном случае.
    sub al,80 ;чем больше значение тем дольше (не более 0ffh или 255d)
    ms:
    cmp al,byte ptr es:[40h] ;сравниваем значение регистра al и ячейки памяти по es:[40h]
    jle ms ;Если al меньше или равен этой ячейке, то переходим назад на метку ms:
    pop es ;восстанавливаем старое значение регистра es
    ret ;Выход из подпрограммы.
    TIMER endp
    jmp exit
    ; end start
    exit: mov ah, 4Ch ;Передаем код завершения процесса...
    int 21h ;Функции DOS, которая и завершит нашу программу.
    end start
    Последний раз редактировалось Абадябер; 18.09.2013 в 03:00.
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Прокомментировал прямо в вашем-же сообщении. Кажется, уже некуда особо подробнее
    Саму программу я на рабочесть не тестировал.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (18.09.2013), rrrFer (22.09.2013), Ксю Логинова (18.09.2013)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,931
    Сказал(а) спасибо
    1,842
    Поблагодарили 982 раз(а) в 840 сообщениях
    Записей в блоге
    1
    Абадяберу отдельное спасибо за коменты, сам не полез - лень разгребать этот ужас...

    Код asm:
    mov byte ptr es:[si],0dbh ;Записать шестнадцатеричное значение db по адресу es:[si]. es:[si] в этой ситуации - это видеопамять.
    ;этой командой (сверху) выводится символ в видеопамять
    inc si ;увеличить содержимое регистра si на единицу
    mov byte ptr es:[si],ah ;Записать значение регистра ah по адресу es:[si]. В данном случае пишется атрибут символа - влияет на его цвет и фон

    StoSw?... не не слышал... )))
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Ксю Логинова (18.09.2013)

  6. #4  
    Новичок
    Регистрация
    17.09.2013
    Сообщений
    2
    Сказал(а) спасибо
    2
    Поблагодарили 0 раз(а) в 0 сообщениях
    Спасибо вам огромное, добрые люди!!! Прога работает, препод сам смотрел!
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Комментарии для сайта и спам...
    от stabud в разделе Общие вопросы web-разработки
    Ответов: 3
    Последнее сообщение: 12.09.2013, 03:08
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •