王爽《組合語言》第十二章 實驗十二 題目解答

來源:互聯網
上載者:User

; 安裝do0子程式,處理中斷0
; do0 子程式代替0號中斷,在螢幕中間顯示"overflow!! dyl'"

assume cs:code

code segment
start:
 ; 用movsb安裝do0 到0號中斷向量

 ; 配置好movsb要用到的源地址 ds:[si] 開始
 mov ax, cs
 mov ds, ax
 mov si, offset do0
 
 ; 目的地址 為 es:[di] 開始
 mov ax, 0
 mov  es, ax
 mov di, 200h

 ; 代碼長度,兩個標號之間相減為代碼的長度
 mov cx, offset do0end - offset do0
 cld
 rep movsb

 ; 設定中斷向量表
 ; 0中斷的段地址為 0*4+2
 ; 0中斷的位移地址為 0*4
 mov ax, 0
 mov es, ax
 mov word ptr es:[0*4], 200h
 mov word ptr es:[0*4+2], 0h

 mov ax, 4c00h
 int 21h

do0:
 ; 因為此程式退出時,記憶體會被作業系統收回,所以這裡定義一個資料,放在不會被OS收回的記憶體裡
 jmp short do0start
 db 'overflow!! dyl'
do0start:
 mov ax, cs
 mov ds, ax

  ; 因為拷貝了代碼到0:200之後,資料是從202h 地址開始開始的,jmp short do0start 佔了2個位元組
 mov si, 202h 

 ; 拷貝到顯存的中間位置
 mov ax, 0b800h
 mov es, ax
 mov di, 12*160+36*2

 mov cx, 14

 s:
  ; 從 ds:[si] 開始的
  mov al, [si]
  mov es:[di], al
  inc si
  add di, 2
  loop s
    
 mov ax, 4c00h
 int 21h

 iret
do0end: nop

code ends

end start

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.