汇编语言实现字母下落效果
使用汇编语言实现流星雨效果
具体要求:程序模拟一组流星飞向地面的情景。地面使用多行#表示,流星使用大写字母表示。程序产生一组流星,(比如10个),从屏幕顶部下降飞向地面。一组流星中,每个流星的字符颜色随机,一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
代码实现,首先使用较为原始的编译工具,dasm.exe和link.exe,通过命令行来对程序编译,这些需要在win 32位环境下运行,新系统已不支持。老版编译工具不好找,作者上传一份备用。下载地址
下载之后,使用命令行,进入文件夹中,boot.asm中为源代码,可以修改。改好之后,调用编译,链接命令
mash boot.asm
link boot.obj
link之后输入程序名字,其他直接回车,就可以生成exe文件,观看执行效果。
64位环境下,可以使用masm2015,编译运行就可以了。使用免费功能就可以了,没有提供断点执行工程,读取内存也费力,付费只能多看软件自带的示例代码,用处不大。兼容64位环境还是不错的
##根据上面的题目,汇编语言需要实现各部分代码,现在介绍各部分代码功能实现
随机数子程序
rand proc ;随机数子程序 push cx PUSH DX PUSH AX STI MOV AH,0 ;读时钟计数器值 INT 1AH MOV AX,DX ;清高6位 AND AH,3 MOV DH,49 MOV DL,39 ;除39,产生0~38余数 DIV DL MOV BL,AH ;余数存BX,作随机数 POP AX POP DX POP CX RET rand endp
通过读取,当前时钟的数值,取余数,实现随机数生成的操作
清屏子程序:
clear_screen proc near ;清屏子程序 ;add ---------------- MOV AX, OFFSET ground ; 将字符串拷贝到ax MOV BP, AX ; es:bp = 串地址 MOV CX, OFFSET strend MOV DX, OFFSET ground SUB CX, DX ; cl= 串长度 MOV leng, CX MOV AX, 1301H MOV CX, 40 MOV DX, 1700H MOV BH, 00H MOV BL, colorg INT 10H ;----------------- push ax ;保护寄存器 push bx push cx push dx mov ah,7 ;屏幕上卷功能 mov al,1 mov ch,0 ;左上角行号 mov cl,0 ;左上角列号 mov dh,150 ;右下角行号 mov dl,200 ;右下角列号 mov bh,2 ;卷入行属性 int 10h ;调用显示功能 pop dx ;恢复寄存器 pop cx pop bx pop ax ret ;返回主程序 clear_screen endp
调用系统的清屏功能,现有显示字符向上移动,实现清屏的操作。使用寄存器设置相关清屏的参数,int 10h调用
延时子程序
dly_qrtr proc near ;延时子程序 push cx push dx mov dx,50000 d11:mov cx,8000 d12:loop d12 dec dx jnz d11 pop dx pop cx ret dly_qrtr endp
最常见的延时操作,通过循环执行空指令来实现延时的效果。这里需要注意下64位和32位系统区别,字长度不一样,所以字节溢出的时间不同。简单来讲,32位是50000, 64位的话设置为500,就可以了
最后实现最开始的题目要求,就是,显示随机字符,清屏 ,延时,循环操作就可以实现相关功能了。效果图如下
如果需要源码,可以从下面的链接下载 源码
本博客所有内容为原创,转载需征求作者同意。