1. 程式人生 > 實用技巧 >訓練中torch.backends.cudnn.benchmark的使用

訓練中torch.backends.cudnn.benchmark的使用

1. 實驗任務1

使用任意一款文字編輯器,編寫8086彙編源程式ex1.asm。

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

使用masm、link對ex1.asm進行彙編、連結,得到可執行檔案ex1.exe,執行並觀察結果。

使用debug載入可執行檔案ex1.exe後,使用d命令檢視程式段字首PSP所佔的256個位元組。

結合可執行檔案中暫存器CX的值,使用u命令對ex1.exe進行精確反彙編

使用g命令執行到程式退出執行之前(即原始碼檔案中line16之前),觀察結果。

此處,第一次並沒有將資料送入目標記憶體,但ex1.exe這個檔案執行時正常,猜測:是螢幕回滾的原因,因為第二次直接檢視效果是可以得到的

2. 實驗任務2

ex2.asm原始碼

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

使用masm.link工具彙編,連結的命令及執行結果

結合可執行檔案中暫存器CX的值,使用u命令對ex2.exe進行精確反彙編

靈活使用t命令、p命令、g命令,對ex2.exe進行除錯。

注意:單步除錯時,對於迴圈指令loop, 中斷指令int,使用t命令和p命令單步除錯的區別。

把ex2.asm中line9 mov cx, 4 改成 mov cx, 8 ,儲存後重新彙編、連結、執行並觀察結果。

結合上述實驗和觀察,分析、對比ex2.asm和ex1.asm,它們實現的是否是相同的功能和效果?在具體實現上有什麼不同?

答:兩者效果相同,但實現方式不同,ex1.asm是將一步步將資料放入指定記憶體,ex2.asm利用loop和[bx]指令,大大縮短了重複程式碼,並且易於更改,如:只需改變步長,便可增加圖形顯示

3. 實驗任務3

綜合使用loop,[bx],編寫完整彙編程式,實現向記憶體b800:07b8開始的連續16個字單元重複填充字資料 0237H。

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

把填充的字資料,從0237H 改成0239H,再次儲存後,彙編、連結、執行,觀察結果。

把填充的字資料,從0237H 改成0437H,再次儲存後,彙編、連結、執行,觀察結果。

猜測並分析,這個字資料中高位位元組裡存放的是什麼資訊,低位位元組裡存放的是什麼資訊。

高位元組存放顏色資訊,低位元組存放內容資訊

4. 實驗任務4

編寫完整彙編源程式,實現向記憶體0:200~0:23F依次傳送資料0~63(3FH)。

1)綜合使用[bx]和loop,編寫彙編源程式

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

靈活使用debug的t命令、g命令、p命令除錯。在程式退出前,用d命令檢視 0:200~0:23F,確認是否將0~3F傳送至此段記憶體區域。

2)利用棧的特性,綜合使用loop,push實現(限定僅使用8086中已學過指令實現),編寫源程式

 1 ;ex4_.asm
 2 assume cs:code
 3 code segment
 4     mov ax,0020h
 5     mov ss,ax
 6     mov sp,0040h
 7 
 8     mov bh,3fH
 9     mov bl,3eH
10     mov cx,64
11 s:  push bx
12     add bh,-2h
13     add bl,-2h
14     loop s
15 
16     mov ah,4ch
17     int 21h
18 code ends
19 end

靈活使用debug的t命令、g命令、p命令除錯。在程式退出前,用d命令檢視 0:200~0:23F,確認是否將0~3F傳送至此段記憶體區域。

5. 實驗任務5

將“mov ax,4c00h"之前的指令複製到記憶體0:200處,補全程式

 1 ;ex5.asm
 2 assume cs:code
 3 code segment
 4     mov ax,cs
 5     mov ds,ax
 6     mov ax,0020h
 7     mov es,ax
 8     mov bx,0
 9     mov cx,23
10 s:  mov al,[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

1)複製的是什麼,從哪裡到哪裡

複製位元組資料,從cs程式碼段到ds資料段,即0:200處

2)複製的是什麼,有多少個位元組,如何知道要複製的位元組數量

位元組數量要看程式碼佔多少位元組,如果熟悉程式碼可以直接計算,我是先假設有多少位元組,然後反彙編檢視程式碼再計算