***汇编语言 实验16 编写包含多个功能子程序的中断例程

xiaoxiao2021-02-28  82

汇编语言 实验16 编写包含多个功能子程序的中断例程


实验要求

安装一个新的int7ch中断例程,为显示输出提供如下功能子程序。 (1)清屏; (2)设置前置色; (3)设置背景色; (4)向上滚动一行。 入口参数说明如下。 (1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示想上滚动一行 (2)对于1、2号功能,用al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}。

参考程序

;安装一个新的int7ch终端例程,为显示输出提供如下功能子程序 ;入口参数: ;ah传递功能号 ;al传递颜色值 assume cs:code code segment start: mov bx,cs mov ds,bx mov si,offset int7ch mov bx,0 mov es,bx mov di,200h mov cx,offset int7ch_end-offset int7ch cld rep movsb cli mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 sti mov ah,2 mov al,2 int 7ch mov ax,4c00h int 21h ORG 200H ;中断例程 int7ch: push ax push bx jmp begin table dw sub0,sub1,sub2,sub3 begin: cmp ah,3 ja sret add bl,ah mov bh,0 add bx,bx call word ptr table[bx] sret: pop ax pop bx iret ;清屏 sub0: push bx push es push ds push di push si push cx mov bx,0b800h mov es,bx mov ds,bx mov si,160 mov di,0 mov cx,24 cld sub0s: push cx mov cx,160 movsb mov cx,80 mov si,0 pop cx ; loop sub0s ; sub0ss: mov word ptr es:[si][160*24],' ' add si,2 loop sub0ss pop cx pop si pop di pop ds pop es pop bx ret ;改变前景色 sub1: push ax push bx push es push cx push di mov bx,0b800h mov es,bx mov di,1 mov cx,2000 sub1s: and byte ptr es:[di],11111000b or es:[di],al add di,2 loop sub1s pop di pop cx pop es pop bx pop ax ret ;改变背景色 sub2: push bx push es push cx mov cl,4 ;al的取值范围是0-7,只占前4个字节 shl al,cl ;但是背景色是第4-6位,所以无法重合,需要左移4位 mov bx,0b800h mov es,bx mov bx,1 mov cx,2000 sub2s: and byte ptr es:[bx],10001111b or es:[bx],al add bx,2 loop sub2s pop cx pop es pop bx ret ;向上滚动一行 sub3: push bx push es push ds push di push si push cx mov bx,0b800h mov es,bx mov ds,bx mov di,0 mov si,160 cld mov cx,24 sub3s: push cx mov di,0 mov si,160 mov cx,160 rep movsb pop cx loop sub3s sub3ss: mov byte ptr [160*24+si],' ' ; add si,2 loop sub3ss;最后一行清空 pop cx pop si pop di pop ds pop es pop bx ret int7ch_end: nop code ends end start

中间又断了那么多天,今天是七月十号,就当做暑假第一天吧。 2017年7月10日17:26:42
转载请注明原文地址: https://www.6miu.com/read-33878.html

最新回复(0)