1.用d命令檢視後發現data段中的資料不變。
2.cpu執行程式,程式返回前,cs=076c,ss=076b,ds=076a。
3.設程式載入後,code段的段位址為x,則data段的段位址為x-2,stack段的段位址為x-1。
1.用d命令檢視後發現data段中的資料不變。
2.cpu執行程式,程式返回前,cs=076c,ss=076b,ds=076a。
3.設程式載入後,code段的段位址為x,則data段的段位址為x-2,stack段的段位址為x-1。
4.對如下定義的段:
name segment
name ends
如果段中資料佔n個位元組,則程式載入後,該段實際占有的空間為 [(n+15)/16]*16。(結合實驗1,2可知資料段都是以16個位元組對齊,不足16位元組按16位元組算)
1.用d命令檢視後發現data段中的資料不變。
2.cpu執行程式,程式返回前,cs=076a,ss=076e,ds=076d。
3.設程式載入後,code段的段位址為x,則data段的段位址為x+3,stack段的段位址為x+4。
(1)和(2)不能正確執行,因為如果不是end start就會預設以ip=0執行,而不是從start開始執行。而(3)的data和stack都在code之後,所以ip本來就為0,可以正確執行。
執行前我檢視了很多次,一直是這樣,我也不知道問題出在哪!!
執行後可以看出存入正確。
1執行前還是向上一題那樣,就不截圖了。assume cs:code
2a1 segment
3 dw 1,2,3,4,5,6,7,8,9
,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
4a1 ends
5b1 segment
6 dw 8 dup(0)7
b1 ends
8code segment
9start:
10mov ax,a1
11mov ds,ax
12mov ax,b1
13mov ss,ax
14 mov sp,16
15 mov cx,8
16 mov bx,0
17s:push [bx]
18 add bx,2
19loop s
20mov ax,4c00h
21int
21h22
code ends
23 end start
執行後如下:
發現成功逆序儲存。
通過這次實驗我理解和掌握將資料、**、棧放入不同段的程式的編寫和除錯,也理解具有多個段的彙編源程式對應的目標程式執行時,記憶體分配方式。
不過在實驗中我也遇到很多問題,希望在接下來的學習中能改進吧。
彙編實驗五
實驗內容 描述編寫code段 將a段和b段中的資料依次相加,將結果儲存在c段中 assume cs code 編寫code段 將a段和b段中的資料一次相加,將結果儲存在c段中 a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7...
彙編實驗五
1.任務一 1 cpu執行程式,程式返回前,data段中的資料如上圖所示,保持不變 2 cpu執行程式,程式返回前,cs 0772h,ss 0771h,ds 0770h 3 設程式載入後,code段的位址為x,則data段的段位址為x 2h,stack段的段位址為x 1h 2.任務二 1 cpu執行...
王爽彙編實驗 五)
將下面的程式編譯 連線,用debug載入 跟蹤,然後回答問題。assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0def,0fedh,0cbah,0987h data ends stack segment ...