Сегмент .startup .Com файл - Assembler

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

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

Доброго времени суток. Имеется .com программа, которая выводит на экран .PCX изображение. Хотелось бы получить пояснения по одному куску кода.
Листинг программы
  1. .model tiny
  2. .code
  3. .startup
  4. mov bx, 80h ; Получить ASCIIZ имя файла
  5. mov dx, 82h
  6. mov al, byte ptr es:[bx] ;режим доступа
  7. inc al ;
  8. add bx, ax ;Дескриптор наследуется дочерным процессом
  9. mov byte ptr es:[bx], 0 ;
  10. mov ax, 03d00h
  11. int 21h ; Открыть файл
  12.  
  13. Start:
  14. mov bx, ax ; bx = длина файла
  15. mov ax, 0a000h ;Адрес начала видеобуфера в режиме VGA
  16. mov es, ax ;
  17.  
  18. mov di, 0fa01h ; Инициализация режиме VGA
  19. mov ax, 13h ; и
  20. int 10h ; запись строки в текущую страницу видеобуфера
  21. mov ah, 42h ; установка указателя в файле
  22. xor cx, cx
  23. xor dx, dx
  24. mov al, 2 ;знаковое смещение от конца файла,т.е. вычисление длины файла
  25. int 21h
  26. sub ax, 300h
  27. xor cx, cx
  28. mov dx, ax
  29. mov ah, 42h ; установка указателя в файле
  30. mov al, 0 ;абсолютное смещение от начала файла
  31. int 21h
  32. mov cx, 300h ; загрузка pcx палитры
  33. push di
  34. Loop0:
  35. push cx
  36. call GetByte
  37. shr al, 2
  38. stosb ;копирует регистр AL в память по адресу ES:DI
  39. pop cx
  40. loop Loop0
  41.  
  42. pop dx
  43. push bx
  44. mov ax, 1012h ;установка цветового регистра
  45. xor bx, bx
  46. mov cx, 100h
  47. int 10h
  48. pop bx
  49. mov ah, 42h ; указатель на начало pcx изображения
  50. xor cx, cx
  51. mov dx, 80h
  52. mov al, 0h
  53. int 21h
  54. xor di, di ;указивает на начало экрана
  55. Loop1: ; Вывод pcx изображения
  56. call GetByte
  57. and al, 0c0h ;
  58. cmp al, 0c0h ;Сравнение на повторяющийся байт
  59. mov al, B
  60. je Run
  61. stosb
  62. jmp Cont
  63. Run:
  64. sub al, 0c0h
  65. push ax
  66. call GetByte
  67. pop cx
  68. rep stosb
  69. Cont:
  70. cmp di, 0fa00h ;64000
  71. jb Loop1
  72. mov ah, 3eh ; закрытие файла
  73. int 21h
  74. mov ah, 00h ; прочитать символ из буфера
  75. int 16h
  76. mov ax, 13h ; инициализация граф режима 320х200 256 цветов
  77. int 10h
  78. ret
  79. GetByte: ; Получить байт из файла
  80. lea dx, B
  81. mov ah, 3Fh ;Чтение из файла
  82. mov cx, 1 ;число пересылаемых байтов
  83. int 21h
  84. mov al, B
  85. ret
  86. B db ?;буфер чтения
  87. end
Что за сегмент .startup? В литературе объяснения не нашел. Хотелось бы подробное объяснения, либо же ссылку на литературу. Спасибо.

Решение задачи: «Сегмент .startup .Com файл»

textual
Листинг программы
  1.       3                  .startup
  2. 1     4 0000                 @Startup:
  3. 1     5 0000  BA 0000s               MOV     DX,@data
  4. 1     6 0003  8E DA              MOV     DS,DX
  5. 1     7 0005  8C D3              MOV     BX,SS
  6. 1     8 0007  2B DA              SUB     BX,DX
  7. 1     9 0009  D1 E3 D1 E3 D1 E3 D1+      SHL     BX,4
  8.      10       E3
  9. 1    11 0011  FA                 CLI
  10. 1    12 0012  8E D2              MOV     SS,DX
  11. 1    13 0014  03 E3              ADD     SP,BX
  12. 1    14 0016  FB                 STI

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

  1. Прикрепление сегмента .startup.
  2. Установка регистра DS в адрес начала сегмента данных.
  3. Установка регистра BX в значение регистра стека SS.
  4. Вычисление размера стека, вычитая адрес начала сегмента данных из регистра стека.
  5. Установка флага продолжения выполнения инструкций.
  6. Установка регистра стека SS равным регистру данных DS.
  7. Увеличение указателя стека на вычисленный размер стека.

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


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

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

8   голосов , оценка 4 из 5

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

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

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