博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序入口地址的直接定制表【 (1) 清屏(2) 设置前景色 (3) 设置背景色 (4) 向上滚动一行】...
阅读量:6463 次
发布时间:2019-06-23

本文共 2342 字,大约阅读时间需要 7 分钟。

;编程:

; (1) 清屏
; (2) 设置前景色
; (3) 设置背景色
; (4) 向上滚动一行

;入口参数说明:

; (1)用ah寄存器传递功能号: 0 清屏, 1设置前景色,2设置背景色, 3向上滚动一行
;  (2)对于2 3 号功能,用al传送颜色值  al[0,1,2,3,4,5,6,7]

;各种功能如何实现

; (1) 清屏   :将显存中当前屏幕中的字符设为空格符
; (2) 设置前景色  :设置显存中当前屏幕中处于奇地址的属性字节的第0、1、2位
; (3) 设置背景色  :设置显存中当前屏幕中处于奇地址的属性字节的第4、5、6位
; (4) 向上滚动一行 :依次将第n+1行的内容复制到第n行,最后一行为空

 

assume cs:codecode segmentstart:   mov ah, 0  ;清屏   ;mov ah, 1 ;设置前景色   ;mov al, 4   ;mov ah, 2 ;设置背景色   ;mov al, 2   ;mov ah, 3 ;向上复制一行   call setscreen         mov ax, 4c00h   int 21h;==================================================;将这些功能子程序的入口地址存储在一个表中;功能号*2 = 对应的功能子程序在地址表中的偏移;param  ah  功能号;==================================================setscreen:   jmp short set   table dw sub1, sub2, sub3, sub4  ;标号table 没有':'  为 数据标号    set:   push bx      cmp ah, 3  ;标号>3   ja sret   mov bl, ah   mov bh, 0   add bx, bx ;根据ab中的功能号计算对应子程序在table表中的偏移      call word ptr table[bx]     ;相当于:   ;  1、push IP    ; 2、jmp word ptr cs:table[bx]  sret:   pop bx   ret     ;=========================;清屏子程序;=========================sub1:   push bx   push cx   push es   mov bx, 0b800h   mov es, bx   mov bx, 0   mov cx, 2000 subls:   mov byte ptr es:[bx], ' '   add bx, 2   loop subls   pop es   pop cx   pop bx   ret      ;=========================  ;设置前景色;param  al 前景色;========================= sub2:   push bx   push cx   push es      mov bx, 0b800h   mov es, bx   mov bx, 1   mov cx, 2000 sub2s:   and byte ptr es:[bx], 11111000b   or es:[bx], al   add bx, 2   loop sub2s      pop es   pop cx   pop bx   ret   ;=========================  ;设置背景色;param  al 背景色;al 低4位 存放颜色值; 高4位 0;========================= sub3:   push bx   push cx   push es      mov cl, 4   shl al, cl   mov bx, 0b800h   mov es, bx   mov bx, 1   mov cx, 2000 sub3s:   and byte ptr es:[bx], 10001111b   or es:[bx], al   add bx, 2   loop sub3s      pop es   pop cx   pop bx   ret   ;=========================  ;向上滚动一行;========================= sub4:   push cx   push si   push di   push es   push ds      mov si, 0b800h   mov es, si   mov ds, si   mov si, 160  ;ds:si 指向第n+1行   mov di, 0  ;es:di 指向第n行   cld   mov cx, 24   ;共复制24行 sub4s:;复制   push cx   mov cx, 160   rep movsb   pop cx   loop sub4s      mov cx, 80   mov si, 0 sub4s1:;最后一行清空   mov byte ptr [160*24+si], ' '   add si, 2   loop sub4s1      pop ds   pop es   pop di   pop si   pop cx   retcode endsend start

 

转载地址:http://zwhzo.baihongyu.com/

你可能感兴趣的文章
交换机二层接口access、trunk、hybird三种模式对VLAN的处理过程
查看>>
jQuery.extend 函数详解
查看>>
[转]Windows的批处理脚本
查看>>
lnmp高人笔记
查看>>
[转载] OpenCV2.4.3 CheatSheet学习(三)
查看>>
C#中跨窗体操作(2)--消息机制
查看>>
子程序框架
查看>>
多维数组元素的地址
查看>>
数据库运维体系_SZMSD
查看>>
aspose 模板输出
查看>>
福大软工1816 · 第三次作业 - 结对项目1
查看>>
selenium多个窗口切换
查看>>
《单页面应用》所获知识点
查看>>
静态库 调试版本 和发布版本
查看>>
DB2 错误码解析
查看>>
读书笔记四
查看>>
JAVA中的finalize()方法
查看>>
慕课网学习手记--炫丽的倒计时效果Canvas绘图与动画基础
查看>>
==与equals()的区别
查看>>
基本分类方法——KNN(K近邻)算法
查看>>