实验(1)
lab13-1.Asm 代码:
assume cs:code
code segment
start:
;把int 7ch中断例程安装到0:200h处
;ds:si指向将要复制的程序地址
mov ax,cs
mov ds,ax
mov si,offset show_str
;es:di指向目的地址
mov ax,0
mov es,ax
mov di,200h
;设置循环次数cx
mov cx,offset show_str_end - offset show_str
;设置si di递增
cld
;将字符串从di:si复制到es:di
rep movsb
;设置中断向量表
;es指向0
mov ax,0
mov es,ax
;目的偏移地址为:4*n 4*n+2
mov word ptr es:[4*7ch],200h
mov word ptr es:[4*7ch+2],0
;安装程序返回
mov ax,4c00h
int 21h
;编写int 7ch中断例程
;功能:显示一个以0结尾的字符串
;参数:dh=行号(*160)dl=列号(*2)cl=颜色 ds:si指向字符串首地址
;返回:无
show_str:
push ax
push bx
push cx
push dx
push si
push di
push es
;设置es:di指向目的地址
mov ax,0b800h
mov es,ax
mov di,0 ;di必须先设置为0
;先用bx来保存参数(dh行号、dl列号)
mov bx,dx
;求列dl偏移量
mov ax,2
mov dh,0
mul dx
add di,ax ;结果低16位在ax中存放,故将di加上列偏移量
;求行dh偏移量
mov ax,160
mov dl,bh
mov dh,0
mul dx
add di,ax ;结果低16位在ax中存放,故将di加上行偏移量
;先用bl来保存颜色参数cl
mov bl,cl
;ds:si指向要复制的字符串首地址
copy:
mov cl,[si]
mov ch,0
jcxz ok
mov es:[di],cl ;放字符cl进去
inc di
mov es:[di],bl ;放颜色bl进去
inc s