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

Тема в разделе "Другие", создана пользователем alexs, 3 май 2007.

Статус темы:
Закрыта.
  1. alexs

    alexs Гость

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

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

    Hex_Vulture Гость

    Напиши сначала на 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 иначе не будет работать.
     
  3. alexs

    alexs Гость

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

    Hex_Vulture Гость

    Для: alexs

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

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

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

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

    ;должна быть вертикальная линия
    Код (Text):
    ;в 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
     
  5. alexs

    alexs Гость

    спасибо еще раз))

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

    Hex_Vulture Гость

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

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

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

    тока там правда .386 стоит, но ты просто исправь там передачу параметров через стек и все ок будет(если у вас не разрешают .386 ставить)
     
  7. alexs

    alexs Гость

Загрузка...
Похожие Темы - графика ассемблера
  1. Lers
    Ответов:
    0
    Просмотров:
    1.646
  2. 203
    Ответов:
    2
    Просмотров:
    1.488
Статус темы:
Закрыта.

Поделиться этой страницей