《汇编语言》读书笔记(5)----在80*25彩色字符模式下显示字符串

学汇编快一个礼拜了,终于可以在显示器上看到编写出来的算法的效果了~~

这个对80*25 彩色字符模式下显示字符串的算法参考了网上的资料,是目前写的比较一个比较完整的算法。

代码如下:

 

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

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

stack segment
    dw 
8  dup( 0 )  ;定义栈,存储循环中需要保存的数据
stack ends

code segment

start:

    mov ax,data
    mov ds,ax
    mov ax,stack
    mov ss,ax
    mov sp,10h
    mov bx,
0
    mov di,
0
    mov ax,0b872h   ;算出屏幕第12行中间的显存的段起始位置放入ax中

    mov cx,
3    ;外循环为3次,因为要显示三个字符串
s3:    push cx      ;三个进栈操作为外循环s3保存相关寄存器的值
    push ax      ;以防止它们的值在内循环中被破坏
    push di
    mov es,ax    ;此时es为屏幕第12行中间的显存的段起始位置
    mov si,
0
    mov di,
0

    mov cx,10h    ;内循环为10h次,因为一个字符串中含10h个字节
s1:    mov al,ds:[bx
+ si]
    mov es:[bx
+ di],al
    inc si
    add di,
2

    loop s1     ;此循环实现偶地址中存放字符

    mov si,
1     ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备
    pop di       ;将di的值恢复成进入内循环之前的时候的值
    mov al,ds:[bx
+ di + 10h]         ;取颜色属性[源OP寻址方式:相对基址变址]


    mov cx,10h         ;第二个内循环也为10h次

s2:    mov es:[bx
+ si],al
    add si,
2

    loop s2

    inc di
    pop ax
    add ax,0ah              ;将显存的段起始地址设为当前行的下一行
    pop cx

    loop s3

    mov ax,4c00h
    
int  21h

code ends

end start


























  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值