;编程:
; (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