• 汇编题目:在屏幕中间显示a-z的所有字母,按ESC键改变字符颜色


    在屏幕中显示a-z字母,按ESC键改变字符颜色。

    ;程序功能:在屏幕中间同一点显示a-z的所有字符
    ;        1.使用cpu循环空运行实现延迟
    ;        2.按ESC键改变正在循环显示的字符的颜色
    ;        3.程序完成时,再次还原int9中断向量表
    assume cs:code
    data segment
    db 100 dup(0)
    
    data ends
    
    code segment
    start: 
        ;init ds,es
        mov ax,data
        mov ds,ax
        mov ax,0
        mov es,ax
        
        ; save int9 IP and CS
        mov ax,es:[9*4]
        mov ds:[0],ax
        mov ax,es:[9*4+2]
        mov ds:[2],ax
        mov es:[9*4],offset int9
        mov es:[9*4+2],cs
        
        ;循环显示a-z的所有字符
        mov ax,0b800h
        mov es,ax
        mov ah,'a'
        show: mov es:[160*12+40*2],ah
        call delay    ;调用延迟
        inc ah
        cmp ah,'z'
        jna show
        
    
        ;还原int9中断向量表
        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
    
    
    ;使用cup循环空运行,实现延迟时间的作用
    ;使用32位的借位减法实现 1000 0000 0000h 次数的循环
    delay:
        push ax
        push dx
        mov dx,1000h
        mov ax,0
        s: sub ax,1
        sbb dx,0
        cmp ax,0
        jne s
        cmp dx,0
        jne s
        pop dx
        pop ax
        ret
    
    ;实现int9中断例程
    ;pushf是16位,pop是16位
    int9:
        
        push ax    ;保存临时变量
        in al,60h
        
        pushf    ;用于call模拟int9后的popf操作
        pushf    ;用于修改IF=0、TF=0 操作
        pop bx
        and bh,11111100b
        push bx
        popf
        call dword ptr ds:[0]    
        ;调用完这个模拟的int9后,会执行iret操作
        ;会先popf出第一次pushf的值
        
        cmp al,1
        jne int9ret
        add byte ptr es:[160*12+40*2+1],11h
        int9ret:
        pop ax
        iret
    
    
    
    code ends
    end start

    运行:我使用的是win7+masm6.15的环境,编译链接后直接debug xxx.exe,然后按g命令执行。

  • 相关阅读:
    HttpModule & HttpHandler
    试图运行项目时出错:无法启动调试 没有正确安装调试器
    DataTable 手动排序 无效的问题解决方法??
    合并多个DLL文件
    恢复mysql方法
    在不同版本的IIS下使用ASP.NET MVC
    Enterprise Library 4.1 October 2008
    去除HTML标记
    Mac相关命令
    Mac常用快捷键
  • 原文地址:https://www.cnblogs.com/mq0036/p/5157250.html
Copyright © 2020-2023  润新知