本文主要是介绍贺利坚老师汇编实验八,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
任务1 - 射击游戏框架
仿照第15周课堂项目三(见教学平台中第15周课堂项目参考),编写程序一个“射击游戏”(有些太弱了哈),用上、下、左、右键控制跳上、跳下、装子弹、射击的动作,按ESC键退出游戏。
运行结果如图:
assume cs:code stack segmentdb 256 dup (0) stack endsdata segmentdw 0,0home db 'Game is runing...',10,13,'$'jup db 'Jump up...',10,13,'$'jdw db 'Jump down...',10,13,'$'gbt db 'Get bullet...',10,13,'$'sht db 'Shoot...',10,13,'$'bbe db 'Byebye...',10,13,'$' data endscode segment start:mov ax,stackmov ss,axmov sp,256mov ax,datamov ds,ax;改中断例程入口地址mov ax,0mov es,axpush es:[9*4]pop ds:[0]push es:[9*4+2]pop ds:[2]mov word ptr es:[9*4],offset int9mov es:[9*4+2],csrunning:lea dx,homemov ah,9int 21hcall delayjmp runningdelay:push dxpush axmov dx,10hmov ax,0 s: sub ax,1sbb dx,0cmp ax,0jne scmp dx,0jne spop axpop dxret; 定义中断例程 int9:push axpush bxpush dxpush esin al,60hpushfpushfpop bxand bh,11111100bpush bxpopfcall dword ptr ds:[0]begin: mov bl, al ;保存alcmp al,48h ;48h是上键的扫描码je upcmp al,50h ;50h是下键的扫描码je downcmp al,4bh ;4bh是左键的扫描码je leftcmp al,4dh ;4d是右键的扫描码je rightcmp al,01h ;01h是esc键的扫描码je exitjmp int9retup: lea dx,jupjmp display down: lea dx,jdwjmp display left: lea dx,gbtjmp display right:lea dx,shtjmp displaydisplay:mov ah,9int 21hjmp int9retexit: lea dx,bbemov ah,9int 21hmov ax,0mov es,ax;恢复恢复中断向量push ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ax,4c00hint 21hint9ret:pop espop dxpop bxpop axiretcode ends end start
任务2-汇编程序的简洁写法
编写程序:从键盘上输入一个字符串,以$结束,再将字符串倒序输出(字符串不超过80个字符)。
输入样例:abcd#1234 efg$
输出样例:gfe 321#dcba
算法要求:逐个输入字符(21H中断的01H功能)并压栈,遇$后,将字符出栈按倒序写入数据区,输出字符串(21H中断的09H功能)
编写的程序如下:
.8086 .model small .datastr db 81 dup('$') ;Make sure you encounter $ stop when reading characters. .stack 256 .code .startupmov cx,0lea bx,str input:mov ah,1int 21hcmp al,'$'je sinc cx ;Record the length of characters entered.push axjmp input s: pop axmov [bx],alinc bx ;The stack is saved to the data block.loop smov ah,02hmov dl,0ahint 21hlea dx,strmov ah,9hint 21h ;Output string (in reverse order)..exit 0 end
这篇关于贺利坚老师汇编实验八的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!