實驗13-3 編寫沾凄、應用中斷例程-補全程序
1) 思路:
- 由于代碼給出了一部分梗醇,咱們可以先通過調用的 int 指令 來判斷要實現(xiàn)的功能
- 比如程序中的 int 10h 中斷例程是 BIOS 提供的中斷例程,ah 是用來傳遞內部子程序的編號撒蟀,(ah)=2 表示調用第 10h 號中斷例程的 2 號子程序叙谨,功能為設置光標位置,可以提供光標所在的 行號保屯、列號和頁號為參數
- 比如程序中的 int 21h 中斷例程是 DOS 提供的中斷例程手负,ah 是用來傳遞內部子程序的編號,(ah)=9 表示調用第 21h 號中斷例程的 9 號子程序姑尺,功能為在光標位置顯示字符串竟终,可以提供要顯示字符串的地址作為參數
- 具體的每一條指令的功能,請看下方的代碼注釋
2) 補全程序示意圖:
補全程序示意圖
3) 完整的程序代碼:
文件名:exp133.asm
assume cs:code
code segment
s1: db 'Good,better,best,', '$'
s2: db 'Never let it rest,', '$'
s3: db 'Till good is better,', '$'
s4: db 'And better,best.', '$'
s: dw offset s1, offset s2, offset s3, offset s4
row: db 2, 4, 6, 8
start:
mov ax, cs
mov ds, ax
mov bx, offset s
mov si, offset row
mov cx, 4 ; 循環(huán) 4 次
ok:
mov bh, 0 ; 第 0 頁
mov dh, ds:[si] ; dh 中放行號
mov dl, 0 ; dl 中放列號
mov ah, 2 ; ah 傳遞了中斷例程內部子程序的編號切蟋,2 的功能為設置光標位置
int 10h ; int 10h 中斷例程是 BIOS 提供的中斷例程统捶,和屏幕輸出有關
mov dx, ds:[bx] ; 獲取字符串偏移地址,中斷例程中 ds:dx 指向字符串柄粹,要顯示的字符串需 '$' 作為結束符
mov ah, 9 ; ah 傳遞了中斷例程內部子程序的編號喘鸟,9 號子程序的功能為在光標位置顯示字符串
int 21h ; int 21h 中斷例程是 DOS 提供的中斷例程
inc si ; si 為不同行號元素的下標
add bx, 2 ; bx 為不同的要顯示的字符串的偏移地址的下標
loop ok
mov ax, 4c00h
int 21h
code ends
end start
4) 程序運行效果:
程序運行效果