想要完整的描述一個內存單元,須要兩個條件:1.內存單元的地址 2.內存單元的長度(類型)。
首先講一下[0]的含義,[0]表示的內存單元,偏移地址爲一個當即數0,段地址默認保存在DS寄存器中(以前的文章中講到過,經過DS寄存器和偏移地址(ds:[0])就能夠肯定內存中的一個地址)。
說完[0]再回頭來講[bx],[bx]表示的依然是偏移地址,可是它不是一個當即數了,而是保存在一個寄存器中,段地址仍是默認保存在DS寄存器中。編程
loop指令的格式是:loop 標號,CPU執行loop指令的時候,要進行兩部操做,第一步:cx = cx - 1 第二步:判斷cx中的值,不爲零則轉至標號處執行程序,若是爲零則向下執行。從這兩步咱們能夠看出loop指令的執行結果受到cx中值的影響,一般狀況下,咱們使用loop指令來實現循環功能,cx中存放loop指令須要循環的次數。框架
在彙編語言中,包含兩種指令,一種是彙編指令,另外一種是僞指令,彙編指令是對應着機器碼,能夠直接被編譯爲機器指令被CPU執行,而僞指令不會被CPU執行,它是用來讓編譯器進行相關的編譯工做。
(1)segment
segnment和ends是一對成對使用的僞指令,用於定義一個段,segnment用於聲明一個段開始,ends用於聲明一個段結束,使用格式爲:oop
段名 segnment 段名 ends
好比用codesg爲段名聲明一個用於存放數據的段:code
codesg segnment codesg ends
一個彙編程序由多個段造成,這些段用來存放代碼、數據或者看成棧空間使用,一個有意義的彙編程序至少要有一個段用於存放代碼。內存
(2)end
end指令是一個彙編程序的結束標記,編譯器在執行彙編程序的時候若是碰到end就結束對源程序的編譯。編譯器
(3)assume
assume是假設的意思,它用於假設某一個寄存器和程序中的某一段相關。好比:
assume cs:codesg
就是將代碼段codesg和CPU的段寄存器cs聯繫在一塊兒。編譯
再來說講標號,除了彙編指令和僞指令之外,還有標號,一個標號指代一個地址。好比codesg segment,這個codesg最終將被處理爲一個段的段地址。循環
接着來分析一段求2的10次方彙編程序程序
assume cs:code code segment mov ax,2 mov cx,9 s: add ax,ax loop s mov ax,4c00h int 21h code ends end
分析:
先來看一下總體框架數據
接着分析中間部分
最後的 mov ax,4c00h和 int 21h暫時先無論 這樣就將2的10次方的值保存在ax中了。