Программа на графику - Assembler

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

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

Ребят, помогите пожалуйста с решением этой задачи. Не знаю от чего оттолкнуться даже. В графическом режиме рисуется линия при нажатии кнопки и движении мышки, в случае получения замкнутой фигуры, по нажатии кнопки мышки производится заливка.

Решение задачи: «Программа на графику»

textual
Листинг программы
  1. org 100h
  2. start:
  3. mov ax,13h
  4. int 10h
  5.  
  6. xor ax,ax
  7. int 33h
  8. mov ax,1
  9. int 33h
  10.  
  11. mov ax,12
  12. mov cx,3
  13. mov dx,handler
  14. int 33h
  15.  
  16. push 0A000h
  17. pop  es
  18.  
  19. xor ax,ax
  20. int 16h
  21. ret
  22.  
  23. handler:
  24.   mov  ax,2
  25.   int  33h            ;выключаем курсор мыши
  26.  
  27.   shr  cx,1
  28.   push dx
  29.   push cx             ;передаём координаты курсора в качестве параметров функции line
  30.  
  31.   and  bx,1
  32.   jz @f
  33.   cmp  bl,[z]             ;если нажата левая кнопка мыши копируем содержимое экрана в буфер
  34.   jz @f
  35.     mov  [y],dx
  36.     mov  [x],cx
  37.  
  38.     mov  cx,320*200/2
  39.     push es
  40.     push ds
  41.     pop  es
  42.     pop  ds
  43.     mov  di,buffer
  44.     xor  si,si
  45.     rep  movsw
  46.     push es
  47.     push ds
  48.     pop  es
  49.     pop  ds
  50.   @@:
  51.   mov  [z],bl
  52.  
  53.   xor  di,di
  54.   mov  si,buffer
  55.   mov  cx,320*200/2
  56.   rep  movsw              ;копируем буфер на экран
  57.  
  58.   call line           ;рисуем линию из точки (x,y) в точку, на которую указывает курсор
  59.  
  60.   mov  ax,1
  61.   int  33h            ;включаем курсор мыши
  62. retf
  63.  
  64. floodfill:
  65.  
  66. line:
  67.   push bp
  68.   mov  bp,sp
  69.   imul di,[y],320
  70.   add  di,[x]
  71.  
  72.   mov  ax,[ss:bp+4]
  73.   sub  ax,[x]
  74.   sbb  bx,bx
  75.   mov  dx,[ss:bp+6]
  76.   sub  dx,[y]
  77.   sbb  cx,cx
  78.  
  79.   mov  si,ax
  80.   or   si,dx
  81.   je   quit
  82.  
  83.   xor  ax,bx
  84.   sub  ax,bx
  85.   xor  dx,cx
  86.   sub  dx,cx
  87.  
  88.   or   bx,1
  89.   mov  si,cx
  90.   xor  cx,320
  91.   sub  cx,si
  92.  
  93.   cmp  ax,dx
  94.   ja a
  95.       xchg ax,dx
  96.       xchg bx,cx
  97.   a:
  98.  
  99.   mov  si,ax
  100.   mov  bp,ax
  101.   b:mov byte[es:di],2
  102.     sub si,dx
  103.     jnl next
  104.       add si,ax
  105.       add di,cx
  106.     next:
  107.     add di,bx
  108.     dec bp
  109.   jne b
  110.  
  111.   quit:
  112.   mov byte[es:di],2
  113.   pop bp
  114. ret 4
  115.  
  116. x      dw 160
  117. y      dw 100
  118. z      db 0
  119. buffer rb 0

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

  1. org 100h - устанавливает начальный адрес загрузки программы
  2. start: - метка начала программы
  3. mov ax,13h - помещает значение 13h в регистр ax
  4. int 10h - вызывает прерывание 10h для установки видеорежима
  5. xor ax,ax - очищает регистр ax
  6. int 33h - вызывает прерывание 33h для управления мышью
  7. mov ax,1 - помещает значение 1 в регистр ax
  8. int 33h - вызывает прерывание 33h для управления мышью
  9. mov ax,12 - помещает значение 12 в регистр ax
  10. mov cx,3 - помещает значение 3 в регистр cx
  11. mov dx,handler - помещает адрес метки handler в регистр dx
  12. int 33h - вызывает прерывание 33h для управления мышью
  13. push 0A000h - помещает значение 0A000h в стек
  14. pop es - извлекает значение из стека и помещает в регистр es
  15. xor ax,ax - очищает регистр ax
  16. int 16h - вызывает прерывание 16h для работы с клавиатурой
  17. ret - возврат из процедуры
  18. handler: - метка начала процедуры
  19. ... (код обработки событий мыши)
  20. x dw 160 - объявляет переменную x со значением 160
  21. y dw 100 - объявляет переменную y со значением 100
  22. z db 0 - объявляет переменную z со значением 0
  23. buffer rb 0 - объявляет массив buffer размером 0 байт

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


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

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

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

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

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

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