Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2008, 18:54   #1
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
Вопрос Графическое программирование

Делаю первые шаги в освоении Ассемблера Чет туго они мне даются) Сразу вопрос. Как вывести точку на экран. И если есть место где можно подробнее о графике на ассемблере почить, дайте ссылочку. Использую фасм.

Последний раз редактировалось MedvedoLex; 04.05.2008 в 19:09.
MedvedoLex вне форума Ответить с цитированием
Старый 04.05.2008, 19:39   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Int10-0C - Вывод пиксела. ah=0C, al=значение пиксела, cx=столбец, dx=ряд.
rpy3uH вне форума Ответить с цитированием
Старый 04.05.2008, 20:17   #3
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию

Вот так должно вроде работать, но после нажатия ф9 в дебагере экран гаснет секунды на две и обратно в дебагер выходит. Млин в чем может быть проблема. Я уже 4 книжки проштудировал ниче нашел((((

Код:
format binary 
use16
org 100h

  mov ah, 0h
  mov al, 13h
  int 10h
  mov ah, 0ch
  mov al, odh
  int 10h
  mov dx, 10
  mov cx, 30

int 20h

Последний раз редактировалось rpy3uH; 04.05.2008 в 20:55.
MedvedoLex вне форума Ответить с цитированием
Старый 08.05.2008, 16:03   #4
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию

С выводом пикселя разобрался) Теперь возник другой вопрос. При округлении числа командой frndint через сопроцессор, что мы получим. Например если округлить число 20.11 ?
MedvedoLex вне форума Ответить с цитированием
Старый 08.05.2008, 16:56   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

В этом разделе гдето хорошая тема была....
Может чуть не то, но просто хороший пример. (У меня только код остался)


Код:
.model  tiny
    .code
    org 100h
begin:
        mov AX,11h
        int 10h

        mov CX, 320
        mov DX, 240
        MOV AH,0CH
        MOV AL,3
        int 10h

key_loop:
    mov ah,7
    int 21h

    cmp  al,27
    je   quit
    test al,al
    jnz key_loop
    int 21h

    cmp al,50h
    je key_down

    cmp al,48h
    je key_up

    cmp al,4Bh
    je key_left

    cmp al,4Dh
    je key_right

    cmp al,47h
    je key_home

    cmp al,49h
    je key_pgap

    cmp al,4Fh
    je key_end

    cmp al,51h
    je key_pgdn

draw:
    MOV AH,0CH
    MOV AL,3
    int 10h
    jmp key_loop

key_down:
    MOV AH,0CH
    MOV AL,0
    int 10h
    inc dx
    jmp draw

key_up:
    MOV AH,0CH
    MOV AL,0
    int 10h
    dec dx
    jmp draw

key_left:
    MOV AH,0CH
    MOV AL,0
    int 10h
    dec cx
    jmp draw

key_right:
    MOV AH,0CH
    MOV AL,0
    int 10h
    inc cx
    jmp draw

key_home:
    MOV AH,0CH
    MOV AL,0
    int 10h
    dec dx
    dec cx
    jmp draw

key_pgap:
     MOV AH,0CH
     MOV AL,0
     int 10h
     dec dx
     inc cx
     jmp draw

key_end:
     MOV AH,0CH
     MOV AL,0
     int 10h
     inc dx
     dec cx
     jmp draw

key_pgdn:
     MOV AH,0CH
     MOV AL,0
     int 10h
     inc dx
     inc cx
     jmp draw

quit:
    ret
end begin
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.05.2008, 17:13   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Как FPU будет округлять числа, зависит от контрольного слова

Код:
CW dw ?

 ........

fstcw   [CW]                ;читать контрольное слово
mov     ax,[CW]

or      ax,0000110000000000b
;-------------^
; бит 11-12 отвечает за округление   
; 00 - округлять до ближайшего, (по умолчанию)   
; 01 - в меньшую сторону   
; 10 - в большую сторону   
; 11 - отбрасывать дробную часть

mov     [CW],ax
fldcw   [CW]                ;записать контрольное слово
* FASM
пыщь
JTG вне форума Ответить с цитированием
Старый 08.05.2008, 21:38   #7
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
Печаль

JTG мне нужно отбросить полностью дробную часть. Я пытаюсь построить график sinx, для этого я координату х перевожу в радианы и беру fsin, затем поидее нужно домножить содержимое st(0) до числа больше 1(чтобы нагляднее было видно график) и отбросить дробную часть... использую режим 640*480 черно-белый
Т.к. fsin считает в радианах, я предварительно вычислил коюэффициент (ПИ/180) и занес его в op1

Код:
        mov cx, 0
 prohodX:                 	; проход по оси Х
        fld [op2]                 ; загружаю первую координату Х
        fmul [op1]               ; умножаю на коэффициент ПИ/180
        fsin                        ; вычисляю синус   
        fmul [op3]               ; умножаю на 100(чтобы нагляднее было)
        frndint                    ; округляю (что нужно поменять, чтобы дробная часть отбрасывалась? )
        fistp [rezy]              ; выгружаю полученное целое число в память
        mov dx,[rezy]
        add dx, 239             ; чтобы на середине экрана было все
        mov ah, 0ch
        mov al, 1
        mov bh, 0
        int 10h
        inc [op2]                ; увеличиваю координату Х на 1
        inc cx
        cmp cx, 639
        jb prohodX

        int 20h
        op1 dd ?
        perev dd 180.0
        op2 dd 0.0
        op3 dd 100.0
        rezy dw ?
        rezx dw ?
В результате получается прямая ( Что не так делаю?


---------------------------------
Пользуйтесь тэгом CODE

Последний раз редактировалось B_N; 09.05.2008 в 05:35.
MedvedoLex вне форума Ответить с цитированием
Старый 09.05.2008, 06:15   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Если op2 это SINGLE, то почему "inc [op2]"? Если это DWORD, то почему "FLD [op2]", а не "FILD [op2]"? Проверьте второй вариант, должно заработать. Да и в op1 можно, по идее, 3.14159/180 забить константой.
B_N вне форума Ответить с цитированием
Старый 09.05.2008, 11:25   #9
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию

B_N хм, сейчас попробую.
MedvedoLex вне форума Ответить с цитированием
Старый 10.05.2008, 16:24   #10
MedvedoLex
 
Аватар для MedvedoLex
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию

Работает, спасибо)
MedvedoLex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программирование на си фамил Общие вопросы C/C++ 3 31.05.2008 20:03
ПРограммирование Андрюха из ПХТТ Фриланс 3 04.02.2008 21:25
Какими средствами можно организовать графическое сопровождение БД? TitAn БД в Delphi 4 29.05.2007 21:51
Программирование ИМС Lutcifer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.03.2007 14:22
Программирование под nix Simply-Art Свободное общение 8 20.03.2007 11:45