Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 02.06.2012, 00:02   #1 (permalink)
Женя_RU
Новичок
 
Регистрация: 02.06.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Ассемблер. Эмулятор огня

Помогите пожаулйста, у меня есть программа эмулирующая огонь, нужно добавить:
чтобы можно было регуировать высоту огня, и кто может закоментить эту прогу, коменты можно совсем расчитанные под начинающего програмиста
Код:
	.model small
	.stack 100h
	.data
	red db 0
	green db 0
	blue db 0
	color db 0
	background db 0
	speed dw 1
palette     label   byte
	i=0
	rept    8
	db      0, 0, i*2
	i=i+1
endm
	i=0
	rept    8
	db      i*2, 0, 16-2*i
	i=i+1
endm
	i=0
	rept    16
	db      16+47*i/16, 0, 0
	i=i+1
endm
	i=0
	rept    48
	db      63, 21*i/16, 0
	i=i+1
endm
	i=0
	rept    48
	db      63, 63, 21*i/24
	i=i+1
endm
	db      179*3	dup(63)
buffer	db	320*200	dup(0)
seed	dw	1
exit_msg	db	" the end", 13, 10,'$'
	.code
	.386
start:
;установка видео режима 320*200*256
	mov ax, 0013h
	int 10h
;установка новой палитря
	mov ax, @data               
	mov ds, ax
	mov dx, 03C8h
	xor al,al
	out dx,al
	inc dx
	mov cx, 256*3
	mov si, offset palette
set_pal:
	mov al, [si]
	cmp background,48
	jb vivod
	cmp color,0
	je _red
	cmp color,1
	je _green
	cmp color,2
	je _blue
jmp vivod
_red:
	 add al,red
	 cmp al,64
	 jb @1
	 sub al,64
@1:
	 mov color,1
	 jmp vivod
_green:
	 add al,green
	 cmp al,64
	 jb @2
	 sub al,64
@2:	 mov color,2
	 jmp vivod
_blue:
	 add al, blue
	 cmp al,64
	 jb @3
	 sub al,64
@3:	 
	 mov color,0

vivod:	
	inc background
	out dx, al
	inc si
	dec cx
	jnz set_pal
	mov background,0
	mov ax, 0040h
	mov es, ax
	mov ax, es:[006Ch]
	mov seed, ax
	mov ax, 0A000h
	mov es, ax	
;бегаем до нажатия ESC
main:
;генерация огня
	mov di, offset buffer
	add di, 320*198
	mov dx, 320
gen_fire:
;
	mov ax, seed
	mov cx, 8
new_bit:
	mov bx, ax
	and bx, 002Dh
	xor bh, bl
	clc
	jpe shift
	stc
shift:	rcr ax, 1
	dec cx
	jnz new_bit
	mov seed, ax

	mov [di], ax
	inc di
	dec dx
	jnz gen_fire
;
	mov di, offset buffer
	add di, 320*198+1
	mov dx, 320-2
blur_line:
	xor ax, ax
	xor bx, bx
	mov al, [di-1]
	mov bl, [di]
	add ax, bx
	mov bl, [di+1]
	add ax, bx
	mov bl, [di+2]
	add ax, bx
	shr ax, 2
	mov [di], al
	inc di
	dec dx
	jnz blur_line
	
;
	mov si, offset buffer
	add si, 321
	mov cx, 320*199      
	xor bx, bx
	align 2
blur_fire:
	xor     ax, ax
	add     al, [si+321]
	adc     ah, bl
	add     al, [si+319]
	adc     ah, bl
	add     al, [si-1]
	adc     ah, bl
	add     al, [si+1]
	adc     ah, bl
	ifdef   eight
	add     al, [si-321]
	adc     ah, bl
	add     al, [si+321]
	adc     ah, bl
	add     al, [si-319]
	adc     ah, bl
	add     al, [si+319]
	adc     ah, bl
	shr     ax, 3
	else
	shr     ax, 2
	endif
	test ax, ax
	jz skip
	dec     al
	align   2
skip:
	mov     [si-320], al
	inc     di
	inc     si
	dec     cx
	jnz blur_fire    

;pause
	mov cx, speed 
	mov ah, 86h
	int 15h
	mov dx, 03DAh
vrtl1:
	in al, dx
	test al, 8
	jnz vrtl1
vrtl2:
	in al, dx
	test al, 8
	jnz vrtl2
	mov si, offset buffer
	xor di, di
	mov cx, 320*100
	rep movsw
;проверка на нажатие ESC
	in al, 60h
	cmp al,4eh
	je speed_minus
	cmp al,4Ah
	je speed_plus
	cmp al,13h
	je __red
	cmp al,22h
	je __green
	cmp al,30h
	je __blue
	
	cmp al,14h
	je ___red
	cmp al,23h
	je ___green
	cmp al,31h
	je ___blue
	jmp _esc

speed_minus:
	add speed,5
	jmp main
speed_plus:
	sub speed,5
	jmp main
__red:
	mov al,red
	inc al
	mov red,al
	jmp start
___red:
	mov al,red
	dec al
	mov red,al
	jmp start
__green:
	mov al,green
	inc al
	mov green,al
	jmp start
___green:
	mov al,green
	dec al
	mov green,al
	jmp start
__blue:
	mov al,blue
	inc al
	mov blue,al
	jmp start
___blue:
	mov al,blue
	dec al
	mov blue,al
	jmp start
_esc:
	cmp al, 81h
	jnz main
;возвражение в текстовый режим
	mov ax, 0003h
	int 10h
;сообщение по завершению программы
	mov ah, 9
	mov dx, offset exit_msg
	int 21h
;выход
	mov ax, 4C00h
	int 21h
end start
Женя_RU вне форума   Ответить с цитированием

Старый 02.06.2012, 00:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обратите внимание на эти ссылки, тут много интересного по вашему вопросу

Массив, Ассемблер
Паскаль и Ассемблер

Старый 02.06.2012, 14:22   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

возможно смогу помочь, только что это за ассемблер?
kreol вне форума   Ответить с цитированием
Старый 04.06.2012, 01:01   #3 (permalink)
Женя_RU
Новичок
 
Регистрация: 02.06.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Это TASM, наиболее важно понять как работает это кусок кода:
Код:
	mov di, offset buffer
	add di, 320*198
	mov dx, 320
gen_fire:
;
	mov ax, seed
	mov cx, 8
new_bit:
	mov bx, ax
	and bx, 002Dh
	xor bh, bl
	clc
	jpe shift
	stc
shift:	rcr ax, 1
	dec cx
	jnz new_bit
	mov seed, ax

	mov [di], ax
	inc di
	dec dx
	jnz gen_fire
Женя_RU вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:51.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.