assume cs:code
data segment
db 'TEST SUCCESS', 0
data ends
code segment
;----------------------------------------------------------
;类型:中断例程
;功能:显示一个用0结束的字符串
;参数:dh=行号 dl=列号 cl=颜色 ds:si=字符串首地址
;----------------------------------------------------------
show_str:
push es
push ax
push bx
push si
mov ax, 0b800h ;bx指向显存地址
mov es, ax
mov al, 0a0h
mul dh
mov bx, ax
mov al, 2
mul dl
add bx, ax
mov ah, cl ;保存颜色
show: ;向显存中复制字符串
mov al, [si]
cmp al, 0
je ok
mov es:[bx], ax
add bx, 2
inc si
jmp show
ok:
pop si
pop bx
pop ax
pop es
iret
;----------------------------------------------------------
;功能:程序入口
;----------------------------------------------------------
main:
mov ax, cs ;ds:si=复制的源地址
mov ds, ax
mov si, offset show_str
xor ax, ax ;es:di=复制的目标地址
mov es, ax
mov di, 200h
mov cx, offset main - offset show_str ;cx=复制长度
cld ;复制代码
rep movsb
mov ds, ax ;修改中断向量
mov ds:[7ch * 4], 200h
mov ds:[7ch * 4 + 2], ax
mov ax, data ;测试中断
mov ds, ax
xor si, si
mov dh, 12
mov dl, 30
mov cl, 1100b
int 7ch
mov ax, 4c00h ;退出
int 21h
code ends
end main |