1. 程式人生 > 實用技巧 >centos7.2搭建nginx的web伺服器部署uniapp專案

centos7.2搭建nginx的web伺服器部署uniapp專案

四、實驗結論

1.實驗任務1

原始碼如下:

assume cs:code, ds:data
data segment
db 'Nuist'
db 5 dup(2)
data ends

code segment
start:
mov ax, data
mov ds, ax

mov ax, 0b800H
mov es, ax

mov cx, 5
mov si, 0
mov di, 0f00h
s: mov al, [si]
and al, 0dfh
mov es:[di], al
mov al, [5+si]
mov es:[di+1], al
inc si
add di, 2
loop s

mov ah, 4ch
int 21h code ends end start

首先對task1.asm進行彙編連線:

直接執行觀察到螢幕左下角出現NUIST綠色字元:

然後對生成的task1.exe進行debug,首先進行反彙編,然後根據反彙編執行到movah,4c前

將程式line4的資料進行修改如下:

重新進行彙編連結執行結果如下:

可以猜測line4中的資料時用於控制對應字元的顏色,並且2對應的是綠色,因此由本來的陣列資料全2改成2,3,4,5,6時就只有字元N為綠色

2.實驗任務2

原始碼如下:

assume cs:code,ds:data
data segment
db 23, 50, 66
, 71, 35 data ends code segment start: mov ax,data mov ds,ax mov cx,5 mov si,0 s: mov ax,0 mov al,[si] mov bl,10 div bl add al,30h add ah,30h mov [si+5],al mov [si+6],ah //將對應字元資料存於原資料段後 mov ah,2 mov dl, [si+5] int 21h mov ah,2 mov dl, [si+6] int 21h mov ah,2 mov dl, 32 int 21h inc si loop s mov ah,4ch
int 21h code end end start

執行截圖如下:

3.實驗任務3

原始碼task.asm如下:

assume cs:code, ds:data, ss:stack
data segment
  dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
data ends

stack segment
  dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

code segment
start:  mov ax,stack
        mov ss, ax
        mov sp,16
        
        mov ax, data
        mov ds, ax
        
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        
        mov ax,4c00h
        int 21h

code ends
end start

對程式進行debug截圖如下:

回答:

①由d命令可以觀察到資料段資料無變化

②cpu執行程式,程式返回前,cs=076cH,ss=076bH,ds=076aH

③設程式載入後,code段地址為X,則data段地址為X-2,stack段地址為X-1

4.實驗任務4

原始碼task4.asm如下:

assume cs:code, ds:data, ss:stack
data segment
  dw 0123h, 0456h
data ends

stack segment
  dw 0, 0
stack ends

code segment
start:  mov ax,stack
        mov ss, ax
        mov sp,16
        
        mov ax, data
        mov ds, ax
        
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        
        mov ax,4c00h
        int 21h

code ends
end start

對彙編連結好的task4.exe進行debug截圖如下:

答:①cpu執行程式,程式返回前,data段中的資料為多少?

與原資料不變

②cpu執行程式,程式返回前,cs=076ch,ss=076bh,ds=076ah。

③設程式載入後,code段的段地址為X,則data段的段地址為X-2,stack段的段地址為X-1。

④如果段中的資料佔N個位元組,則程式載入後,該段實際佔有的空間為(N/16+1)*16取整。

5.實驗任務5

task5.asm原始碼如下:

assume cs:code, ds:data, ss:stack

code segment
start:  mov ax,stack
        mov ss, ax
        mov sp,16
        
        mov ax, data
        mov ds, ax
        
        push ds:[0]
        push ds:[2]
        pop ds:[2]
        pop ds:[0]
        
        mov ax,4c00h
        int 21h

code ends
data segment
  dw 0123h, 0456h
data ends

stack segment
  dw 0,0
stack ends
end start

對彙編連結後生成的task5.exe進行debug截圖如下:

答:①由d命令可以觀察到資料段資料為0123h和0456h

②cpu執行程式,程式返回前,cs=076aH ss=076eH ds=076dH

③設程式載入後,code段的段地址為x,則data段的段地址為x+3,stack段的段地址為x+4

6.實驗任務6

如果將實驗任務3,4,5中的最後一條偽指令“endstart”改為“end”(也就是說,不指明程式的入口),則哪個仍然可以正確執行?請說明原因。

實驗任務3修改後Debug:

以上為u 0 42的結果,可以發現修改前反彙編是從程式碼段開始,而修改後從ip:0即資料段開始進入,然後進行g命令執行若按照本來的g d則執行不完應該執行的程式碼,必須執行到40才能執行完本來的程式碼段,並且有可能因為執行資料段無關程式碼而發生錯誤:

實驗任務4修改後debug,進行反彙編:

與實驗任務3一樣,是從資料段開始,不能用原來的命令通過g命令正常執行;

實驗任務5修改後debug,進行反彙編如下:

使用g命令執行:

可以看見其正常執行,因為其程式碼段位於其他段前,所以無論有沒有表明程式碼段入口都不影響。

7.實驗任務7

task7.asm原始碼如下:

assume cs:code
a segment
  db 1,2,3,4,5,6,7,8
a ends

b segment
  db 1,2,3,4,5,6,7,8
b ends

c segment   ; 在整合軟體環境中,請將此處的段名稱由c→改為c1或其它名稱
  db 8 dup(0)
c ends

code segment
start:
    mov ax,a
    mov ds,ax
    
    mov ax,c
    mov es,ax
    
    mov si,0
    mov cx,8
s:    mov ax,0
    mov al,[si]
    add al,[si+16]
    mov es:[si],al
    inc si
    loop s
    
    mov ax,4c00h
    int 21H
code ends
end start

使用debug執行截圖如下:

u命令進行反彙編:

g命令執行:

d命令檢視c資料段內容發現執行成功

8.實驗任務8

task8.asm程式碼如下:

assume cs:code
a segment
  dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
  dw 8 dup(0)
b ends

code segment
start: 
    mov ax,a
    mov ds,ax

    mov ax,b
    mov ss,ax

    mov cx,8
    mov si,0
    mov sp,0010h

s: push [si]
    add si,2
    loop s
    mov ax,4c00h
    int 21h
code ends
end start

debug執行截圖如下:

d命令檢視成功逆序存入