графика ассемблера

  • Автор темы alexs
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

alexs

Гость
#1
pic.JPG pic.JPG получаетса в ассемблере недо нарисовать прямогульник(стандартный - вертикальные стороны меньше горизонтальних) , горизонтальные стороны которого должны как бы провисать вниз....

если есть какие-то ресурсы такого типа графике, то выложите её плИз!!!
 
H

Hex_Vulture

Гость
#2
Напиши сначала на C. (ну или что больше нравится)

сделай процедуры vertical_line и bezier_curve (http://alglib.sources.ru/interpolation/beziercurve.php)

потом перепишешь их постепенно(попробуй юзать встроенный ассемблер) на асм.


с графикой просто.
screen_buffer dw 0A000h ; это буффер, рисуй сюда
...

mov ax,0013h ; 320x240ч8 ( 0012h - 640x480 16 color, но у меня не работает)
int 10h ; после этого вызова должен быть переход в граф. режим


далее рисуешь так
mov ax,screen_buffer
mov es,ax

mov es:[номер байта в экранном буфере], цвет

например mov es:[0],00000100b ;(red)

проект делай для DOS иначе не будет работать.
 
A

alexs

Гость
#3
спасибо большое, но вот у меня что-то не получаетса......
можно, если не трудно, поподробнее с графикой в ассме,а именно - нарисовать эту фигуру, потому что я с графическим режимом еще толком не разобралса....
да, графический режим - 320х200@256...
 
H

Hex_Vulture

Гость
#4
Для: alexs

а что именно не получается?

твоя фигура - это не так просто, мне лень переписывать алгоритм безье.
тебе нужно два алгоритма - первый для рисования вертикали
второй для кривой безье

вот процедура для вывода прямоугольника, можешь использовать ее для вывода вертикали:

она осуществляет вывод словами(я подумал так быстрее) поэтому в стек помещай сдвоенный цвет.
например
Код:
push 0
push 10
push 200
push 11
mov ah,00000100b;(red)
mov al, 00000100b;(red)
push ax
call draw_rectangle

;должна быть вертикальная линия
Код:
;в data сделай
rect_x2	dw 0
_rect_y2	dw 0

_rect_x1	dw 0
_rect_y1	dw 0


;////////////////////////// draw_rectangle //////////////////////////
; соглашение о вызове 
; параметры в стек помещать так: color,x1,y1,x2,y2
draw_rectangle	proc
push	bp
mov	bp,sp
pusha

mov	 ax,screen_buffer
mov	 es,ax

mov	ax,[bp+4]; color

mov	cx,[bp+6]; y2
mov	di,[bp+8]; x2

mov	bx,[bp+10]; y
mov	si,[bp+12]; x

mov	_rect_y2,cx
imul	di,320
mov	_rect_x2,di

mov	_rect_y1,bx
mov	_rect_x1,si

mov	cx,ax
mov	di,ax
mov	dx,ax

;ax,cx,dx,di - color
imul	si,320
; it is possible to add unrolling
draw_line_seg:

mov	word ptr es:[si+bx+0],ax
inc	bx

cmp	bx,_rect_y2
jb	draw_line_seg

add	si,320
mov	bx,_rect_y1

cmp	si,_rect_x2
jb	draw_line_seg

popa
pop	bp
ret	10
draw_rectangle	endp
 
A

alexs

Гость
#5
спасибо еще раз))

не получаетса нарисовать эту кривую......
пыталса раздуплить этот алгоритм, но никак не получаетса...
 
H

Hex_Vulture

Гость
#6
ну ты попробуй на C и посмотри что компилятор выдает
в Visual Studio можно asm посмотреть(там где-то флажок указать и он асм выдает).

правда там все переменные покривятся именами, но имена подправить не трудно, например для переменной coord будет что-нибудь вроде _coord.........
Только обязательно тогда надо собирать 16 приложение а то он тебе выдаст 32 разрядный ассемблер.

кстати поиск кода в гуугле - хорошая вещь
http://www.google.com/codesearch?hl=ru&amp...;cs_f=4K.ASM#a0

тока там правда .386 стоит, но ты просто исправь там передачу параметров через стек и все ок будет(если у вас не разрешают .386 ставить)
 
Статус
Закрыто для дальнейших ответов.