0166-BIOS 中斷

波尔發表於2024-07-12

環境

  • Time 2022-11-09
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

說明

參考:《x86組合語言:從真實模式到保護模式》李忠
參考:http://www.ablmcc.edu.hk/~scy/CIT/8086_bios_and_dos_interrupts.htm

目標

使用 BIOS 中斷,來進行螢幕的輸出。

BIOS 中斷

BIOS 中斷是 BIOS 啟動後,從地址 0x0000 處初始化的一箇中斷向量表。
其中存放的是段地址和偏移地址,每個終端號對應四個位元組,一共可以有 256 箇中斷號。

彙編程式碼

jmp start

data: db 'hello world'

start:
    mov cx,start - data
    mov bx,0x7c00 + data
printc:
    mov al,[bx]
    mov ah, 0eh
    int 10h
    inc bx
    loop printc
    jmp $

    times 510 - $ + $$ db 0
    db 0x55
    db 0xaa

字元定義

之前是透過對單個字元進行定義的,這裡直接使用了字串,用單引號引起來。

loop 迴圈

使用了 CX 暫存器來儲存字元的個數,使用 loop 進行迴圈。

中斷

使用的是 0X10 中斷,子功能號是 0X0E,表示向螢幕輸出,並後移游標。
AL 暫存器儲存將要顯示的字元,AL 暫存器填寫子功能號,最後使用 int 10h 進行中斷。
該中斷為 BIOS 提供。

總結

使用 BIOS 的中斷,向螢幕輸出了 hello world。

附錄

相關文章