BIOS功能调用
MOV AH 0;//具体的BIOS调用功能号.
INT 16h; //int13h是BIOS调用的入口
;功能:从键盘读入字符送AL寄存器。执行时,等待键盘输入,一旦输入,字符的ASCII码放入AL中。若AL=0,则AH为输入的扩展码。
;关于显示和换行可以在自己的程序中另外添加
INT 10H,AH=00H
设定屏幕显示模式.
例如:
mov ah, 00h; //设置功能号
mov al, **h; //设置显示模式代码
int 10H; //调用BioS功能
显示模式:
;│模式碼: 解析度 顏色數目 頁數 位址 │
;│ 文 00H: 40*25 16 色 8 頁 B8000H~B87CFH │
;│ 字 01H: 80*25 16 色 8 頁 B8000H~B87CFH │
;│ 模 02H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 式 03H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 07H: 80*25 2 色 8 頁 B8000H~B8F9FH │
;│ 解析度 顏色數目 頁數 位址 │
;│ 繪 04H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;│ 圖 05H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=01H │
;│設定游標形狀 ┌──┐ │
;│? (CH) <= 游標的啟始線 (0~15) │ │ <---- 啟始線 │
;│? (CL) <= 游標的終止線 (0~15) │ │ │
;│註:正常: CH=0DH,CL=0EH │ │ <---- 終止線 │
;│ 消失: CH=0FFH,CL=0FFH └──┘ │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=02H │
;│設定游標位置 │
;│? (DH) <= 游標的 列 數 (0~24) │
;│? (DL) <= 游標的 行 數 (0~79) │
;│? (BH) <= 頁碼 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=03H │
;│取得游標位置 │
;│? (BH) <= 頁碼 ┌──┐ │
;│游標的 列 數 => (DH) │ │ <---- 啟始線 │
;│游標的 行 數 => (DL) │ │ │
;│游標的啟始線 => (CH) │ │ <---- 終止線 │
;│游標的終止線 => (CL) └──┘ │
;│註:正常: CH=0DH,CL=0EH │
;│ 消失: CH=0FFH,CL=0FFH │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0EH │
;│在文字模式 或 繪圖模式下顯示一字元,游標則右移一格 │
;│? (AL) <= 字元 ascii │
;│? (BH) <= 頁碼 │
;│? (BL) <= 前景顏色碼 (繪圖模式時) │
;│註:所謂 TTY 就是類似打字機輸出方式,每顯示一字元,游標則右移一格,│
;│ 當移到最後一行時,游標則至跳下一列的最左邊開始,當移到最後一列 │
;│ 時,螢幕則上捲一列 │
;└─────────────────────────────────┘
.model small
.586p
.stack
.data
string db ‘sample‘
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
mov ah,3
mov bh,0
int 10h ;读当前光标位置
mov bp,offset string
mov al,01
mov cx,6
mov bl,8fh
mov ah,13h
int 10h ;显示字符串
mov ax,4c00h
int 21h
end start
DATAS SEGMENT
;此处输入数据段代码
msg db ‘sample‘,0ah,0dh,‘$‘
count equ $-msg-1
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov bx,0
L: mov ah,0Eh
mov al,[msg+bx]
inc bl
int 10h
cmp bx,count
jl L
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
code segment
assume cs:code
start: mov ax,07c0h
mov ds,ax
mov es,ax
mov cx,0
mov dx,184Fh
mov bh,07
mov ax,600h
int 10h
mov ax,0f00h
mov ss,ax
mov sp,100h
read:
mov ah,0
int 16h
mov bh,0
mov bl,47h
mov cx,1
mov ah,9
int 10h
jmp read
org 1FEh
endSign db 55h,0AAh
code ends
end start