int指令的練習,安裝一箇中斷程序後打印“!”

目的:在屏幕中間顯示八十個感嘆號

安裝程序:

assume cs:code

code segment
	start:
		mov ax,cs
		mov ds,ax
		mov si,offset L
		mov ax,0
		mov es,ax
		mov di,200h
		mov cx,offset Lend - offset L;計算L程序的大小
		cld
		rep movsb
		
                ;以下操作修改中斷向量表7ch跳轉地址爲0:200 
		mov ax,0
		mov es,ax
		mov word ptr es:[7ch*4],200h
		mov word ptr es:[7ch*4+2],0
		
		mov ax,4c00h
		int 21h
		
	 L:
		lp:
			push bp
			mov bp,sp;將棧頂地址送到bp
			dec cx
			jcxz lpret
			sub [bp+2],bx;在棧中,將bp下面的ip修改到執行程序的開頭
		lpret:
			pop bp;恢復bp
			iret;相當於pop IP
                        ;pop CS
                        ;popf
	 Lend:
		nop
code ends
end start	


執行程序:

assume cs:code

code segment
      start:
          ;將顯存區域地址傳送到es 
          mov ax,0b800h
          mov es,ax
 
          mov di,160*12;將屏幕中間的位置地址付給di
          mov bx,offset se - offset s;計算s程序段的大小
          mov cx,80;要打印80個感嘆號
          
        s:
          mov byte ptr es:[di],'!'
          add di,2;跳到下一個數據區
          int 7ch;引發7ch中斷
                  ;操作有:pushf
                         ;push CS
                         ;push IP 
       se:
          nop   
      
      
      
      mov ax,4c00h
      int 21h
code ends
end start



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章