字符串打印
data segment
str db 'hello world!'
endstr db ' '
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
mov cx,offset endstr-str
mov bx,0
mov si,0
print:
mov dl,ds:[si]
mov es:[bx],dl
mov dl,00000111B
mov es:[bx+1],dl
inc si
add bx,2
loop print
code ends
end start
借助字符不断刷新显示特性,可让字符动画显示
;让字符从左往右移动 code segment start: mov ax,0B800H mov es,ax mov bx,0 mov cx,30 print: mov es:[bx],' ' mov dl,'a' mov es:[bx+2],dl add bx,2 loop print code ends end start
屏幕默认显示80x25个字符,全屏显示106x38个字符,那么可以根据这个特性,让字符上下移动
;让字符从上往下移动 code segment start: mov ax,0B800H mov es,ax mov bx,0 mov cx,25 print: mov es:[bx],'a' mov dl,' ' mov es:[bx-160],dl add bx,160 ;为什么是160而不是80 以内一个字符占两个字节的空间, 80个字符总共偏移了160 loop print code ends end start ;让字符从下往上移动 code segment start: mov ax,0B800H mov es,ax mov bx,160*24 mov cx,25 print: mov es:[bx],'a' mov dl,' ' mov es:[bx+160],dl sub bx,160 ;为什么是160而不是80 以内一个字符占两个字节的空间, 80个字符总共偏移了160 loop print code ends end start
可以让字符斜着移动
code segment start: mov ax,0B800H mov es,ax mov bx,0 mov cx,25 print: mov es:[bx],'a' mov dl,' ' mov es:[bx-161],dl add bx,161 ;向右斜加偏移量 向左斜减偏移量 loop print code ends end start
补充: 在8086中系统提供了一个显示服务(Video Service)中断供我们使用,使用10H这个中断码也可以打印带有颜色属性的字符串
;示例1: mov ah,2 ;放置光标 mov bh,0 ;第0页 mov dh,5 ;行号 mod dl,12 ;列号 int 10H ;示例2: mov ah,9 ;在光标的位置显示字符 mov al,'a' ;字符 mov bl,11001010B ;颜色 mov bh,0 ;第0页 mov cx,3 ;重复显示3次 int 10H