組合語言學習筆記(7) 更靈活地定位記憶體

2021-07-03 11:08:37 字數 1624 閱讀 3232

1、and指令

邏輯與指令,按位進行與運算,例如:
mov al,01100011b

and al,00111011b

計算後的al結果為:00100011b

計算過程:

0  1  1  0  0  0  1  1   b

0 0 1 1 1 0 1 1 b

----------------------------

0 0 1 0 0 0 1 1 b

可以看出,邏輯與運算兩個二進位制的思路是,設1為真,0為假,則按位對應兩個數,同一位置上下兩個值同為真則結果為真(1),同為假則結果為假(0),一真一假結果為假(0);用更簡單的結論就是:邏輯與運算中,同一位置只有同為真結果才為真,其它情況均為假。 應用場景:例如,如果要將某個二進位制數的第2位(從第0位數起)變為0,則讓它與11111011b做邏輯與運算

2、or指令

邏輯或指令,按位進行或運算,例如:
mov al,01100011b

or al,00111011b

計算後的al結果為:01111011

計算過程:

0  1  1  0  0  0  1  1   b

0 0 1 1 1 0 1 1 b

----------------------------

0 1 1 1 1 0 1 1 b

可以看出,邏輯或運算的思路是:相同位置只要有乙個為真則結果為真,其他情況結果為假。應用場景:例如,如果要將某個二進位制數的第2位(從第0位數起)變為1,則讓它與00000100b做邏輯或運算

3、彙編中,我們可以用一對單引號包裹的形式來表示資料是以字元的形式給出的,如:

dw 'fork word'

mov 'a'

4、在組合語言中,可以用[bx+idata]的格式表示乙個記憶體單元,例如:

mov ax,[bx+200]
此指令的數學表示式為:

(ax)= ((ds)*16 + (bx)+200)
從上面的示例中我們可以知道,其本質是將記憶體單元的偏移位址上加了乙個常量值。

5、si和di在8086cpu中和bx功能相近的暫存器,即都可以存放記憶體偏移位址。

6、還可以用[bx+si]或[bx+di]的格式來標示記憶體偏移位址。

7、同樣可以使用[bx+si+idata]或[bx+di+idata]的格式表示記憶體單元偏移位址。

8、在彙編中使用雙層巢狀的loop迴圈時,由於只有乙個迴圈次數計數器cx,所以內層迴圈的次數會將外層迴圈次數覆蓋,解決辦法是在記憶體迴圈開始前,將外層迴圈cx中的資料儲存到臨時暫存器dx中,在執行外層迴圈loop命令前在將dx中的數值恢復到cx中;

9、當迴圈內部程式比較複雜時,僅僅使用暫存器暫存資料遠遠無法滿足程式的需求,這時,就應該開闢一塊記憶體區域來暫時存放資料。而這塊區域最好的選擇就是定義為棧。

筆記 組合語言 第7章 更靈活地定位記憶體的方法

7.1 and 和 or 指令 1 and 指令 邏輯與指令,按位進行與運算。示例 mov al,01100011b and al,00111011b 執行結果 al 00100011b 2 or 指令 邏輯或指令,按位進行或運算。示例 mov al,01100011b or al,00111011...

組合語言讀書筆記(7 更靈活的定位記憶體位址的方法)

組合語言 第三版,王爽 讀書筆記 and指令 邏輯與,按位進行與運算and al,00111011b or指令 邏輯或,按位進行或運算or al,00100000b 用 的方式指明資料是以字元的形式給出的,編譯器將他們轉化位ascii碼 例如db unix 相當於db 75h,6eh,49h,58h...

組合語言 第7章 更靈活的定位記憶體位址的方法

7.1 and和or 指令 1 and 指令 邏輯與指令,按位進行與運算。2 or 指令 邏輯或指令,按位進行或運算。7.2 關於ascii碼 ascii是一種編碼方案,就是一套規則,它約定了用什麼樣的資訊來表示現實物件。例 61h 表示 a 7.3以字元形式給出的資料 用 的方式指明資料時以字元的...