汇编语言程序设计之根据输入改变屏幕颜色的代码

 更新时间:2020年03月12日 13:28:08   作者:ShadowCK  
这篇文章主要介绍了汇编语言中的根据输入改变屏幕颜色的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

写在前面

该程序实现了“根据输入改变屏幕颜色”。其实这个程序本身没什么意思,纯粹只是将学习到的知识融合在了一起而已。程序本身过于繁琐了,写得并不是很好。以及这是我汇编实验课程的作业,如果大家有类似作业的话希望不要过度借鉴,本程序仅供参考和学习。

1.设计目的

1)体验并了解DOS界面下色彩显示;

2)了解并掌握INT10功能BIOS调用显示屏幕控制。

2.程序功能

①创建小屏;

②提示输入姓名;

③询问背景颜色并修改背景色;

④询问字体颜色并修改字体色;

⑤询问是否闪烁并修改闪烁;

⑥输出姓名及问候语。

3.源代码

stack segment stack
 db 64 dup (?)
stack ends
data segment
 buff db 50,?,50 dup(?)
 nam0 db 'What is your name ?$'
 bkc0 db 'What is your background color ?$'
 bkc1 db '->(input RGB:0-7):$'
 fc0 db 'What is your font color ?$'
 fc1 db '->(input RGB:0-7):$'
 tw0 db 'Do you like twinkle ?$'
 tw1 db '->(like:1 dislike:0): $'
 hel0 db 'Hello!$'
 hel1 db 'Welcome to MASM!$'
 arro db '->$'
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
  mov ds,ax    ;使ds指向data数据段
  mov ah,6    ;初始化屏幕
  mov al,0
  mov ch,0
  mov cl,0
  mov dh,24
  mov dl,79
  mov bh,7
  int 10h
  mov bh,00001111b  ;黑底白字
  call scroll
  call cursor
  mov dx,offset nam0
  mov ah,9
  int 21h    ;输出字符串,提示输入姓名
  mov bh,10001111b
  call scroll
  call cursor
  mov dx,offset buff
  mov ah,10
  int 21h    ;输入字符串至缓冲区
  call scroll
  mov bh,00001111b  ;闪烁黑底白字
  call scroll
  call cursor
  mov dx,offset bkc0
  mov ah,9
  int 21h    ;输出字符串,询问背景色
  call scroll
  call cursor
  mov dx,offset bkc1
  mov ah,9
  int 21h    ;输出字符串,提示输入格式
  mov bh,10001111b
  call scroll
  call cursor
  mov dx,offset arro
  mov ah,9
  int 21h    ;输出箭头
  mov ah,1
  int 21h    ;输入背景色
  sub al,30h
  call scroll
  mov cl,4
  shl al,cl
  mov bh,00001000b
  add bh,al    ;将bh的4-6位改为输入的背景色
  call scroll
  call cursor
  mov dx,offset fc0
  mov ah,9
  int 21h    ;输出字符串,询问字体色
  call scroll
  call cursor
  mov dx,offset fc1
  mov ah,9
  int 21h    ;输出字符串,提示输入格式
  or bh,10000000b
  call scroll
  call cursor
  mov dx,offset arro
  mov ah,9
  int 21h    ;输出箭头
  mov ah,1
  int 21h    ;输入字体色
  sub al,30h
  call scroll
  add bh,al    ;将bh的0-2位改为输入的字体色
  and bh,01111111b
  call scroll
  call cursor
  mov dx,offset tw0
  mov ah,9
  int 21h    ;输出字符串,询问是否闪烁
  call scroll
  call cursor
  mov dx,offset tw1
  mov ah,9
  int 21h    ;输出字符串,提示输入格式
  or bh,10000000b
  call scroll
  call cursor
  mov dx,offset arro
  mov ah,9
  int 21h    ;输出箭头
  mov ah,1
  int 21h    ;输入闪烁
  sub al,30h
  call scroll
  cmp al,1
  je twin
  and bh,01111111b  ;若闪烁,将bh的7位改为1
  jmp a
twin: or bh,10000000b  ;若不闪烁,将bh的7位改为0
a:  call scroll
  call cursormid
  mov dx,offset hel0
  mov ah,9
  int 21h    ;输出问候
  push bx
  call scroll
  call cursormid
  mov bl,buff+1   ;将输入的字符数存至bl
  add bl,2    ;将bl加2,使之指向最后一个字符的下一个字符
  mov bh,0    ;将bh置零
  add bx,offset buff ;将buff的偏移地址加到bx中
  mov byte ptr [bx],'!' ;在字符串最后写入'!'
  add bx,1    ;将bx加1,使之指向下一个字符
  mov byte ptr [bx],'$' ;在字符串最后写入'$'
  mov dx,offset buff+2
  mov ah,9
  int 21h    ;输出字符串(即所存姓名、'!')
  pop bx
  call scroll
  call cursormid
  mov dx,offset hel1
  mov ah,9
  int 21h    ;输出字符串,问候    
  mov ah,4ch
  int 21h    ;结束程序
scroll proc near
  push ax
  push bx
  push cx
  push dx
  mov ah,6
  mov al,1
  mov ch,8
  mov cl,30
  mov dh,16
  mov dl,60
  int 10h    ;下滚一行
  pop dx
  pop cx
  pop bx
  pop ax
  ret
scroll endp
cursor proc near
  push ax
  push bx
  push dx
  mov ah,2
  mov dh,16
  mov dl,30    ;移动光标
  mov bh,0
  int 10h
  pop dx
  pop bx
  pop ax
  ret
cursor endp
cursormid proc near
  push ax
  push bx
  push dx
  mov ah,2
  mov dh,16
  mov dl,38    ;移动光标
  mov bh,0
  int 10h
  pop dx
  pop bx
  pop ax
  ret
cursormid endp
code ends
end start

4.流程图

 

总结

到此这篇关于汇编语言中的根据输入改变屏幕颜色的代码的文章就介绍到这了,更多相关汇编语言改变屏幕颜色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • UEFI开发基础汇编代码的使用

    UEFI开发基础汇编代码的使用

    这篇文章主要为大家介绍了UEFI开发基础汇编代码使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 汇编语言伪指令和汇编指令的区别

    汇编语言伪指令和汇编指令的区别

    指令是控制程序运行时的机器代码运作的,是CPU执行的依据,编程、编译、执行都是有效的。伪指令不直接控制运行时刻的机器,但是控制翻译程序如何生成机器指令代码,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • 浅析ARMv8汇编指令adrp和adr

    浅析ARMv8汇编指令adrp和adr

    这篇文章给大家介绍ARMv8汇编指令adrp和adr的相关知识,暂时不介绍alpha生成的指令,因此先来主要分析一下,arm架构之所以少生成汇编指令的原因——adrp指令,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • 汇编语言指令大全 X86和X87汇编指令大全(带注释)

    汇编语言指令大全 X86和X87汇编指令大全(带注释)

    汇编指令集太多,如果不用就会忘记,所以将i处理器官方的指令集大全写到博客上,有需要的人可以参考一下
    2021-10-10
  • 汇编实现直接插入排序的方法示例

    汇编实现直接插入排序的方法示例

    这篇文章主要介绍了汇编实现直接插入排序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 16位汇编语言寄存器及指令整理(小结)

    16位汇编语言寄存器及指令整理(小结)

    这篇文章主要介绍了16位汇编语言寄存器及指令整理(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言中的函数调用参数传递及全局与局部变量与“基址”

    汇编语言中的函数调用参数传递及全局与局部变量与“基址”

    这篇文章主要介绍了汇编眼中的函数调用参数传递以及全局与局部变量与“基址”,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 8086汇编开发环境搭建和Debug模式介绍(图文详解)

    8086汇编开发环境搭建和Debug模式介绍(图文详解)

    这篇文章主要介绍了8086汇编开发环境搭建和Debug模式介绍,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 详解汇编语言中中括号[]作用及lea和mov指令的区别

    详解汇编语言中中括号[]作用及lea和mov指令的区别

    这篇文章主要介绍了汇编语言中中括号[]作用及lea和mov指令的区别,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言LDR指令和LDR伪指令详解

    汇编语言LDR指令和LDR伪指令详解

    这篇文章主要介绍了汇编语言LDR指令和LDR伪指令详解,伪指令是用来自动拆分代码值的,会把一条语句拆分成多条语句,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01

最新评论