1. 程式人生 > 其它 >組合語言(第3版,王爽著):實驗13-3 編寫、應用中斷例程 補全程式

組合語言(第3版,王爽著):實驗13-3 編寫、應用中斷例程 補全程式

1) 思路:

  1. 由於程式碼給出了一部分,咱們可以先通過呼叫的 int 指令 來判斷要實現的功能
  2. 比如程式中的 int 10h 中斷例程是 BIOS 提供的中斷例程,ah 是用來傳遞內部子程式的編號,(ah)=2 表示呼叫第 10h 號中斷例程的 2 號子程式,功能為設定游標位置,可以提供游標所在的 行號列號頁號為引數
  3. 比如程式中的 int 21h 中斷例程是 DOS 提供的中斷例程,ah 是用來傳遞內部子程式的編號,(ah)=9 表示呼叫第 21h 號中斷例程的 9 號子程式,功能為在游標位置顯示字串,可以提供要顯示字串的地址作為引數
  4. 具體的每一條指令的功能,請看下方的程式碼註釋

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

4) 程式執行效果: