程式取得所需空間有兩種方式:
1.引導程式的時候為程式分配
2.程式在執行過程中向系統申請
**
mov ax,[0] ;debug中,會將ds:0乙個字的資料(高位和低位)傳入ax 16位暫存器
mov al,[
0] ;debug中,會將ds:0中的乙個位元組資料傳入al 8位暫存器
assume cs:code"dw"--"define word"定義字型資料當我們使用u指令檢視程式時code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov bx,
0mov ax,
0mov cx,
8s: add ax,cs:[bx]
add bx,
2loop s
mov ax,4c00h
int21h
code ends
end start
前面一堆我們不知道的**,這是在程式中的**段,這個**段在這裡是由dw定義,8個字型資料,16個位元組,所以我們的彙編**應該在cs:10處
在我們debug中執行程式時,需要將ip調整為10
在上面程式中,我們在第一條彙編指令前面加上乙個標號start。
這個start在end後面出現,因此我們使用end指明程式的入口位址。你可以這樣理解:前面的start標號僅僅就是個標記,你第一次看到不能說明說明,只有你在看到下面end start時,你才知道start是程式的入口。
在程式生成時就會自動設定程式的入口位址
完成下面的程式,利用棧,將程式中定義的資料逆序存放
逆序結果
在這段中定義了乙個棧空間儲存資料 cs:010h~cs:02fh,16個字,32位元組大小
檢測點 6.1
(1)
mov cs:[bx],ax(2)
棧在程式中,所以段位址和當前位址相同,第乙個空填cs
從cs:10h開始往後20個位元組,也就是cs:9h+20h=cs:29h,棧空間就是cs:10h~cs:29h
所以在入棧之前,sp=30h(第一次入棧時,棧頂在cs:28h)
第三個空pop cs:[bx]
實驗 5 編寫,除錯具有多個段的程式
匯程式設計序多個段,相當於獨立的,也就是位址都是0開始
因為在除錯**開始前,只有cs位址是已知的,data和stack還不知道,資料段的資料要檢視到的話
1.將**執行**執行到mov ds,ax
2.因為這三個段空間是緊密排列,先資料段,再棧段,最後**段(順序與**中的順序有關),棧段佔16位元組,資料段佔16位元組,**段開始在076c:0h,所以棧段開始在076b:0h,資料段開始在076a:0h
n / 16 不進行四捨五入的取整,這個公式實際上想說明,不滿16位元組,也佔了16位元組,也就是一行
(3)能夠正常正確執行,因為(1)(2)在程式中棧段和資料段都在**段的前面,程式的位址不是**段的位址
學習第五天
清楚測試用例是什麼 測試用例的重要性 有效性 測試用例是測試人員測試過程中的重要參考依據,準確的測試用例的計畫 執行和跟蹤是 測試的有效性的有力證明 可復用性 設計良好的測試用例可以重複執行,能節約時間,提高測試效率 易組織性 清晰詳細的測試用例能夠便於測試執行的開展 可評估性 測試用例的通過率是檢...
Java學習第五天
當類載入器需要載入某個類時,類載入器會在載入初始化後生成該類的乙個類物件 class 用於描述該類的元資料資訊等。在其後的連線過程中,會初始化該類的靜態成員 變數或靜態初始化器 靜態初始化變數和初始化器按照先後順序執行初始化。例如 static int a 10 static 這樣初始化後a 100...
C 學習第五天
c 中的is和as is可用於任何型別。例如 int a 10 a is object true object o 10 o is int true o person o is int false as右側型別必須為引用型別或可空型別。as操作如果失敗,不丟擲異常,而是返回null 結構 struc...