admin管理员组

文章数量:1563235

原理

用汇编语言在屏幕上显示字体,主要向特定内存地址写入内容,就可以在屏幕上显示。

代码

assume cs:codesg,ss:data

data segment
  db 'welcome to masm!'
  ; 需要显示的字符数据
  db 2H,24H,71H
  ; 显示的颜色属性值:绿色,绿底红色,白底蓝色
data ends
codesg segment                                                                                                                                               
start: mov ax,data
       mov ss,ax      ; 把数据段的段地址赋给ss寄存器
       mov bp,0       ; 得到date数据段地址
; b8000h-b8f9fh 是第0页,一共4000个字符,80*25,
;一个字符占用两个字节,第一个字节是ascii码, 第二个字节是属性
       mov ax,0B800H ;这个0b800 就是在dos情况下显存首地址
       mov ds,ax
       mov bx,6E0H    ; 得到显存居中的内存地址,从第12开始

       mov di,0
       mov cx,3
   s0: mov ah,ss:[10H+di]   ; 得到数据段中颜色属性值
       mov dx,cx
       
       mov si,0    
       mov cx,16     ;循环16次是因为字符串有16个字符
	   s1: mov al,[bp]
	       mov [bx+si+40H],al   ; 设置数据段中显示字符,从第32个字符开始
	       mov [bx+si+41H],ah   ; 设置显示颜色属性
	       add si,2
	       inc bp
	       loop s1
       add bx,0A0H          ; 跳转到显存中的下一行
       inc di               ; 改变di,定位到date段中下一个颜色位置
       mov bp,0
       mov cx,dx
	   loop s0

       mov ax,4C00H
       int 21H 
codesg ends
end start

代码理解难点

这个代码中用到了循环嵌套,也就是s1循环是在s0循环之中,s1循环循环长度是16,s0循环循环长度是3,也就是把‘welcome to masm!’这个字符串要在第0页并排三行显示,并且使用不同的颜色。

本文标签: 汇编语言字体屏幕上