1. 程式人生 > 實用技巧 >1911A:微博三方登陸原理講解

1911A:微博三方登陸原理講解

1. 實驗任務1

ex1.asm的原始碼:

;ex1.asm
assume cs:code
code segment
mov ax, 0b810h
mov ds, ax

mov byte ptr ds:[0], 1
mov byte ptr ds:[1], 1
mov byte ptr ds:[2], 2
mov byte ptr ds:[3], 2
mov byte ptr ds:[4], 3
mov byte ptr ds:[5], 3
mov byte ptr ds:[6], 4
mov byte ptr ds:[7], 4

mov ah, 4ch
int 21h
code ends
end

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

debug除錯:

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

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

2. 實驗任務2

ex2.asm的原始碼:

;ex2.asm
assume cs:code
code segment
mov ax, 0b810h
mov ds, ax

mov bx, 0
mov ax, 101H
mov cx, 4
s:    mov [bx], ax
add bx, 2
add ax, 101H
loop s

mov ah, 4ch
int 21h
code ends
end

  

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

執行結果:

debug除錯:

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

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

實驗分析:

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

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

3. 實驗任務3

ex3.asm的原始碼:

assume cs:code
code segment
mov ax,0b800h
mov ds,ax
mov ax,0237h
mov bx,07b8h

mov cx,16
s: mov ds:[bx],ax
add bx,2h
loop s

mov ax,4c00h
int 21h
code ends
end

  

執行結果截圖:

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

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

實驗分析:

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

4. 實驗任務4

ex4.asm的原始碼如下:

assume cs:code
code segment
mov ax,0
mov ds,ax
mov ax,0200h
mov bx,ax

mov ax,0
mov cx,03fh
s: mov ds:[bx],ax
add ax,1
add bx,1
loop s

mov ax,4c00h
int 21h
code ends
end

  

debug除錯:

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

  

5. 實驗任務5

ex5.asm的原始碼如下:

assume cs:code
code segment
mov ax ,cs
mov ds,ax
mov ax,002h
mov es,ax
mov bx,0
mov cx,cx

s: mov al,ds:[bx]
mov es:[bx],al
inc bx
loop s

mov ax,4c00h
int 21h
code ends
end

  

debug除錯結果如下:

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