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

Узнай цену своей работы

Формулировка задачи:

Не могу разобраться с программами, писал не сам, очень не хватает комментариев, буду очень благодарен за их написание, заранее спасибо Первая программа, удаляет лишние пробелы со строки:
Листинг программы
  1. ASSUMe CS:CODE,DS:CODE,ES:CODE
  2. CODE segment
  3. org 100h
  4. start:
  5. mov di,offset startstring
  6. mov cx,0
  7. foreverloop:
  8. mov ah,10h
  9. int 16h
  10. mov dl,al
  11. mov ah,2
  12. int 21h
  13. mov [di],dl
  14. inc di
  15. cmp dl,'.'
  16. je outlrfwrwr
  17. inc cx
  18. jmp foreverloop
  19. outlrfwrwr:
  20. mov si,offset startstring
  21. mov di,offset endstring
  22. loopwerwtwty:
  23. mov ax,[si]
  24. cmp ax,2020h
  25. je nosigse
  26. mov [di],al
  27. inc di
  28. nosigse:inc si
  29. loop loopwerwtwty
  30. inc di
  31. push ax
  32. mov al,10
  33. mov [di],al
  34. mov al,13
  35. mov [di],al
  36. mov al,'$'
  37. mov [di],al
  38. pop ax
  39. mov ah,9
  40. mov dx,offset endstring
  41. int 21h
  42. mov ah,10h
  43. int 16h
  44. int 20h
  45. startstring db 80 dup (?)
  46. endstring db 80 dup (?)
  47. CODE ends
  48. end start
Вторая программа выводит дату из CMOS:
Листинг программы
  1. .186
  2. .model small
  3. .stack 100h
  4. .data
  5. Messd db "Current date: ","$"
  6. dt_ db ?,?,'-',?,?,'-',?,?,?,?, 0Ah, 0Dh, "$"
  7. .code
  8. start:
  9. mov ax, @data
  10. mov ds, ax
  11. mov ax,3
  12. int 10h
  13. xor ax, ax
  14. xor dx,dx
  15. mov dx, offset Messd
  16. call showmess
  17. xor dx,dx
  18. call getdate
  19. mov ah, 4Ch
  20. int 21h
  21. showmess proc
  22. mov ah,09h
  23. int 21h
  24. ret
  25. showmess endp
  26. toasci proc
  27. ror ax, 4
  28. shr ah, 4
  29. or ax,'00'
  30. ret
  31. toasci endp
  32.  
  33. getdate proc
  34. xor ax, ax
  35. mov ah, 04h
  36. int 1Ah
  37. xor ah, ah
  38. mov al, dl
  39. call toasci
  40. mov word ptr dt_, ax
  41. xor ah, ah
  42. mov al, dh
  43. call toasci
  44. mov word ptr dt_+3, ax
  45. xor ah, ah
  46. mov al,ch
  47. call toasci
  48. mov word ptr dt_+6, ax
  49. xor ah, ah
  50. mov al, cl
  51. call toasci
  52. mov word ptr dt_+8, ax
  53. mov dx, offset dt_
  54. call showmess
  55. ret
  56. getdate endp
  57. end start

Решение задачи: «Написать комментарии к 2-ум программам»

textual
Листинг программы
  1. .model small            ;модель памяти             
  2. .386                    ;процессор, для которого написана программа
  3.  
  4. .data                   ;сегмент данных
  5.         db 'BeginOfData$'
  6. Messd   db 'Current date: $';строка-подсказка
  7. dt_     db ?,?,'-',?,?,'-',?,?,?,?,0Ah,0Dh,'$';строка с датой
  8.         db 'EndOfData$'
  9.  
  10. .stack                  ;сегмент стека     
  11.     db  256 dup(?)      ;выделение памяти под стек
  12.  
  13. .code                   ;сегмент кода              
  14. start:                  ;метка, с которой должна начаться выполняться программа
  15.     mov ax,@data        ;используем промежуточный регистр ax
  16.     mov ds,ax           ;для инициализации сегмента данных
  17.                         ;т.к. запись напрямую в сегментный регистр запрещена
  18.    
  19.     mov ax,00h          ;выбор видеорежима
  20.     mov al,03h          ;текстовый видеорежим 80*25
  21.     int 10h             ;прерывание видеосервиса биос,
  22.                         ;чтобы функция выполнилась
  23.    
  24.     xor ax,ax           ;обнуление регистра ax
  25.     xor dx,dx           ;обнуление регистра dx
  26.    
  27.     mov ah,09h          ;функция вывода сообщения на консоль
  28.     mov dx,offset Messd ;сообщение о текущей дате
  29.     int 21h             ;прерывание, чтобы функция выполнилась
  30.    
  31.     xor dx,dx           ;обнуление регистра dx
  32.    
  33.     call getdate
  34.    
  35.     mov ah,4Ch          ;функция выхода из программы           
  36.     mov al,00h          ;код возврата
  37.     int 21h             ;прерывание, чтобы функция выполнилась
  38.    
  39.     getdate proc        ;начало процедуры getdate
  40.         mov ah,04h      ;функция чтения даты из "постоянных" (CMOS) часов
  41.                         ;реального времени
  42.         int 1Ah         ;прерывание, чтобы функция выполнилась
  43.    
  44.         xor ah,ah       ;обнуление регистра ah
  45.         mov al,dl       ;день в коде BCD
  46.         call toasci     ;вызов процедуры преобразования BCD числа (день недели),
  47.                         ;который находится в регистре ax, в ASCII-формат       
  48.         mov word ptr dt_,ax;запись дня недели в память
  49.        
  50.         xor ah,ah       ;обнуление регистра ah
  51.         mov al,dh       ;месяц в коде BCD
  52.         call toasci     ;вызов процедуры преобразования BCD числа (месяц),
  53.                         ;который находится в регистре ax, в ASCII-формат
  54.         mov word ptr dt_+3,ax;запись месяца в память
  55.        
  56.         xor ah,ah       ;обнуление регистра ah
  57.         mov al,ch       ;столетие в коде BCD
  58.         call toasci     ;вызов процедуры преобразования BCD числа (столетие),
  59.                         ;который находится в регистре ax, в ASCII-формат
  60.         mov word ptr dt_+6,ax;запись столетия в память
  61.        
  62.         xor ah,ah       ;обнуление регистра ah
  63.         mov al,cl       ;год в коде BCD
  64.         call toasci     ;вызов процедуры преобразования BCD числа (год),
  65.                         ;который находится в регистре ax, в ASCII-формат
  66.         mov word ptr dt_+8,ax;запись года в память
  67.        
  68.         mov ah,09h      ;функция вывода строки на консоль
  69.         mov dx,offset dt_;строка с текущей датой
  70.         int 21h         ;прерывание, чтобы функция выполнилась
  71.        
  72.         ret             ;возврат из процедуры
  73.     getdate endp        ;конец процедуры getdate
  74.    
  75.     toasci proc         ;начало процедуры toasci
  76.                         ;преобразовываем BCD число из упакованного формата
  77.                         неупакованный формат
  78.                         тому же меняем местами байты, т.к. после
  79.                         ;выхода из процедуры все число (слово) будет писаться в память
  80.                         ;(обратный порядок байт)
  81.         ror ax,4        ;циклически сдвигаем регистр ax на четыре бита вправо
  82.         shr ah,4        ;сдвигаем регистр ah на четыре бита
  83.        
  84.         or ax,'00'      ;конвертируем цифры BCD числа в ASCII-коды
  85.    
  86.         ret             ;возврат из процедуры
  87.     toasci endp         ;конец процедуры
  88. end start               ;указывается метка, с которой должна
  89.                         ;начаться выполняться программа

Объяснение кода листинга программы

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

  1. Переменная Messd содержит строку-подсказку Current date: $.
  2. Переменная dt_ содержит строку с датой в формате dd-mm-yy hh:mm:ss.
  3. Процедура getdate считывает дату из постоянных (CMOS) часов реального времени и выводит её на консоль в формате dd-mm-yy.
  4. Процедура toasci преобразует BCD число в ASCII-формат, при этом меняя местами байты.
  5. В конце кода указана метка end start, с которой должна начаться выполняться программа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут