在筆記4裡,有兩個概念混淆不清,即儲存器和暫存器.
8086,8088系統共有14個16位暫存器和8個8位暫存器,其中,bx,si,di,sp都可用於暫存器指標,預設情況下與ds匹配使用。bp也可用於暫存器指標,預設情況下與ss匹配使用。
8086,8088cpu共有20根匯流排,可定址範圍為2^20個位址空間,可表示1m位址空間。儲存器以位元組為單元儲存資料,即可定址範圍為1m位元組,可用5位16進製制數表示:fffffh。而暫存器為16位二進位制數,為使暫存器能夠訪問任一儲存單元,採用儲存器分段的方法。暫存器段的大小為64k,即2^16。暫存器段的起始位址必然為任一小段的起始位址。儲存器中小段的劃分為從0開始每16個位元組為一小段。
暫存器中的資料如果以字為單元儲存,則遵守高高低低的原則。
8086,8088cpu共有七種定址方式,第四講共講了其中五種方式:
1.立即尋
運算元是立即數,如 mov ax, 1002h 就是把 1001h放入ax。
2.暫存器直接尋
運算元是暫存器,如 mov ax,bx 就是把bx的內容放入ax,如果執行前ax = 1002h,bx = 2014h,則執行後ax = 2014h, bx = 2014h。
3.直接尋
運算元可直接定位段中的位址,預設是在ds段中,通常是變數。如 mov ax, [1002h] 把ds 偏移1002h 位置的內容放入ax,如ds段的起始位置為 25470h,則[1002h]為 25470h + 1002h = 26472h,此操作把儲存器26472位置的值放入ax。可以是變數 mov ax, value 或 mov ax, [value] 二者等效。也可做段限定,不使用預設段: mov ax, es: [2027h] ,此操作不從ds段起始位址開始偏移,而是從es段起始位址開始。
4.暫存器間接尋
運算元是暫存器中的內容作為位址。如mov ax, [bx] ,取出bx中的內容後, 預設從ds開始偏移,偏移位數為bx中的數。如bx 中的數為0047h, ds 段值為 157eh, 第二個運算元實體地址為 157e0h + 0047h = 15837h,將儲存器中位置在15837h中的內容放入ax。也可使用段限定,如 mov ax, es: [bp]。在不使用限定的情況下,當運算元中的暫存器為bx,di,si時,預設使用段為ds,當 運算元中的暫存器為 bp時,預設使用段為ss。此規則適用於任何暫存器間接尋。
5.暫存器相對尋
運算元是暫存器中的內容加一偏移。如 mov ax, [bx+3],取出 bx中的內容,加3後在適當段中取出實體地址,取出實際內容放入ax中。也可寫為 mov ax, 3+[bx] 。
學習筆記 組合語言5
對於 bx bx 和記憶體單元的描述 要完整的描述乙個記憶體單元,需要兩種資訊 記憶體單元的位址 記憶體單元的長度 bx 也表示乙個記憶體單元,它的偏移位址在bx中,段位址在ds中 中可以是值也可以是暫存器 定義乙個描述性符號 來表示乙個暫存器或乙個記憶體單元 直接用數值要寫實體地址,20位 二進位...
彙編學習 5
1.統計字串長度,將結果按十六進製制字串格式輸出 要求 使用重複字首和條件設定指令 char s 23 81 char len 81 printf s scanf s s 23 asm printf s的長度為 十六進製制 s h n len 子程式s len 功能 獲取字串長度 返回值 eax 字...
8086彙編學習筆記5 偽指令
偽指令不同於彙編指令,彙編指令有對應cpu能夠識別的機器碼,而偽指令主由編譯器識別。1.段宣告 段名 segment 段名 ends segment和ends是用來定義乙個段,segment是乙個段的開始,ends是乙個段的結束,乙個段必須有個名稱來標識。2.匯程式設計序結束標記end end是乙個...