1.要完整的描述乙個記憶體單元,需要兩種資訊:1.記憶體單元的位址;2.記憶體單元的長度(型別)。
2.「()」表示乙個暫存器或乙個記憶體單元中的內容。如:(ax)表示ax中的內容。
「()」中的元素可以有3種型別:1.暫存器名;2.段暫存器名;3.記憶體單元的實體地址(乙個20位的資料)。
3.約定符號idata表示常量
用idata表示常量。
3.[bx]
mov ax,[bx]
功能:bx中存放的資料作為乙個偏移位址ea,段位址sa預設在ds中,將sa:ea處的資料送入ax中。即:(ax)=((ds)*16+(bx)).
mov [bx],ax
功能:bx中存放的資料作為乙個偏移位址ea,段位址sa預設在ds中,將ax中的資料送入記憶體sa:ea處。即:((ds)*16+(bx)=(ax)).
4.loop指令
loop指令的格式:loop標號,cpu執行loop指令,要進行兩步操作,
(1).(cx)=(cx)-1;
(2).判斷cx中的值,不為零則轉至標號處執行程式,如果為零則轉向下執行。
可以看出:cx中的值影響loop指令的執行結果。通常我們用loop指令來實現迴圈功能,cx中存放迴圈次數。
5.debug和彙編編譯器masm對指令的不同處理
(1).debug中,mov ax,[0]表示將ds:0處的資料送入ax中。
(2).在匯程式設計序中,「mov ax,[0]」被編譯器當作指令「mov ax,0」處理。
即:[idata]在debug時,debug將它解釋為乙個記憶體單元,「idata」是記憶體單元的位址偏移;而編譯器將「[idata]」解釋為「idata」。在源程式中,要訪問記憶體單元,可以將偏移位址先送入bx暫存器中,用[bx]的方式來訪問記憶體單元。又或者在「」裡面用乙個常量idata直接給出記憶體單元的位址偏移位址,就要在「」的前面顯式的給出段位址所在的暫存器,如:mov al,ds:[0]。
6.段字首
指令「mov ax,[bx]」中,記憶體單元的偏移位址由bx給出,而段位址預設在ds中。我們可以在訪問記憶體單元的指令中顯式的給出記憶體單元的段位址所在的段暫存器。
(1).mov ax,ds:[bx]
將乙個記憶體單元的內容送入ax,這個記憶體單元的長度為2個位元組(字單元),存放在乙個字,偏移位址在bx中,段位址在ds中。
(2).mov ax,cs:[bx]
將乙個記憶體單元的內容送入ax,這個記憶體單元的長度為2個位元組(字單元),存放在乙個字,偏移位址在bx中,段位址在cs中。
…… 7.一段安全的空間
在8086模式中,隨意向一段記憶體空間寫入內容是很危險的,因為這段空間中可能存在重要的系統資料或**。
(1).我們需要直接向一段記憶體中寫入內容:
(2).這段空間不應存放系統或其他程式的資料或**,否則寫入操作可能引發錯誤。
(3).dos方式下,一般情況,0:200~0:2ff空間中沒有系統或其他程式的資料或**。
(4).以後可以直接使用0:200~0:2ff這段空間。
組合語言 筆記 BX 和loop指令
符號mov ax,bx inc bx 功能 bx中的內容加1 loop指令的格式為 loop 標號 cpu執行loop指令時,進行兩步操作 程式設計計算2 12 assume cs code code segment mov ax,2 mov cx,11 s add ax,ax loop s mov...
組合語言04 BX 和loop指令
整理自fishcc論壇課件 首先展示乙個新的程式 assume cs codesg codesg segment start mov ax,2000h mov ds,ax mov al,0 mov bl,1 mov cl,2 mov dl,3 mov ax,4c00h int 21h codesg ...
組合語言 bx 和loop指令和多個段
要完成描述乙個記憶體單元,需要兩種資訊 記憶體單元的長度 型別 loop指令和cx相配合實現迴圈功能的,cx中存放迴圈的次數。loop指令的格式是 loop 標號,cpu執行loop指令的時候,要進行兩步操作 mov cx,迴圈次數 s 迴圈執行的程式段 loop s在8086模式限制下如果資料,棧...