TA的每日心情 | 开心 2018-10-31 14:26 |
---|
签到天数: 18 天 [LV.4]偶尔看看III
高级会员
- 积分
- 1019
|
assume cs:code, ds:data
data segment
db 'hello world', 0
data ends
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset print ; ds:si指向源地址
mov ax, 0
mov es, ax
mov di, 200H ; es:di指向目的地址
mov cx, offset printend-offset print ; cx为传输长度
cld ; 传输反向为正
rep movsb
mov word ptr es:[7ch*4], 200H ; 设置中断向量表
mov word ptr es:[7ch*4+2], 0
mov dh, 10
mov dl, 10
mov cl, 2
mov ax, data
mov ds, ax
mov si, 0 ; ds:si指向待显示字符串地址
int 7ch
mov ax, 4c00H
int 21H
; ****************************************
; 子函数print
; 显示一个用0结束的字符串
; (dh)=行号, (dl)=列号, (cl)=颜色, ds:si指向字符串首地址
print:
push es
push di
push ax
push cx
mov ax, 0b800H
mov es, ax
mov ax, 160
mul dh
mov di, ax
mov ax, 2
mul dl
add di, ax ; es=0b800H, di=dh*160+dl*2, es:di为显示区地址
mov al, cl ; 颜色存到al中
s0:
mov ch, 0
mov cl, [si]
jcxz printret ; 判断字符串是否结束,结束则返回
mov es:[di], cl ; 显示字符
mov es:[di+1], al ; 字符颜色
inc si
add di, 2
jmp short s0
printret:
pop cx
pop ax
pop di
pop es
iret
printend:
nop
; ****************************************
code ends
end start
|
|