Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TASM и графика, нарисовать график cos(x) 
:(
    Опции темы
Joe20
Дата 15.11.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2005

Репутация: нет
Всего: нет



Вот дали мне такое вот заданиеце : нарисовать график функции cos(x), где х - число которое вводит пользователь при запуске программы .И все это надо на TASM написать . Так как я новичок то ...... ПОЖАЛУЙСТА ПОМОГИТЕ КТО ЧЕМ МОЖЕТ ВАМ ПОТОМ ВОЗДАТСЯ smile
Добавлено @ 15:38
...... Да и ещё у меня есть такая вот задачка (что б жизнь мёдом не казалась) smile :
поочередно вывести текст ( любой ) в разных местах екрана .Сначала в левом верхнем углу , потом в правом верхнем , нижний левый , нижний правый , и в конце концов по середине . При чем после каждого вывода предыдущий текст убираем ( очищаем екран ).

Всем кто откликнется на этот зов о помощи будет предоставлен ПРИЗ (мое громадное СПАСИБО) smile

Это сообщение отредактировал(а) Joe20 - 15.11.2005, 15:32
PM MAIL   Вверх
St. Andrew
Дата 16.11.2005, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.3.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 8



Joe20, ты вообще понял, что сказал? Тебе нужен график ф-ии? Тогда зачем юзеру вводить аргумент? Это ж ведь число получится. smile
Ну ладно, может ты чего-нибудь напутал. Вот код программы под ДОС, сделанный в TASM. Выводит график в графическом режиме 640*320, рисует один период функции cos(x)

Код

.387
model    small
.stack    100h
.data
b dw 200
a dw 2     ;  коэфф. сжатия по х
x dw ?     ; argument
pi dw 180
y dw ?    ; y=cos(x)
os dw ?

mnogitel dw 80    ;коэфф. растяжения по у

.code
start:
mov    ax,@data
mov    ds,ax
mov ax, 0    ; включаем графику
mov al, 10h
int 10h

mov ah, 0ch ;оси
mov al, 10
mov cx, 400
mov bh, 0h
mov dx, 0
@metka1:
push cx
mov os, cx
mov dx, os
mov cx,0
int 10h
pop cx
loop @metka1

mov ah, 0ch
mov al, 10
mov cx, 639
mov bh, 0h
mov dx, 200
@metka2:
int 10h
loop @metka2


mov cx, 639   ; начинаем рассчитывать функцию
@metka3:
mov x, cx
fild x
fldpi
fmul
fild pi
fdiv
fild a
fdiv
DB 0D9h, 0FFH
fimul mnogitel
fchs
fiadd b
frndint :) 
fistp y



mov ah, 0ch    ;выводим то, что насчитали
mov bh,0h
mov dx, y
mov al, 15
int 10h

loop @metka3

mov    ax,4c00h
int    21h
end    start




Это сообщение отредактировал(а) St. Andrew - 16.11.2005, 15:49
--------------------
Оглянитесь вокруг! В мире так много прекрасного!
PM MAIL WWW ICQ   Вверх
Joe20
Дата 21.11.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2005

Репутация: нет
Всего: нет



2 St. Andrew , ОГРОМНОЕ СПАСИБО за помощь (извиняй что с опозданием , у меня и з-за отсутсвия финансов постоянного нета нету ).
Осталось лиш токо разобратся почему на моем компе это дело нормально работает , а как токо на другом запустиш ничего не фуричит.... smile
PM MAIL   Вверх
Joe20
Дата 21.11.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.11.2005

Репутация: нет
Всего: нет



А как насчет второй задачки , неужто никто не знает как её сделать . Я в это не поверю . .....
А я понял вам просто в лом над ней думать ребята , мол "понимаеш пришол такой сякой и давай всех грузить своими задачами
вроде у нас своих проблем нету, дак ищё и этот хочет что б мы СПЕЦИАЛИСТЫ за него всё сделали , вот лентяй какой"
Я с вами полностю согласен , но мож у каго есть ссылочка на сайтик где такие проблемки уже расматривались , или жэ исходник завалялся старенький со 2 класа smile на похожую темку ........это жэ не сильно напряжно. Вот St. Andrew помогает начинающиму ( тобиш мне ) , и за это ему почет.

Попробуем ещё раз ;)
"...... Да и ещё у меня есть такая вот задачка (что б жизнь мёдом не казалась) :
поочередно вывести текст ( "Wassuup" ) в разных местах екрана .Сначала в левом верхнем углу , потом в правом верхнем , нижний левый , нижний правый , и в конце концов по середине . При чем после каждого вывода предыдущий текст убираем ( очищаем екран )."

PM MAIL   Вверх
oleg1973
Дата 21.11.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



1) ставим текстовый режим (номер 3 к примеру)
2) после этого мы знаем что графическая область экрана начинается с 0xB800 ,для цветного текста с учетом что первый байт это будет атрибут а второй код символа
3) или с 0xB000 если хотим черно-белое все

ну и все осталось рассчитать адрес в экранной области куда рисовать будем
данная область начинается с левого верхнего угла монитора ))

p.s.
а еще проще через процедуры мсдоса все это нарисовать
ставим курсор в нужную поз и рисуем, меняем и снова рисуем


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
St. Andrew
Дата 22.11.2005, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 28.3.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 8



Joe20, вот немного исправленный вариант программы:
Код

.486
model use16 small
.stack    100h
.data
b dw 200
a dw 2     ;  коэфф. сжатия по х
x dw ?     ; argument
pi dw 180
y dw ?    ; y=cos(x)
os dw ?

mnogitel dw 40    ;коэфф. растяжения по у

.code
start:
mov    ax,@data
mov    ds,ax
mov ax, 0    ; включаем графику
mov al, 10h
int 10h

mov ah, 0ch ;оси
mov al, 10
mov cx, 400
mov bh, 0h
mov dx, 0
@metka1:
push cx
mov os, cx
mov dx, os
mov cx,0
int 10h
pop cx
loop @metka1

mov ah, 0ch
mov al, 10
mov cx, 639
mov bh, 0h
mov dx, 200
@metka2:
int 10h
loop @metka2
mov cx, 639   ; начинаем рассчитывать функцию
@metka3:
mov x, cx
fild x
fldpi
fmul
fild pi
fdiv
fild a
fdiv
fcos
fimul mnogitel
fchs
fiadd b
frndint
fistp y



mov ah, 0ch    ;выводим то, что насчитали
mov bh,0h
mov dx, y
mov al, 15
int 10h

loop @metka3

mov ah, 8
int 21h



mov    ax,4c00h
int    21h
end    start


У меня работает smile
--------------------
Оглянитесь вокруг! В мире так много прекрасного!
PM MAIL WWW ICQ   Вверх
mechwarrior
Дата 26.1.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



люди а в asmе реально начертить линию методом DDA
PM MAIL   Вверх
Chingachguk
Дата 27.1.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Не знаю, что такое "DAA", но в асме можно все smile

Вот к примеру:

Цитата

Procedure Line256(Color:byte; X1,Y1,X2,Y2:integer);
  Begin
    Asm
      push  BP
      push  0A000h
      pop  ES
      mov  SI,X1
      mov  DX,Y1
      mov  BX,X2
      mov  AX,Y2
      push  AX
      push  DX
      mov  AX,320
      mul  DX
      add  AX,SI
      mov  DI,AX  {DI=(X1,Y1)}
      pop  DX
      pop  AX
      sub  BX,SI  {BX=X2-X1}
      sub  AX,DX
      mov  SI,BX
      mov  BX,AX
      mov  CX,SI
      mov  AX,BX  {CX=X2-X1, AX=Y2-Y1}
@1:  neg  CX
      js    @1
@2:  neg  AX
      js    @2
      cmp  CX,AX
      jae  @3
      xchg  CX,AX
@3:  cld
      mov  AL,Color
      mov  BP,CX
      test  CX,CX
      jz    @@Ex
@line:  push  DI
        push  AX
        mov  AX,SI
        imul  CX
        idiv  BP
        add  DI,AX
        mov  AX,BX
        imul  CX
        idiv  BP
        mov  DX,320
        imul  DX
        add  DI,AX
        pop  AX
        stosb
        pop  DI
        loop  @line
@@ex:pop BP
end;
end;
{Окружность}
procedure circle256(color:byte; R,X,Y:word);
  Begin
    Asm
        MOV  AX,320
        MUL  WORD PTR Y
        mov  BX,X
        ADD  BX,AX
        MOV  AX,R
        MOV  SI,AX
        MUL  AX
        MOV  CX,AX
        MOV  AX,-320
        IMUL  SI
        SUB  AX,SI
        ADD  BX,AX
        NEG  SI
        MOV  DI,SI
        PUSH  0A000h
        POP  ES
        CLD
        MOV  DL,Color
        push  BP
        MOV  BP,R
@Circle:PUSH  DX
        MOV  AX,DI
        IMUL  AL
        MOV  DX,AX
        MOV  AX,SI
        IMUL  AL
        ADD  AX,DX
        POP  DX
        SUB  AX,CX
@N_Neg: neg  AX
        JS    @N_NEG
        CMP  AX,BP
        JA    @NPAINT
        PUSH  SI
        PUSH  DI
        MOV  ES:[BX],DL
        NEG  SI
        SHL  SI,1
        MOV  BYTE PTR ES:[BX+SI],DL
        NEG  DI
        SHL  DI,7
        MOV  AX,DI
        SHL  DI,2
        ADD  DI,AX
        MOV  BYTE PTR ES:[BX+DI],DL
        ADD  DI,SI
        MOV  BYTE PTR ES:[BX+DI],DL
        POP  DI
        POP  SI
@NPAINT:INC  BX
        INC  SI
        CMP  SI,0
        JLE  @CIRCLE
        MOV  SI,BP
        NEG  SI
        DEC  BX
        SUB  BX,BP
        ADD  BX,320
        INC  DI
        CMP  DI,0
        JLE  @Circle
@D:    pop  BP
    End;
  End;
{Закраска замкнутой области}
Procedure Fill_Area(Color_Bound,Color_In:byte; X,Y:word);




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
mechwarrior
Дата 28.1.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



DDA - цифровой дифференциальный анализатор (один из алгоритмов построения линии)
я спрашиваю из-за тоо что там надо делить на большие числа такие как 900000
это тоже возможно ??????

PM MAIL   Вверх
Chingachguk
Дата 30.1.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

на большие числа такие как 900000


Ну не такие уж они и большие.

Если использовать инструкции .386 процессора (это означает непривелигерованные инструкции - в основном добавляется 32-х битные), то можно написать к примеру:

.data?
MyValue dq 9000000 ; 8 bytes
MyDiveder dd 900000 ; 4 bytes
.code

mov edx,dword ptr MyValue+2
mov eax,dword ptr MyValue
div dword ptr MyDiveder
; 64 bits in edx:eax / 32 bits = result in eax (edx=module)

Тока я сомневаюсь что это действительно для линий нужно smile



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.