1. 程式人生 > 實用技巧 >LeetCode 熱題 HOT 100(02,無重複字元的最長子串)

LeetCode 熱題 HOT 100(02,無重複字元的最長子串)

實驗內容&實驗結論

1. 實驗任務1

使用任意一款文字編輯器,編寫8086彙編源程式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

(1)使用masm、link工具彙編、連結的命令列及執行結果截圖

(2)檢視PSP的命令截圖

(3)結合可執行檔案載入後暫存器CX的值,使用u命令精確反彙編截圖

(4)用g命令執行到line16退出執行之前的截圖

2. 實驗任務2

使用任意一款文字編輯器,編寫8086彙編源程式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

(1)使用masm、link工具彙編、連結的命令列及執行結果截圖

(2)結合可執行檔案載入後暫存器CX的值,使用u命令精確反彙編截圖

(3)靈活使用t命令/p命令、g命令,對ex2.exe進行除錯的截圖

<1>用G命令除錯到出現迴圈的位置,然後用P命令執行迴圈內容,再用T命令去進行單步除錯,當再次遇到INT 21時,用P命令退出本次除錯

<2>用G命令除錯到出現迴圈的位置,然後用T命令進行單步除錯

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

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

分析:  

  三次圖案的不同應該是由於迴圈的次數不同,mov cx,4所表示的意思是將迴圈進行4次,mov cx,8是將迴圈進行8次。

  其中,ex1.asm使用mov直接賦值,ex2.asm使用loop迴圈對其賦值。

3. 實驗任務3

給出原始碼

assume cs:code code segment
mov ax,0b800h
mov ds,ax

mov bx,07b8h
mov ax,0437H
mov cx,16
s: mov [bx],ax
add bx,2
loop s

mov ax,4c00h
int 21h
code ends
end

(1)結果截圖。

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

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

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

分析:

  從0237改成0239:顏色均為綠色,數字由7變為9。

  從0237改成0437:顏色由綠色變紅色,數字均為7。

  由此看出,改變高位位元組可以改變顏色,改變低位位元組可以改變內容。

4. 實驗任務4

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

assume cs:code
code segment
    mov ax,20h
    mov ds,ax

    mov cx,40h
    mov bx,00h
s:    mov [bx],bx
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end

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

分析:由此可見0~3F已傳送至此段記憶體區域。

5. 實驗任務5

填空以後的原始碼

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

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

    mov ax,4c00h
    int 21h
code ends
end

mov ax,4c00前共有10行程式碼,先設定cx為31即1fh,再根據debug中反彙編後檢視mov ax,4c00程式碼的地址,修改cx的值

根據上圖,將cx改為17h後再彙編、連結、執行、debug

分析用:D命令檢視,發現已經複製到指定記憶體