zoukankan      html  css  js  c++  java
  • 汇编语言实现字母下落效果

    使用汇编语言实现流星雨效果

    具体要求:程序模拟一组流星飞向地面的情景。地面使用多行#表示,流星使用大写字母表示。程序产生一组流星,(比如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,就可以了

    最后实现最开始的题目要求,就是,显示随机字符,清屏 ,延时,循环操作就可以实现相关功能了。效果图如下

     

    如果需要源码,可以从下面的链接下载   源码

    本博客所有内容为原创,转载需征求作者同意。
  • 相关阅读:
    【转载】阿里云轻量应用型服务器和ECS服务器比较
    Android -- 启动模式
    Android -- Broadcast接收
    Qt正则表达式提取数据
    Android -- Intent
    Android -- 多线程下载
    Android -- ContentProvider与联系人
    Android -- 内容观察者
    Android -- ContentProvider
    Android -- ListView与ArrayAdapter、SimpleAdapter
  • 原文地址:https://www.cnblogs.com/xueyudlut/p/9498611.html
Copyright © 2011-2022 走看看