實驗內容:
1.將老師給的程式框架編譯、連線後利用反彙編u檢視**長度,利用g命令將程式執行至在mov ax,4c00h結束語句前。
(1)發現data中的資料被改為**中指定的資料。
(2)程式返回前,cs=076c、ss=076b、ds=076a。
(3)程式執行後,設code段位址為x,則data段位址為x-2,stack段的段位址為x-1。
2.將ex5-2編譯連線用debug除錯後
(1)發現data中的資料為改為了指定的資料。
(2)程式返回前,cs=076c,ss=076b,ds=076a。
(3)設程式載入後,code段的段位址為x,則data段的段位址為x-2,stack的段位址為x-1。
(4)若段中資料佔n個位元組,程式載入後,該段實際占有的空間為。。
這題其實一開始我還挺沒頭緒的,因為我只看出了三個段位址間的差為1,且存入16,4個位元組後的段位址並沒有改變,但是我經過上網的查閱發現:因為每個段都是以16位元組來對齊的,但是最大不能超過64kb 。這也就是說,如果你的段資料在16位元組內,一樣會被當做乙個位元組段來算,就是16位元組。 要是大於16位元組呢,那麼如果多出就算是1個位元組,因為已經超過乙個16位元組,多出來的1個位元組 也得有乙個位元組段的容量來儲存它,所以這時得佔兩個位元組段,就是32位元組,以此類推。
所以答案為((n+15)/16)*16(該式意思是滿十六後多出的部分都按16計算)
3.編譯連線執行後
(1)data中的資料與設定的資料一致。
(2)cs=076a,ss=076e,ds=076d。
(3)設code段的段位址為x,則data段的段位址為x+3,stack段位址為x+4。
這裡有乙個疑問,**段的長度如圖為32個位元組,在我看來,應該只要+2就夠了啊,可能是系統多預留了16位元組的空間嗎?
4.將三個**中的start分別刪去,再編譯連線執行。
實驗一無法執行
實驗二也無法執行
實驗三反彙編的**一致,且結果也一致。
因為將start去掉後,程式會從ip=0的位置開始執行,而三個程式中只有第三個程式**段的位置是ip=0時的位置,所以第三個程式可以被執行。
5.**如下:
1assume cs:code
2a segment
3 db 1,2,3,4,5,6,7,8
4a ends56
b segment
7 db 1,2,3,4,5,6,7,8
8b ends910
c1 segment ; 在整合軟體環境中,請將此處的段名稱由c→改為c1或其它名稱
11 db 8 dup(0)12
c1 ends ; 改的時候要成對一起修改
如上圖,相加前邏輯段c的值為0.
如圖,實現資料相加後的邏輯段c的8個位元組的值為前16個位元組資料對應的和。
6.
assume cs:code如上圖,對比前後邏輯段c中的資料,發現存放正確。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 bx,0
mov cx,8
mov ax,b
mov ss,ax
mov sp,10h
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
實驗感想:
對於分段**的順序即部分的操作要點有了更深的理解,逐漸開始可以自己編寫或者補全部分簡單的**,實驗過程中遇到了許多的疑問,但是通過上網查閱,對於資料的儲存,棧的定義有了更深的理解。
實驗五實驗報告
系統架構圖 首先我在我的電腦裡建立了有名稱要求的資料夾,然後開啟android studio clone了我們的小組專案。此處因為已經clone過了,所以無法再把這個專案clone進去 進行編譯,執行,測試均正常 我在遊戲主介面載入了乙個toast,點選可以短暫地顯示我的學號資訊 首先在封面檔案裡我...
MySQL實驗報告五 實驗報告五資料庫
實驗報告 資料庫原理應用及應用 實驗報告 題目 實驗五 1 表的更新 2 檢視的建立 查詢及更新 日期2014 04 08 班級學號 2 姓名 成績實驗環境 在已安裝的安全的 0 sql server 2000 上 實驗內容與完成情況 一 表的更新 1 插入 insert into values 或...
實驗六實驗報告
實驗結論 part1 結構體型別及程式設計應用 1.補足程式 include const int n 5 定義結構體型別struct student,並定義stu為其別名 typedef struct student stu 函式宣告 void input stu s,int n int findm...