在螢幕中間依次顯示a z,按下esc改變顯示的顏色

2021-08-20 04:16:06 字數 1915 閱讀 4851

利用int 9 中斷程式,在螢幕中間依次顯示a-z,按下esc改變顯示的顏色

程式如下所示

assume cs:code

stack segment

db 128 dup(0)

stack ends

data segment

dw 0,0

data ends

code segment

start:

mov ax,stack ;設定棧

mov ss,ax

mov sp,128

mov ax,data ;設定資料段

mov ds,ax

mov ax,0

mov es,ax

push es:[9*4] ;將原來的int 9的中斷程式的入口位址儲存在ds:0和ds:2的單元中

pop ds:[0]

push es:[9*4+2]

pop ds:[2]

mov word ptr es:[9*4],offset int9 ;在中斷向量當中設定新的int 9的中斷程式的入口位址

mov es:[9*4+2],cs

;迴圈顯示a-z的所有字元

mov ax,0b800h

mov es,ax

mov ah,'a'

s: mov byte ptr es:[160*12+40*2],ah

call delay ;延遲呼叫

inc ah

cmp ah,'z'

;比較有沒有到z

jna s ;不高於z,就跳到s處

mov ax,0

;將中斷向量表中的int 9中斷程式的入口恢復為原來的位址

mov es,ax

push ds:[0]

pop es:[9*4]

push ds:[2]

pop es:[9*4+2]

mov ax,4c00h

int 21h

delay:

push ax ;使用cup迴圈空執行,實現延遲時間的作用

push dx ;讓dx做高位,ax為低位,然後這樣去減

mov dx,1h

mov ax,0

s1: sub ax,1

sbb dx,0

cmp ax,0

jne s1

cmp dx,0

jne s1

pop dx

pop ax

ret;自定義int 9中斷程式

int9:

push ax ;儲存臨時變數

in al,60h ;從埠60h讀出鍵盤的輸入

pushf ;下面要用用於call模擬原先的int9後的

pushf ;用於修改if=0、tf=0 操作

pop bx

and bh,11111100b

push bx

popf

call dword ptr ds:[0]

;呼叫完這個模擬的int9後,會執行iret操作

;會先popf出第一次pushf的值

cmp al,1

jne int9ret ;al!=1就返回

inc byte ptr es:[160*12+40*2+1] ;將屬性值加1,改變了顏色

int9ret:

pop ax

iret

code ends

end start

程式執行結果,可以看到第二行一行的z是藍色的,就是按了esc輸出的結果

JQuery 彈出層,始終顯示在螢幕正中間

1.讓層始終顯示在螢幕正中間 樣式 html model jquery js 讓指定的div始終顯示在螢幕正中間 function letdivcenter divname show html html 點我讓div始終顯示在螢幕中間a 這是內容 不過沒有垂直居中顯示 希望各位高手,能夠補充。小弟在...

QT 獲取螢幕大小,視窗中間顯示

qdesktopwidget desktop a.desktop int screen number desktop primaryscreen qrect rect desktop screengeometry screen number 得到螢幕解析度的大小,並設定 所需標頭檔案 include...

scrollView 重新整理顯示在中間的問題

樓主你好,我大概是和你遇見了同樣的問題,你可以靈活處理一下,不要去管那個滾動條的位置了,我試過了,用scrollviewmsg.scrollto 0,0 一點效果沒有。因為我的scrollview裡面listview的上面還有其他的控制項,所以我想到乙個辦法就是使得一開始的時候就讓上面其中乙個控制項...