首页 > 其他 > 详细

在显示器显示字符的程序03

时间:2019-05-30 22:58:16      阅读:130      评论:0      收藏:0      [点我收藏+]

在显示器的指定位置显示字符

assume cs:code,ds:data,ss:stack

data segment
    db welcome to masm! ;定义要显示的字符串(共16个字节)
    db 02h,24h,71h  ;定义三种颜色
data ends

stack segment
    dw 8 dup(0)  ;定义栈,16个字节,8个字
stack ends

code segment
start:
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,10h
        
        xor bx,bx    ;bx清零,用来索引颜色
        mov ax,0b872h    ;算出屏幕第12行中间的显存的段起始位置放入ax中
        
        mov cx,3  ;s3循环控制行数,外循环3次,因为要显示3个字符串
s3:        push cx        ;三个进栈操作为外循环s3保存相关寄存器的值
        push ax ;以防止它们的值在内循环中被破坏
        push bx
        
        mov es,ax    ;此时es为屏幕第12行中间的显存段起始位置
        
        mov si,0    ;si用来索引代码列的字符
        mov di,0  ;di用来定位目标列
        
        mov cx,10h    ;s1循环控制存放的字符,内循环10次,因为字符串中含10个字节
s1:        mov al,ds:[si]
        mov es:[di],al
        inc si
        add di,2
        loop s1    ;此循环实现偶地址存放字符
        
        mov di,1    ;di的值设为1,从而为在显存奇地址中存放字符的演示属性做准备
        pop bx
        mov al,ds:10h[bx]    ;取颜色属性
        inc bx
        
        mov cx,10h        ;第二个内循环也未10次
s2:        mov cs:[di],al
        add di,2
        loop s2        ;此循环实现奇地址中存放字符的颜色属性
        ;以下四句为下一趟循环做准备
        pop ax 
        add ax,0ah ;将显存的段起始地址设为当前行的下一行
                    
        pop cx
        loop s3 
        
        mov ax,4c00h
        int 21h
code ends
end start

 

在显示器显示字符的程序03

原文:https://www.cnblogs.com/lazyli/p/10952372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!