讓你輕鬆掌握 Python 中的 Hook 鉤子函式
阿新 • • 發佈:2020-12-12
實驗結論
- 實驗任務1
程式設計:在螢幕中間分別顯示綠色、綠底紅色、白底藍色的字串'welcome to masm!'。
1 assume cs:code,ds:data 2 data segment 3 4 db 'welcome to masm!' ;ds:[si] 5 6 db 00000010B ;0000 0000 ds:[bx] 7 db 00100100B ; rgb rgb 8 db 01110001B 9 data ends; 10 11 stack segment stack 12 db 128 dup(0) 13 stack ends 14 15 code segment 16 start: mov ax,stack 17 mov ss,ax 18 mov sp,128 19 20 mov bx,data 21 mov ds,bx 22 23 mov bx,0B800H 24 mov es,bx 25 26 mov si,0 ;結合push si和pop si實現反覆從開始地址讀取資料27 mov di,160*11+32*2 ;從12行開始,中間顯示 28 mov bx,16 29 mov dx,0 30 31 mov cx,3 ;迴圈3次,輸出三行 32 33 m: push bx 34 push cx 35 push si 36 push di 37 38 mov cx,16 39 mov dh,ds:[bx] ;用dh存放顏色屬性40 41 s: mov dl,ds:[si] ;dl存放資料 42 mov es:[di],dx 43 add di,2 44 inc si 45 loop s 46 47 pop di 48 pop si 49 pop cx 50 pop bx 51 add di,160 ;實現換行 52 inc bx ;bx改變一個位元組 53 loop m 54 55 mov ax,4c00h 56 int 21h 57 58 code ends 59 end start
輸出結果:
- 實驗任務2
編寫子程式 printStr,實現以指定顏色在螢幕上輸出字串、呼叫它完成字串輸出。
1 assume cs:code, ds:data 2 data segment 3 str db 'try', 0 4 data ends 5 6 code segment 7 start: 8 mov ax, data 9 mov ds, ax 10 11 mov si, offset str 12 mov al, 2 13 call printStr 14 15 mov ah, 4ch 16 int 21h 17 18 printStr: 19 push bx 20 push cx 21 push si 22 push di 23 24 mov bx, 0b800H 25 mov es, bx 26 mov di, 0 27 s: mov cl, [si] 28 mov ch, 0 29 jcxz over 30 mov ch, al 31 mov es:[di], cx 32 inc si 33 add di, 2 34 jmp s 35 36 over: pop di 37 pop si 38 pop cx 39 pop bx 40 ret 41 42 code ends 43 end start
執行結果如下:
對源程式做如下修改:
將line3改為:
1 str db 'another try', 0
將line12改為:
1 mov al, 4
執行結果如下:
⭐基於執行結果,理解原始碼,以及組合使用轉移指令call和ret實現子程式的原理與方法。具體地,在line18-40中:
⭐line 19-22,line 36-39,這組對稱使用的push、pop,這樣用的目的是什麼?