概述
编写程序一个“射击游戏”,用上、下、左、右键控制跳上、跳下、装子弹、射击的动作,按ESC键退出游戏。
运行效果如图所示:
编写的程序如下:
assume cs:code, ss:stack, ds: data
stack segment
db 256 dup (0)
stack ends
data segment
dw 0,0
run
db 'Game is runing...',0dh,0ah,'$'
up
db 'Jump up...',0dh,0ah,'$'
down
db 'Jump down...',0dh,0ah,'$'
right
db 'shoot...',0dh,0ah,'$'
left
db 'get bullet...',0dh,0ah,'$'
over
db 'Byebye...',0dh,0ah,'$'
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov si,0
mov dx,0
; 改中断例程入口地址
mov ax,0
mov es,ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
play: lea dx, run
mov ah,9
int 21h
call delay
jmp play
delay:push ax ; 延时
push dx
mov dx,10h
mov ax,0
s1:sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
; 定义中断例程
int9:
push ax
push bx
push es
push dx
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:[0]
shang:
cmp al,48h; ↑的扫描码48
jne xia
lea dx, up
jmp show
xia:cmp al,50h;↓的扫描码50
jne zuo
lea dx,down
jmp show
zuo:cmp al,4bh;←的扫描码4b
jne you
lea dx, left
jmp show
you:cmp al,4dh;→的扫描码4d
jne fanhui
lea dx, right
show:mov ax,9
int 21h
jmp int9ret
fanhui: cmp al,01h;esc的扫描码01
jne int9ret
lea dx, over
mov ah,9
int 21h
mov ax,0
mov es,ax
; 恢复原来的地址
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
mov ax,4c00h
int 21h
int9ret:
pop dx
pop es
pop bx
pop ax
iret
code ends
end start
运行结果截图:
其实最后从运行上来讲还是存在一些问题的,就算改了上下左右四个键的中断历程,在运行时按这几个键还是会崩溃(估计是改的中断有问题),不过改的其他几个键的中断没有这种问题,可惜我实在找不到问题所在,期待哪位朋友偶然看到这里,肯给指点一下迷津。晚辈先在这里谢过!!!
最后
以上就是冷傲豌豆为你收集整理的汇编语言:如何改写中断例程(实例:射击游戏)的全部内容,希望文章能够帮你解决汇编语言:如何改写中断例程(实例:射击游戏)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复