1.ds+偏移位址表示記憶體單元;
2.描述乙個記憶體單元需要兩種資訊:(1)記憶體單元的位址;(2)記憶體單元的長度(資料型別);
3.定義描述性符號「()」來表示乙個暫存器或乙個記憶體單元中的內容,「()」中的元素可以有3種型別:a.暫存器名,b.段暫存器名,c.記憶體單元的實體地址(乙個20位的資料),一般「()」內的資料型別有兩種,具體是哪一種型別由暫存器或具體的運算決定;
4.一般情況下,常量必須解除安裝「」中;
5.loop指令執行的兩個基本步驟:先對cx的值減去1,然後判定cx的值是不是為0,如果為0則向下繼續執行,不為0則跳轉至標號處;
6.在本書的組合語言之中,一般乙個標號代表乙個位址;
7.cx和loop指令相互配合實現迴圈功能的3個要點:
(1)在cx中存放迴圈次數;
(2)loop指令中的標號所標識的位址要在前面;
(3)要迴圈執行的程式段,要寫在標號和loop指令的中間。
8.關於乘法的一點小學階段的理解:123*236,相當於12
3連續相加236次,所以程式設計的時候用的是add ax,123;
9.組合語言之中,資料不能以字母開頭,通常在字幕前面加0;
10.存放累加資料的時候一般考慮兩個問題:是否溢位和資料長度是否匹配,如果不匹配需要哪一種暫存器來中轉;
11.關於debug中p指令和g指令的說明,p指令通常一次性執行loop中的內容,而g指令可以看作類似於goto的跳轉指令;
12.由於彙編的源程式和debug對於""的數字的處理不同,因此為了統一,通常先將資料放入乙個暫存器中,例如bx中,然後利用[bx]來訪問記憶體單元;
例如:mov al,[0] 與mov al,0相同
mov al,ds:[0] 將(al)=((ds)*16+0)的資料送人記憶體中
mov al,[bx] 將(al)=((ds)*16+bx)的資料送入al中
mov al,ds:[bx] 與mov al,[bx]相同。
13.關於段字首的說明,例如下面內容:
mov ax,ds:[bx]
mov ax,cs:[bx]
mov ax,ss:[bx]
mov ax,es:[bx]
mov ax,ss:[0]
mov ax,cs:[0]
例如""前面的"ds","es","ss","cs"就是段字首,一般用來明確的指向乙個記憶體單元。
14.寫指令的時候盡量用一段安全的記憶體空間,具體做法是使用前可以用d命令檢視該段記憶體空間是否為0,否則有可能引起除錯出錯;
實驗41.程式設計,向記憶體0:200-0:23f依次傳送資料0~63(3fh)。
assume cs:code
code segment
mov ax,0
mov ds,ax
mov bx,200h
mov cx,64
mov al,0
s:mov [bx],al
inc bx
inc al
loop s
mov ax,4c00h
int 21h
code ends
end2.程式設計,向記憶體0:200-0:23f依次傳送資料0~63(3fh),只能使用9條指令。
assume cs:code
code segment
mov ax,20h//換一種方法寫段的起位址,為的是[bx]直接可以拿來用,而不用再次
賦值或者清零
mov ds,a
xmov bx,0
mov cx,64
s:mov [bx],bl//用bl給bx賦值,可以看做是值的傳遞
inc bx//換成bl也可以
loop s
mov ax,4c00h
int 21h
code ends
end3.補全下面的程式,其功能是將
「mov ax,4c00」之前的指令複製到記憶體
0:200處。
assume cs:code
code segment
mov ax,cs//由於複製的是記憶體中的資料,而cs:ip
指示了記憶體中的
位址,所以將cs的值傳遞給ax。
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,17h//前面的源程式在記憶體中總共佔了23位元組,這個是將源程式
編譯連線之
後用debug裡面的u命令檢視即可
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
王爽 彙編第五章
記憶體單元資料 1記憶體單元位址,2記憶體單元的長度 型別 bx 模擬 0 loop 表示迴圈的意思 的解釋 20000h 表示記憶體20000h單元的內容,中的記憶體單元的位址為實體地址 ds 16 20000h對應的實體地址中的內容 的三種型別 1.暫存器名,2 段暫存器名,3 記憶體單元的實體...
組合語言 王爽 學習筆記
1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...
組合語言 王爽 筆記
關於pop的知識 1.出棧後,ss sp指向新的棧頂,pop操作前的棧頂元素中的資料仍然存在,但是,它已不再棧中 2.ss和sp只記錄了棧頂的位址,依靠ss和sp可以保證在入棧和出棧時找到棧頂 3.當棧滿的時候再次使用push指令入棧,棧空的時候再次使用pop指令出棧,都將發生棧頂越界問題,它是非常...