組合語言(第3版,王爽著):實驗13-3 編寫、應用中斷例程 補全程式
阿新 • • 發佈:2022-05-26
1) 思路:
- 由於程式碼給出了一部分,咱們可以先通過呼叫的 int 指令 來判斷要實現的功能
- 比如程式中的 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 ; 迴圈 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