8086汇编语言显示带颜色的字符串程序学习 - 使用emu8086


DATAS SEGMENT
    db      'AaabbbcccH'      ;要显示的字符串,10
DATAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    mov sp,128

      mov ax,0b872h     ;算出屏幕第12行中间的显存的段起始位置放入ax中
      mov es,ax               ;此时es为屏幕第12行中间的显存的段起始位置

    mov si,0                  ;si用来索引代码列的字符
    mov di,0                  ;di用来定位目标列

      mov cx,10 ;字符串长度
      s1:
      mov al,ds:[si]    ;源字符
      mov es:[di],al    ;显示目标字符体

      mov al,75h        ;颜色
      mov es:[di+1],al;设置目标字符颜色

      inc si                  ;db 一个字符一个字节
      add di,2          ;显存 一个字符两个字节:偶字符体,奇字符颜色
      loop s1

    MOV AH,4CH
    INT 21H

CODES ENDS
    END START

在emu8086中运行如下;

此程序并未调用汇编 int 10h功能;INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序;

也未调用 int 21h,ah = 02 子功能,其功能是显示输出,要输出的字符放在dl寄存器中;见此;
https://blog.csdn.net/bcbobo21cn/article/details/108892802

使用的方法是直接写显示缓存;把字符直接写到显示缓存位置,就在屏幕上输出了;

在内存地址空间中,B8000H - BFFFFH 共32kB的空间,为80*25彩色字符模式的显示缓冲区;
    显示缓冲区分为8页;每页4KB,4000B;一般情况下,显示第0页内容,B8000H - B8F9FH的4000个字节;

直接写显示缓存我记得是DOS时代重要的技术;目前Win系统还存在否不了解;原理应该是存在的;

原程序见此;
https://blog.csdn.net/larger5/article/details/80617601

 

在仿真内存顶部输入 b872:0000;如下;看到被显示字符被写入此处;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值