Guest User

Untitled

a guest
Apr 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. kolor3 EQU 01H
  2. VideoB_Seg EQU 0A000h ; Określenie segmentu buforu Video
  3.  
  4. ; segment danych, czyli deklaracja zmiennych
  5. segdane segment
  6. x0 DW ?
  7. y0 DW ?
  8. x1 DW ?
  9. y1 DW ?
  10. blad DW ?
  11. deltax DW ?
  12. deltay DW ?
  13. x DW ?
  14. y DW ?
  15. offsetX DW ?
  16. offsetY DW ?
  17. currkol DB ?
  18. kolor DB ?
  19. segdane ends
  20.  
  21. ; stos
  22. stck segment stack
  23. DW 200 dup(?)
  24. stck ends
  25.  
  26. ; program właściwy
  27. segprog segment
  28. assume DS: segdane, CS: segprog, SS: stck
  29.  
  30. main proc; far
  31.  
  32. PUSH DS
  33. MOV AX,segdane
  34. MOV DS,AX ;w DS starsza czesc adresu logicznego
  35.  
  36. MOV AX,0012H ; 640x480 16 color graphics
  37. INT 10H
  38. MOV AX,1000H
  39. MOV BH,kolor3 ; kolor tła 01 niebieski
  40. MOV BL,00H
  41. INT 10H
  42.  
  43.  
  44. ;glowa
  45. MOV kolor,0EH
  46. MOV CX,400
  47. MOV BX,10
  48. PETLA:
  49. MOV x0,100
  50. MOV y0,BX
  51. MOV x1,500
  52. MOV y1,BX
  53. CALL rysujLinie
  54. INC BX
  55. LOOP PETLA
  56.  
  57. ;oczy
  58. MOV kolor,02H
  59. MOV CX,60
  60. MOV BX,60
  61. PETLA1:
  62. MOV x0,150
  63. MOV y0,BX
  64. MOV x1,210
  65. MOV y1,BX
  66. CALL rysujLinie
  67. INC BX
  68. LOOP PETLA1
  69.  
  70. MOV kolor,02H
  71. MOV CX,60
  72. MOV BX,60
  73. PETLA2:
  74. MOV x0,380
  75. MOV y0,BX
  76. MOV x1,440
  77. MOV y1,BX
  78. CALL rysujLinie
  79. INC BX
  80. LOOP PETLA2
  81. ;krzyzyki
  82. MOV kolor,01H
  83. MOV x0,150
  84. MOV y0,60
  85. MOV x1,210
  86. MOV y1,120
  87. CALL rysujLinie
  88.  
  89. MOV x0,150
  90. MOV y0,120
  91. MOV x1,210
  92. MOV y1,60
  93. CALL rysujLinie
  94.  
  95. MOV x0,380
  96. MOV y0,60
  97. MOV x1,440
  98. MOV y1,120
  99. CALL rysujLinie
  100.  
  101. MOV x0,380
  102. MOV y0,120
  103. MOV x1,440
  104. MOV y1,60
  105. CALL rysujLinie
  106.  
  107. ;nos
  108. MOV kolor,0CH
  109. MOV CX,120
  110. MOV BX,150
  111. PETLA3:
  112. MOV x0,240
  113. MOV y0,BX
  114. MOV x1,340
  115. MOV y1,BX
  116. CALL rysujLinie
  117. INC BX
  118. LOOP PETLA3
  119. ;usta
  120. MOV kolor,0CH
  121. MOV CX,30
  122. MOV BX,350
  123. PETLA4:
  124. MOV x0,150
  125. MOV y0,BX
  126. MOV x1,440
  127. MOV y1,BX
  128. CALL rysujLinie
  129. INC BX
  130. LOOP PETLA4
  131.  
  132. MOV CX,30
  133. MOV BX,320
  134. PETLA8:
  135. MOV x0,150
  136. MOV y0,BX
  137. MOV x1,200
  138. MOV y1,BX
  139. CALL rysujLinie
  140. INC BX
  141. LOOP PETLA8
  142.  
  143. MOV CX,30
  144. MOV BX,320
  145. PETLA9:
  146. MOV x0,390
  147. MOV y0,BX
  148. MOV x1,440
  149. MOV y1,BX
  150. CALL rysujLinie
  151. INC BX
  152. LOOP PETLA9
  153. ;uszy
  154. MOV kolor,0EH
  155. MOV CX,60
  156. MOV BX,150
  157. PETLA5:
  158. MOV x0,50
  159. MOV y0,BX
  160. MOV x1,100
  161. MOV y1,BX
  162. CALL rysujLinie
  163. INC BX
  164. LOOP PETLA5
  165.  
  166. MOV kolor,0EH
  167. MOV CX,60
  168. MOV BX,150
  169. PETLA6:
  170. MOV x0,500
  171. MOV y0,BX
  172. MOV x1,550
  173. MOV y1,BX
  174. CALL rysujLinie
  175. INC BX
  176. LOOP PETLA6
  177. ;wlosy
  178. MOV kolor,06H
  179. MOV CX,20
  180. MOV BX,10
  181. PETLA7:
  182. MOV x0,100
  183. MOV y0,BX
  184. MOV x1,500
  185. MOV y1,BX
  186. CALL rysujLinie
  187. INC BX
  188. LOOP PETLA7
  189.  
  190.  
  191. MOV AH,01H ; OCZEKUJ NA PRZYCISK Z KLAWIATURY GETCH()
  192. INT 21H
  193.  
  194. MOV AX,0003H ; TRYB TEKSTOWY 16 KOLOROWY
  195. INT 10H
  196.  
  197. POP DS
  198.  
  199. MOV AX,4C00H ; wyjście
  200. INT 21H
  201. RET
  202.  
  203. main endp
  204.  
  205. rysujLinie proc
  206. PUSH AX
  207. PUSH BX
  208. PUSH CX
  209. PUSH DX
  210.  
  211. ; int deltaX = Abs(x1 - x0)
  212. ; int deltaY = Abs(y1 - y0)
  213. ; int x = x0
  214. ; int y = y0
  215. MOV AX,x1
  216. MOV BX,x0
  217. SUB AX,BX
  218. JNS dalej1
  219. NEG AX
  220. dalej1:
  221. MOV deltax,AX
  222.  
  223. MOV AX,y1
  224. MOV BX,y0
  225. SUB AX,BX
  226. JNS dalej2
  227. NEG AX
  228. dalej2:
  229. MOV deltay,AX
  230. MOV AX,x0
  231. MOV BX,y0
  232. MOV x,AX
  233. MOV y,BX
  234. ; If (x0 > x1) Then offsetX = -1 Else offsetX = 1
  235. MOV AX,x0
  236. MOV BX,x1
  237. CMP AX,BX
  238. JNG dalej3
  239. MOV offsetx,-1
  240. JMP dalej4
  241. dalej3:
  242. MOV offsetx,1
  243. dalej4:
  244. ; If (y0 > y1) Then offsetY = -1 Else offsetY = 1
  245. MOV AX,y0
  246. MOV BX,y1
  247. CMP AX,BX
  248. JNG dalej5
  249. MOV offsety,-1
  250. JMP dalej6
  251. dalej5:
  252. MOV offsety,1
  253. dalej6:
  254. ; SetPixel(x,y)
  255. CALL AA
  256.  
  257. ; If (deltaX > deltaY) Then
  258. MOV AX,deltax
  259. MOV BX,deltay
  260. CMP AX,BX
  261. JNG elsebegin
  262. ; int blad = deltaX / 2
  263. MOV AX,deltax
  264. SAR AX,1
  265. MOV blad,AX
  266. ; While (x != x1)
  267. while1begin:
  268. ; blad = blad - deltaY
  269. MOV AX,blad
  270. SUB AX,deltay
  271. MOV blad,AX
  272. ; If (blad < 0)
  273. MOV AX,blad
  274. CMP AX,0
  275. JNS dalej7
  276. ; y = y + offsetY
  277. ; blad = blad + deltaX
  278. MOV AX,y
  279. ADD AX,offsety
  280. MOV y,AX
  281. MOV AX,blad
  282. ADD AX,deltax
  283. MOV blad,AX
  284. ; End If
  285. dalej7:
  286. ; x = x+offsetX
  287. MOV AX,x
  288. ADD AX,offsetx
  289. MOV x,AX
  290. ; setPixel(x,y)
  291. CALL AA
  292.  
  293. MOV AX,x
  294. MOV BX,x1
  295. CMP AX,BX
  296. JNE while1begin
  297. ; End While
  298. JMP koniecrysowania
  299. ; Else
  300. elsebegin:
  301. ; int blad = deltay / 2
  302. MOV AX,deltay
  303. SAR AX,1
  304. MOV blad,AX
  305. ; While (y != y1)
  306. while2begin:
  307. ; blad = blad - deltax
  308. MOV AX,blad
  309. SUB AX,deltax
  310. MOV blad,AX
  311. ; If (blad < 0)
  312. MOV AX,blad
  313. CMP AX,0
  314. JNS dalej8
  315. ; x = x + offsetx
  316. ; blad = blad + deltay
  317. MOV AX,x
  318. ADD AX,offsetx
  319. MOV x,AX
  320. MOV AX,blad
  321. ADD AX,deltay
  322. MOV blad,AX
  323. ; End If
  324. dalej8:
  325. ; y = y+offsety
  326. MOV AX,y
  327. ADD AX,offsety
  328. MOV y,AX
  329. ; setPixel(x,y)
  330. CALL AA
  331.  
  332. MOV AX,y
  333. MOV BX,y1
  334. CMP AX,BX
  335. JNE while2begin
  336. ; End While
  337. ; End Else
  338. ; End If
  339.  
  340. koniecrysowania:
  341. POP DX
  342. POP CX
  343. POP BX
  344. POP AX
  345. RET
  346. rysujLinie endp
  347.  
  348. AA proc
  349. push bp
  350. mov ax,y
  351. mov bx,x
  352. mov cl,bl
  353. push dx
  354. mov dx,80
  355. mul dx
  356. pop dx
  357. shr bx,1
  358. shr bx,1
  359. shr bx,1
  360. add bx,ax
  361. mov ax,VideoB_Seg
  362. mov es,ax
  363. and cl,7;
  364. xor cl,7;
  365. mov ah,1;
  366. shl ah,cl;
  367. ; obsługa rejestrów kontrolera graficznego
  368. mov dx,3CEh;
  369. mov al,8 ;
  370. out dx,ax ;
  371. mov ax,0005h;
  372. out dx,ax ;
  373. mov ah,0 ;
  374. mov al,3 ;
  375. out dx,ax ;
  376. MOV AH,kolor ;kolor pixela
  377. MOV AL,00h
  378. ;mov ax,0C00h;
  379. out dx,ax ;
  380. mov ax,0F01h;
  381. out dx,ax ;
  382. ; zmiana wartości pixel'a
  383. or es:[bx],al;
  384. pop bp
  385. ret
  386. AA endp
  387.  
  388. segprog ends
  389. end main
Add Comment
Please, Sign In to add comment