使用BIOS中断显示字符串笔记(int 10h 13号中断)

BIOS的10H中断的13号中断用于显示字符串,参数为:

1、AH=13H

2、AL=显示方式

如果AL=0,表示目标字符串仅仅包含字符,属性在BL中包含,不移动光标

如果AL=1,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标

如果AL=2,表示目标字符串包含字符和属性,不移动光标

如果AL=3,表示目标字符串包含字符和属性,移动光标

总之,可以归纳为:

|BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0| AL

BIT0为0表示不移动光标,为1表示移动光标

BIT1为0表示字符串仅包含字符,为1表示字符串包含属性

BIT2~BIT7未使用

3、BH表示视频区页数

4、如果AL的BIT1为0,则BL表示显示属性。属性为:

|BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0| BL

BIT7:背景是否闪烁。0不闪烁,1闪烁

BIT6~BIT4为背景色,分别为RGB,000为黑色,111为白色

BIT3为1,则前景色加亮,为0则不加亮

BIT2-BIT0为前景色,意义同背景色

5、CX为字符串长度

6、DH表示在第几行显示(0为第一行)

7、DL表示在第几列显示(0为第一列)

8、ES:BP指向字符串

以下是一段测试代码,显示为闪烁白色背景,红色前景。

这是一段扇区引导程序,使用NASM语法编写,在windows环境下测试通过。使用bochs或者virtualbox 等虚拟机可以看到运行结果。

test.asm:

mov ax, 0x7c0                         ; BIOS将代码加载到内存0x7c00处,因此段地址为0x7c
mov ds, ax                            ; 初始化数据段
mov es, ax                            ; 用于指向字符串

mov ax, Message                       ; es:bp指向要显示的字符串
mov bp, ax
mov ah, 0x13                          ; ah为0x13,调用13号中断
mov al, 0                             ; al为0,不移动光标,字符串中没有属性内容
mov bh, 0                             ; 第0页显示
mov bl, 0xFC                          ; 闪烁白色背景,红色加亮前景
mov cx, MessageLen                    ; 字符串长度
mov dx, 0                             ; dh=0, dl=0, 即第0行,第0列
int 10h                               ; 调用10H中断

jmp $                                 ; 无限循环,防止代码进入数据区

Message db "This is a test!"
MessageLen equ $ - Message
times 510-($-$$) db 0                 ; 在中间填充0
    db 0x55, 0xaa                     ; 在第511和512字节处写入引导程序标志位

编译方法:nasm test.asm -o test.bin

bochs的配置文件为:

megs: 32
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe
floppya: 1_44=test.bin, status=inserted
boot: a
log: bochsout.txt
mouse: enabled=0
cpu:count=1,ips=15000000
vga_update_interval: 150000
i440fxsupport: enabled=1

运行效果为(静态截图无法看到闪烁效果):

时间: 2025-01-31 06:49:25

使用BIOS中断显示字符串笔记(int 10h 13号中断)的相关文章

汇编|使用10h中断来显示字符串

特么这个问题困扰了我好久,毕竟是个OS newbie,还没有汇编的基础. 在前天的加载loader的实验中,老师要求显示字符串,但是给的代码只是显示一个字符. 愚蠢的我实在没办法,最后为了按期完成实验,只能一个个字符地输出,呀真是羞耻. 好了,趁着清明假期,花了几个小时终于弄懂了. 下面进入正题! 前戏是先对boot.asm和loader.asm编译: nasm -o boot.bin boot.asm nasm -o loader.bin loader.asm 然后把boot.bin写入软盘a

汇编中的10H中断int 10h详细说明

汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用.显示服务 (Video Service:int 10h) 00H:设置显示器模式 01H:设置光标形状 02H:设置光标位置 03H:读取光标信息 04H:读取光笔位置 05H:设置显示页 06H.07H:初始化或滚屏 08H:读光标处的字符及其 属性 09H:在光标处按指定属性显示字符 0AH:在当前光标处显示字符 0BH:设置调色板.背

汇编入门学习笔记 (十三)—— 外中断

疯狂的暑假学习之  汇编入门学习笔记 (十三)--  外中断 参考: <汇编语言> 王爽 第15章 1.外中断信息 外中断分为可屏蔽中断和不可屏蔽中断 可屏蔽中断 先看看内中断所引发的中断过程: (1)取中断类型吗n. (2)标志寄存器入栈,设置IF=0,TF=0. (3)CS.IP入栈 (4)(IP)=(n*4),(CS)=(n*4+2) 可屏蔽中断的中断过程于内中断所引发的中断过程不同的地方只是,第一步不同.可屏蔽中断的中断过程,CPU要先看IF的值,如果IF=0就不执行中断,如果IF=1

显示字符串

字符串中断 通过AH=13H中断来显示字符串. BIOS中断定义如下 入口参数: AH=13H //在Teletype模式下显示字符串 BH=页码 BL=属性.背景色和文字颜色(若AL=00H或01H) CX=显示字符串长度 (DH.DL)=坐标(行.列) ES:BP=显示字符串的地址 AL=显示输出方式 0--字符串中只含显示字符,其显示属性在BL中.显示后,光标位置不变 1--字符串中只含显示字符,其显示属性在BL中.显示后,光标位置改变 2--字符串中含显示字符和显示属性.显示后,光标位置

汇编在dos下显示字符串的子程序

assume cs:code,ss:stack,ds:data data segment db 'welcome to masm','0' data ends stack segment dw 8 dup (0) stack ends code segment start: mov dh,8 mov dl,3 mov cl,2 mov ax,data mov ds,ax mov si,0 mov ss,stack call show_str mov ax,4c00h int 21h show_s

显示字符串的全排列

显示字符串的全排列: 1 public static void AllSequenceofString(String string){ 2 if(string == null) 3 return; 4 char[] chars = string.toCharArray(); 5 Permutation(chars,0); 6 } 7 private static void Permutation(char[] chars, int index) { 8 // TODO Auto-generate

竖直显示字符串UILabel

//怎么将字符串中的每一个字符存入数组中 NSString *[email protected]"中华人民共和国";    NSMutableArray *stringArray = [[NSMutableArray alloc] init];    for (int i = 0; i < textString.length; i ++) {        NSRange range;        range.location = i;        range.length

实验10 编写子程序 1.显示字符串

assume cs:code,ds:data data segment db 'Welcome to masm!',0 data ends code segment start: mov dh,8 ;dh表示行号(范围:1-25) mov dl,3 ;dl表示列号(范围:1-80)[注:每超过80等于行号自动加1] mov cl,2 ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c

LCD实验学习笔记(八):中断控制器

s3c2440有60个中断源(其中15个为子中断源). 程序状态寄存器(PSR)的F位设为1,禁用快速中断(FRQ). 程序状态寄存器(PSR)的I位设为1,禁用普通中断(IRQ). 相反,PSR寄存器F位为0开FRQ中断,I位为0开IRQ中断. s3c2440中断控制器中有五个控制寄存器:中断源等待寄存器(SRCPND),中断模式寄存器(INTMOD),屏蔽寄存器(INTMSK),优先级寄存器(PRIORITY),中断等待寄存器(INTPND). SRCPND寄存器各位对应不同的中断,其中外部