整理自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中相對較少,我們使用棧來存儲數據