x86汇编学习之字符串打印

字符串打印

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值