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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2017, 10:57   #1
Vaska8889
Новичок
Джуниор
 
Регистрация: 12.06.2017
Сообщений: 5
По умолчанию Помогите решить формулу 50 * sin 3x + cos 5x

Помогите решить формулу 50 * sin 3x + cos 5x

Код:
     .model small
     .stack 256h
     .data
curentx dw 0
curenty dw 100
divcoeff dd 180
stretchcoeff dd 49
addcoeff dd 100
A 	dd 70

B	dd 90d 

C	dd 6d

array dw 720 dup(0)

      .code
begin:
      mov ax,@data
      mov ds,ax
      mov es,ax
      finit
      mov si,0
@@jump:
       call calcnextpixel
       mov ax,curenty
       mov array[si],ax
       add si,2
       inc curentx
       cmp si,720
       jne @@jump
       mov ax,0a000h
       mov es,ax
       xor ax,ax
       mov al,13h
       int 10h
@@null:
       xor si,si
@@loop:        
       mov ah,01h
       int 16h
        jnz @@bef
        push si
        call shiftscreen
        pop si
        mov ax,array[si]
        mov curenty,ax
        call putpixel
        add si,2
        cmp si,720
        je @@null
        inc curentx
        jmp @@loop
@@bef:
	cmp al,1Bh
	je @@quit
	cmp al,20h
	jne @@lp2
	mov ah,0Ch
	int 21h
@@lp1:
	mov ah,01
	int 16h
	jnz @@lp2
	jmp @@lp1
@@lp2:
       mov ah,0Ch	
       int 21h  
       jmp @@loop
@@quit:
        mov ah,10h
        int 16h
        mov ax,3
        int 10h
        mov ax,4c00h
        int 21h

   shiftscreen proc
         push ds
         mov ax,0a000h
         mov ds,ax
         mov si,320*200-2
         mov di,320*200-1
         std
@@nextraw:
         mov cx,319
     rep   movsb
         dec si
         dec di
         cmp di,319
         jne @@nextraw
         pop ds
         ret
shiftscreen endp

putpixel proc
         mov bx,0
         mov cx,200
@@nextclear:
          mov byte ptr es:[bx],0
          add bx,320
          loop @@nextclear
          mov ax,320
          imul curenty
          mov bx,ax
          mov byte ptr es:[bx],10
          ret
  putpixel endp

calcnextpixel proc

 .386
 .387
     fldpi		; занесение пи  st(0)
     fimul curentx	; pi*x		st(0)
	
     fimul C		;
     fidiv divcoeff	;pi*x/180 	st(0)
     fsin		;sin(st(0))
     fidiv A		;
     fimul stretchcoeff	;a=50*sin(...)
     fiadd addcoeff	;+b	(b=100)

   
     fisub B		;
     frndint		;округлить до целого
     fistp curenty	;извлекаем из стека в Y
     ret
 calcnextpixel endp
 end begin

Последний раз редактировалось Аватар; 12.06.2017 в 11:08.
Vaska8889 вне форума Ответить с цитированием
Старый 12.06.2017, 12:49   #2
byCoolerMaster
Новичок
Джуниор
 
Регистрация: 12.06.2017
Сообщений: 2
По умолчанию

вот ответ.

Код:
     .model small
     .stack 256h
     .data
curentx dw 0
curenty dw 100
divcoeff dd 180
stretchcoeff dd 49
addcoeff dd 100
x dd ?
x1 dd ?
x2 dd ?
x3 dd ?
x4 dd ?
x5 dd ?
x33 dd 3
x55 dd 5
x100 dd 10
 

A 	dd 30

B	dd 20d 

C	dd 2d

array dw 720 dup(0)

      .code
begin:
      mov ax,@data
      mov ds,ax
      mov es,ax
      finit
      mov si,0
@@jump:
       call calcnextpixel
       mov ax,curenty
       mov array[si],ax
       add si,2
       inc curentx
       cmp si,720
       jne @@jump
       mov ax,0a000h
       mov es,ax
       xor ax,ax
       mov al,13h
       int 10h
@@null:
       xor si,si
@@loop:        
       mov ah,01h
       int 16h
        jnz @@bef
        push si
        call shiftscreen
        pop si
        mov ax,array[si]
        mov curenty,ax
        call putpixel
        add si,2
        cmp si,720
        je @@null
        inc curentx
        jmp @@loop
@@bef:
	cmp al,1Bh
	je @@quit
	cmp al,20h
	jne @@lp2
	mov ah,0Ch
	int 21h
@@lp1:
	mov ah,01
	int 16h
	jnz @@lp2
	jmp @@lp1
@@lp2:
       mov ah,0Ch	
       int 21h  
       jmp @@loop
@@quit:
        mov ah,10h
        int 16h
        mov ax,3
        int 10h
        mov ax,4c00h
        int 21h

   shiftscreen proc
         push ds
         mov ax,0a000h
         mov ds,ax
         mov si,320*200-2
         mov di,320*200-1
         std
@@nextraw:
         mov cx,319
     rep   movsb
         dec si
         dec di
         cmp di,319
         jne @@nextraw
         pop ds
         ret
shiftscreen endp

putpixel proc
         mov bx,0
         mov cx,200
@@nextclear:
          mov byte ptr es:[bx],0
          add bx,320
          loop @@nextclear
          mov ax,320
          imul curenty
          mov bx,ax
          mov byte ptr es:[bx],10
          ret
  putpixel endp

calcnextpixel proc

 .386
 .387
     fldpi		; занесение пи  st(0)
     fimul curentx	; pi*x		st(0)
	
     fimul C		;
     fidiv divcoeff	;pi*x/180 	st(0)
fist x
     fild x
     fild x55
     fmul
     fist x1
     fild x
     fild x33
     fmul
     fist x2		;sin(st(0))
     fild x1
     fcos
     fist x3
     fild x2
     fsin
     fist x4
     fild x3
     fild x100
     fmul
     fist x5
     fild x4
     fild x5
     fadd
     fidiv A		;
     fimul stretchcoeff	;a=50*sin(...)
     fiadd addcoeff	;+b	(b=100)

   
     fisub B		;
     frndint		;округлить до целого
     fistp curenty	;извлекаем из стека в Y
     ret
 calcnextpixel endp
 end begin

Последний раз редактировалось byCoolerMaster; 12.06.2017 в 13:28.
byCoolerMaster вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сдать нужно в понедельник. Не понимаю, как вычислить значение этого выражения: S=sin(x+cos(2x-sin(3x+cos(4x+sin(5x-cos(6x+...).. n7camomile Помощь студентам 5 15.12.2013 22:44
функции sin и cos nEm1z1s Общие вопросы Delphi 17 08.05.2012 22:42
Пусть задано значение X. Найти первое из чисел sin X, sin sin X, sin sin sin X, ... , меньшее по модулю 10-4. hex_91 Visual C++ 1 28.04.2012 23:49
Паскаль Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 Kikikiss Помощь студентам 2 25.03.2012 13:58