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页并排三行显示,并且使用不同的颜色。
版权声明:本文标题:汇编语言-在屏幕上显示字体 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727301817a1107331.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论