02.06.2012, 00:02 | #1 (permalink) |
Новичок
Регистрация: 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 |
02.06.2012, 00:02 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обратите внимание на эти ссылки, тут много интересного по вашему вопросу Массив, Ассемблер Паскаль и Ассемблер |
04.06.2012, 01:01 | #3 (permalink) |
Новичок
Регистрация: 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 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|