1. 程式人生 > >實驗五 編寫、調試具有多個段的程序

實驗五 編寫、調試具有多個段的程序

mage 偽指令 解析 總結 實現 segment 內容 info 加載

1.

  • cpu執行程序,程序返回前,data段中的數據是多少23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09

技術分享圖片

  • cpu執行程序,程序返回前,cs=076c, ss=076b, ds=076a

技術分享圖片

  • 設程序加載後,code段的地址為X,則data段的地址X-2,stack段為X-1

2.

  • cpu執行程序,程序返回前,data段中的數據是多少23 01 56 04

技術分享圖片

  • cpu執行程序,程序返回前,cs=076C, ss=076B, ds=076A

技術分享圖片

  • 設程序加載後,code段的地址為X,則data段的地址X-2,stack段為X-1
  • 對於如下定義的段:

  name segment

  ...

  name ends

如果段中的數據占N個字節,則程序加載後,該段實際占有的空間為:((N+15)/16)*16。

3.

  • cpu執行程序,程序返回前,data段中的數據是23 01 56 04

技術分享圖片

  • cpu執行程序,程序返回前,cs=076a, ss=076e, ds=076d

技術分享圖片

  • 設程序加載後,code段的地址為X,則data段的地址X+3,stack段為X+4

4.

  • 如果將(1)(2)(3)題中的最後一條偽指令“end start”改為“end”,則哪個程序仍可以正確執行?請說明原因。
  • 第三個程序還可以執行。因為不指明程序入口時,cs:codesegment默認ip為0,第三個程序正好是程序開始的地方,前兩個一開始時在存儲數據,到後來才才有cs:codedegment,但因為不指名程序入口時默認ip為0,則會解析為匯編指令為錯誤。

5.

代碼:

技術分享圖片

① 在實現數據相加前,邏輯段 c 的 8 個字節

技術分享圖片

② 執行完實現加運算的代碼後,邏輯段 c 的 8 個字節

技術分享圖片

6.程序如下,編寫code中的代碼,用push指令將a段中的前8個字形數據,逆序存儲到b段中

代碼:

技術分享圖片

截圖

技術分享圖片

總結:個人覺得這次的實驗前幾個很簡單,都是套路,但是後兩個是有思路不會實施,主要就在於之前的內容沒掌握好,還有就是尋址掌握的根本就不好。’

實驗五 編寫、調試具有多個段的程序