title: 彙編筆記_第八章
date: 2018-12-27 20:04:33
tags:
組合語言中用三種概念來表達資料的位置:立即數(idata)、暫存器、段位址(sa)和偏移位址(ea);
定址方式
含義名稱
常用格式舉例
[idata]
sa=(ds);ea=idata
直接定址
[idata]
[bx]
[si]
[di]
[bp]
sa=(ds);ea=(bx)
sa=(ds);ea=(si)
sa=(ds);ea=(di)
sa=(ss);ea=(bp)
暫存器間接定址
[bx]
[bx+idata]
[si+idata]
[di+idata]
[bp+idata]
sa=(ds);ea=(bx)+idata
sa=(ds);ea=(si)+idata
sa=(ds);ea=(di)+idata
sa=(ss);ea=(bp)+idata
暫存器相對定址
用於結構體:[bx].idata;
用於陣列:idata[si],idata[di];
用於二維陣列:[bx][idata]
[bx+si]
[bx+di]
[bp+si]
[bp+di]
sa=(ds);ea=(bx)+(si)
sa=(ds);ea=(bx)+(di)
sa=(ss);ea=(bp)+(si)
sa=(ss);ea=(bp)+(di)
基址變址定址
用於二維陣列:[bx][si]
[bx+si+idata]
[bx+di+idata]
[bp+si+idata]
[bp+di+idata]
sa=(ds);ea=(bx)+(si)+idata
sa=(ds);ea=(bx)+(di)+idata
sa=(ss);ea=(bp)+(si)+idata
sa=(ss);ea=(bp)+(di)+idata
相對基址變址定址
用於**(結構)中的資料項:[bx].idata[si]
用於二位陣列:idata[bx][si]
暫存器指明
mov al,ds:[0] //按位元組操作
mov ax,ds:[0] //按字操作
用操作符x ptr指明(x=word/byte)add word ptr [bx],2 //按字操作
mov byte ptr ds:[0],1 //按位元組操作
其他方式
有些指令預設是訪問字單元還是位元組單元,例如:push 指令只進行字操作;
一般來說,可以用[bx+idata+si]
的方式來訪問結構體中的資料;
dd是用來定義dword(double word雙字)型資料的;
dup的使用格式:
db 重複的次數 dup (重複的位元組型資料)
dw 重複的次數 dup (重複的字型資料)
dd 重複的次數 dup (重複的雙字資料)
eg:db 3 dup (0,1,2)
相當於:
db 0,1,2,0,1,2,0,1,2
(end)
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
c primer Plus第八章筆記
該書應從8章之後開始學習 現在開始第8章 p199 字元輸入輸出 緩衝區 是乙個存放內容的臨時儲存區域 為什麼要設定緩衝區 一 將若干個字元作為乙個塊進行傳輸比逐個傳送這些字元耗時少。二 如果輸入了乙個錯的字元,可以用鍵盤的更正功能進行修改。當按下回車鍵的時候就傳送輸入的字元。但是,互動性的程式需要...