ServerLess之雲函式實踐-天氣API
阿新 • • 發佈:2020-11-24
實驗任務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
執行結果截圖:
在debug裡除錯到程式返回前的截圖:
修改資料後截圖:
猜測這裡的數值的作用是更改字元的顏色。
實驗任務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 bl,10 mov al,ds:[si] mov ah,0 div bl add al,30h add ah,30h mov ds:[si+5],al mov ds:[si+6],ah mov ah, 2 mov dl,ds:[si+5] int 21h mov ah, 2 mov dl,ds:[si+6] int 21h mov ah, 2 mov dl, 32 int 21h inc si loop s mov ah,4ch int 21h code ends end start
執行結果:
實驗任務3
原始碼:
assume cs:code, ds:data, ss:stack data segment dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h data ends stack segment dw0, 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
1)
返回程式前data中資料:
0123h 0456h 0789h 0ABCh 0DEFh 0FEDh 0CBAh 0987h
2)
cs=076Ch、ss=076Bh、ds=076A
反彙編:
3)
data段地址為X-2、stack段地址為X-1
實驗任務4
原始碼:
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
1)
0123h、0456h
2)
cs:076Ch ss=076Bh ds=076Ah
3)
data段地址為X-2 stack段地址為X-1
4)
會佔有最接近且不超過16的倍數個位元組。
實驗任務5
原始碼:
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
1)
0123h、0456h
2)
cs:076Ah ss=076Eh ds=076Dh
3)
data段地址為X+3 stack段地址為X+4
實驗任務6
第三個可以正常執行。因為如果不指明程式的入口,將會從第一條指令順序向後執行,前兩個都會將data段和stack段中的資料當作指令來執行,而第三個的data段和stack段位於指令程式碼段的後面不影響程式的正常執行。
實驗任務7
原始碼:
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 c1 segment db 8 dup(0) c1 ends code segment start: mov ax,a mov ds,ax mov ax,b mov es,ax mov ax,c1 mov ss,ax mov cx,8 mov si,0 s: mov ax,ds:[si] mov ss:[si],ax mov ax,es:[si] add ss:[si],ax inc si loop s mov ax,4c00h int 21h code ends end start
實驗任務8
原始碼:
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 sp,16 mov si,0 mov cx,8 s: push ds:[si] add si,2 loop s mov ax,4c00h int 21h code ends end start
實驗總結
1.通過本次實驗我掌握了大小寫字元的轉換方法、數字字元和數值之間的轉換方法,同時也學到了利用系統功能呼叫int 21h中的2號子功能輸出單個字元。
2.掌握了含有多個數據段和指令段的空間分配和準確定址問題。
3.學會了對不同段進行數值操作,主要是利用暫存器和利用棧。
4.掌握了每個段的空間實際佔用問題。
5.認識到了指明程式入口的重要性。