彙編語言06——更靈活定位內存地址

整理自fishcc論壇

彙編語言06——更靈活定位內存地址


and和or指令

and指令:邏輯與指令,按位進行與運算
or指令:邏輯或命令,按位進行或運算

[bx + idata]的表示形式
mov ax,[200+bx] ;將bx偏移200之後的地址中的值給ax
等價於:
mov ax,200[bx]
mov ax,[bx].200

用[bx + idata]的方式可以進行數組處理


SI和DI
SI和DI是8086CPU中和bx功能相近的寄存器
但是SI和DI不能被分成兩個8位寄存器來使用
[bx]標示一個地址,段地址默認在ds中
[si]和[di]的意義和[bx]相同


在複製數據時,我們通常使用ds:si來指向要複製的源,ds:di指向複製的目的空間,然後用一個循環來完成複製


同樣[bx + si + idata]也表示段地址爲ds,偏移地址爲bx + si + idata的數據


尋址方式的總結:
1,用一個常量來表示地址: bs:[idata]
2,用bs來表示內存地址 bs:[bx]
3,用變量和常量來表示: bs:[bx + idata]
4,用兩個變量: bs:[bx + si]
5,用兩個變量和一個常量 bs:[bx + si + idata]


二重循環時的問題
由於目前已知存儲循環次數的寄存器爲cx,當想進行二重循環時,會出現不夠用的問題
但是由於loop只認cx,所以,只能使用其他的一個寄存器保存cx的值,在進行另一個循環時再進行恢復
但是這樣需要另外一個寄存器,考慮到寄存器數量在8086CPU中相對較少,我們使用棧來存儲數據

發佈了34 篇原創文章 · 獲贊 27 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章