第五章知識彙總
第五章
1.【bx】和記憶體單元的描述
要完整地描述一個記憶體單元,需要兩種資訊:(1)記憶體單元的地址(2)記憶體單元的長度(型別)
用【0】表示一個記憶體單元時,0表示記憶體單元的偏移地址,段地址預設在ds中,單元的長度(型別)可以由具體指令中的其他操作物件(例如暫存器)來指出。
mov ax,[bx]表示:
將一個記憶體單元的內容送入ax,這個記憶體單元的長度為2位元組(字單元),存放一個字,偏移地址在bx中,段地址在ds中。
2.loop
loop有迴圈的意思,這個指令與迴圈有關係。
這一章主要講【bx】和loop指令的應用和相關的內容。
3.我們定義的描述性的符號:“()”
(ax)表示ax中的內容。
((ds)*16+(bx))
ds中的內容為ADR1,bx中的內容為ADR2。表示記憶體 ADR1*16+ADR2中的內容。
4.約定符號idata為常量。
mov ds idata 為非法指令
5.1 【BX】
mov ax 【bx】
功能:(ax)=((ds)*16+(bx))
P97 注意看問題5
5.2 Loop指令
CPU執行loop指令的時候,需要進行兩步操作:(1)(cx)=(cx)-1 (2)判斷cx中的值,不為零則轉至標號處執行程式,如果為零則向下執行。
P99 注意任務1
我們可以總結出用cx和loop指令相配合實現迴圈功能的3個步驟:
(1)在cx中存放迴圈次數
(2)loop指令中的標號所標識地址要在前面
(3)要迴圈執行的程式段,要寫在標號和loop指令的中間
5.3 在debug中跟蹤用loop指令實現的迴圈程式
考慮三個問題:
(1)迴圈運算之後的結果會不會超過dx能儲存的範圍? 不會,放心用
(2)用哪個暫存器來進行累加?dx add dx,ax
(3)如何將位元組單元中的值賦給暫存器? ah,al分下來賦值
-g 0012 執行CS:0012之前的程式段
5.4 loop和【bx】的聯合應用
把幾個記憶體單元中的資料相加放到一個dx中需要一箇中介暫存器ax,
如何將記憶體單元中的值賦給ax?(ah)=0,(al)=。。。
之後迴圈即可
5.6 段字首
可以在偏移地址的前面顯式地加上 【段暫存器】:來表示指定地段暫存器
PS:段暫存器有哪些?
5.7 一段安全的空間
0:200~0:2ff這段空間,用之前可以先用debug檢視一下
PS:檢視用哪個命令?
我們不能向一些存放系統或其他程式資料或程式碼的記憶體空間寫入內容(???????)
PS:dos?
5.8段字首的使用
0:200和0020:0表示相同
bx可以用來存放被作為變數的偏移地址
0020:0更利於操作