1. 程式人生 > 實用技巧 >Redisson官方文件 - 2. 配置方法

Redisson官方文件 - 2. 配置方法

一、實驗任務

1. 實驗任務1

ex1.asm的原始碼:

 1 ;ex1.asm
 2 assume cs:code
 3 code segment
 4 mov ax, 0b810h
 5 mov ds, ax
 6 
 7 mov byte ptr ds:[0], 1
 8 mov byte ptr ds:[1], 1
 9 mov byte ptr ds:[2], 2
10 mov byte ptr ds:[3], 2
11 mov byte ptr ds:[4], 3
12 mov byte ptr ds:[5], 3
13 mov byte ptr ds:[6], 4
14 mov byte
ptr ds:[7], 4 15 16 mov ah, 4ch 17 int 21h 18 code ends 19 end

使用masm、link工具彙編、連結:

debug除錯:

觀察到cx=31,使用u命令精準反彙編至30;

使用g命令執行至倒數第二行,此時命令列出現影象

  

2. 實驗任務2

ex2.asm的原始碼:

 1 ;ex2.asm
 2 assume cs:code
 3 code segment
 4 mov ax, 0b810h
 5 mov ds, ax
 6 
 7 mov bx, 0
 8 mov ax, 101H
 9 mov cx, 4
10 s:    mov [bx], ax
11 add bx, 2 12 add ax, 101H 13 loop s 14 15 mov ah, 4ch 16 int 21h 17 code ends 18 end

使用masm、link工具彙編、連結:

執行結果:

debug除錯:

觀察到cx=1c,使用u命令精準反彙編至1b;

使用g命令執行至倒數第二行,此時命令列出現影象:

實驗分析:

該程式的作用與ex1.exe相同,都是對視訊記憶體的指定位置寫入特定的內容,使得螢幕上顯示四個顏色形狀各異的圖示。

在具體實現上,ex1.exe通過程式碼的重複來更改視訊記憶體地址,而ex2.exe則利用了loop語句簡化了這一過程。

3. 實驗任務3

ex3.asm的原始碼:

 1 assume cs:code
 2 code segment
 3 mov ax,0b800h
 4 mov ds,ax
 5 mov ax,0237h
 6 mov bx,07b8h
 7 
 8 mov cx,16
 9 s: mov ds:[bx],ax
10 add bx,2h
11 loop s
12 
13 mov ax,4c00h
14 int 21h
15 code ends
16 end

執行結果截圖:

把填充的字資料,從0237H 改成0239H後,觀察結果:

把填充的字資料,從0237H 改成0437H後,觀察結果:

實驗分析:

這個字資料中高位位元組裡存放的是圖示的顏色,低位位元組裡存放的圖示的內容。

4. 實驗任務4

ex4.asm的原始碼如下:

 1 assume cs:code
 2 code segment
 3 mov ax,0
 4 mov ds,ax
 5 mov ax,0200h
 6 mov bx,ax
 7 
 8 mov ax,0
 9 mov cx,03fh 
10 s: mov ds:[bx],ax
11 add ax,1
12 add bx,1
13 loop s
14 
15 mov ax,4c00h
16 int 21h
17 code ends
18 end

debug除錯:

成功將0~63寫入記憶體0:200~0:23f。

  

5. 實驗任務5

ex5.asm的原始碼如下:

 1 assume cs:code
 2 code segment
 3 mov ax ,cs
 4 mov ds,ax
 5 mov ax,002h
 6 mov es,ax
 7 mov bx,0
 8 mov cx,cx
 9 
10 s: mov al,ds:[bx]
11 mov es:[bx],al
12 inc bx
13 loop s
14 
15 mov ax,4c00h
16 int 21h
17 code ends
18 end

debug除錯結果如下:

可以看見已經成功把程式本身複製至0:200記憶體單元處。

二、實驗總結

  在實驗過程中,對於實驗1和實驗2的除錯過程中,發現了一個問題:對於視訊記憶體的讀寫,有時候是成功的,而有時候是失敗的。經過多次實驗,可以總結出一個結論,當執行讀寫視訊記憶體指令時,如果控制檯的頁面已經被語句鋪滿,因為新程式碼的顯示,產生了頁面的滾動,則無法正確讀寫視訊記憶體;若控制檯內容為空,新程式碼的顯示不導致頁面滾動,則可以讀寫視訊記憶體顯示圖示。

  經過分析,我認為是控制檯語句滾動這一事實發生在讀寫視訊記憶體語句之後,同時控制檯為了滾動頁面,會將下面行的內容寫入滾上去的一行,這次寫入會覆蓋之前的語句讀寫現存,導致讀寫視訊記憶體語句雖然生效,但是無法顯示出結果。