LINE.ASM 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. .286
  2. .model small
  3. .code
  4. org 100h
  5. start:
  6. mov ax, 13h
  7. int 10h
  8. mov ax, 0a000h
  9. mov es, ax
  10. mov cx, 19h
  11. hh:
  12. push 1
  13. push 0
  14. push 0
  15. push 319
  16. mov ax, cx
  17. shl ax, 3
  18. push ax
  19. call Line
  20. loop hh
  21. mov ah, 08h
  22. int 21h
  23. mov ax, 3
  24. int 10h
  25. int 20h
  26. ;------------------------------
  27. Line proc near
  28. push bp
  29. mov bp,sp
  30. LY2 EQU word ptr [bp+4]
  31. LX2 EQU word ptr [bp+6]
  32. LY1 EQU word ptr [bp+8]
  33. LX1 EQU word ptr [bp+10]
  34. COL EQU word ptr [bp+12]
  35. pusha
  36. mov ax, LX2
  37. sub ax, LX1
  38. jg LLX
  39. neg ax
  40. mov si, LX2
  41. mov mybeg, si
  42. jmp TOY
  43. LLX:
  44. mov si, LX1
  45. mov mybeg, si
  46. TOY: mov bx, LY2
  47. sub bx, LY1
  48. jg LLY
  49. neg bx
  50. mov otbeg, si
  51. jmp TOW
  52. LLY:
  53. mov si, LY1
  54. mov otbeg, si
  55. TOW: cmp bx, ax
  56. jl MYX
  57. mov cx, mybeg
  58. mov si, otbeg
  59. mov mybeg, si
  60. mov otbeg, cx
  61. mov ifY, 1
  62. xchg ax, bx
  63. MYX: mov gend, ax
  64. mov ots, bx
  65. mainloop:
  66. mov ax, ots
  67. mov bx, cur
  68. mul bx
  69. mov bx, gend
  70. div bx
  71. mov dx, ax
  72. add dx, otbeg
  73. cmp ifY, 0
  74. jz defs
  75. mov ax, mybeg
  76. add ax, cur
  77. mov cx, ax
  78. shl ax, 6
  79. shl cx, 8
  80. add ax, cx
  81. add ax, dx
  82. mov si, ax
  83. mov ax, COL
  84. mov byte ptr es:[si], al
  85. jmp GGG
  86. defs:
  87. mov cx, dx
  88. shl dx, 6
  89. shl cx, 8
  90. add dx, cx
  91. add dx, mybeg
  92. add dx, cur
  93. mov si, dx
  94. mov ax, COL
  95. mov byte ptr es:[si], al
  96. GGG:
  97. inc cur
  98. mov ax, cur
  99. cmp ax, gend
  100. jle mainloop
  101. popa
  102. pop bp
  103. mov word ptr cur, 0
  104. mov byte ptr ifY, 0
  105. ret 10
  106. ifY db 0
  107. mybeg dw ?
  108. otbeg dw ?
  109. cur dw 0
  110. gend dw ?
  111. ots dw ?
  112. endp
  113. end start