彙編3-寄存器

3.1內存中字的存儲

任何兩個地址連續的內存單元,N號和N+1號單元,可以將它們看成兩個內存單元,也可以看成一個地址爲N的字單元中的高位字節單元和低位字節單元。

3.2段地址寄存器
DS是段地址寄存器,裏面存儲的是16位的數據,代表當前段地址。
不能直接通過mov指令將數據存入DS中,mov ds,1000H這樣寫是錯誤的。只能先把1000H存入通用寄存器mov BX,1000H 然後 mov DS,BX。只能把另一個寄存器中的數據寫入到DS中。
DS和CS的區別:DS保存的是數據段基地址,CS保存的是代碼段基地址。而且除了跳轉或其他分支指令之外,無法修改CS寄存器的內容。DS寄存器內容只能傳送,不能運算。

3.3mov指令的對象還能是內存單元
mov AX,[0] 1000:0處的字型數據送入AX,是傳入字型數據還是字節型數據取決於傳入的寄存器,如果是AL或AH則傳入的字節型數據。

3.4代碼段
我們可以將一組長度爲N(N<=64K)、地址連續、起始地址爲16的倍數的內存單元當做專門存儲數據的內存空間、從而定義一個數據段。
比如用 123B0H—123B9H這段空間來存放數據
段地址:123BH(找這個段地址中的內存單元要給DS賦值爲123BH)
長度:10字節

3.5棧
8086cpu提供出棧和入棧的基本指令:
push(入棧)
pop(出棧)
push ax:將寄存器ax中的數據送入棧中
pop ax:從棧頂取出數據送入ax
8086cpu的入棧和出棧操作都是以字爲單位進行的

段寄存器SS :存放棧頂的段地址
寄存器SP :存放棧頂的偏移地址
任意時刻,SS,SP指向棧頂元素

將10000H—1000FH這段空間當做棧的時候
SS=1000H,棧的空間大小爲16字節,棧的最底部字單元地址爲1000:000E。
任意時刻SS:SP指向棧頂元素,當佔中只有一個元素的時候SS=1000H,SP=000EH(入棧是SP先-2,再入棧)。當棧爲空時,佔中沒有元素,也不存在棧頂元素。此時SS:SP只能指向棧最底部單元下面的單元,該單元的偏移地址爲棧最底部的子單元的偏移地址+2。棧最底部字單元地址爲1000:000E,所以棧空時,SP==0010H。

我們將硬盤格式化的時候只是初始化了棧的指針,並沒有真的把數據情況,所以是可以恢復的。這裏執行了pop指令後,原來內存單元中的數據還是存在的。

3.6push和pop的格式
格式1:push寄存器:將一個寄存器的數據入棧
pop寄存器:用一個寄存器接受出棧的數據

格式2:push段寄存器:講一個段寄存器中的數據入棧
pop段寄存器:用一個段寄存器接受出棧數據(只有jmp能操作cs,而且其他段寄存器不能用mov 段寄存器 ,數據 的形式賦值 cs寄存器只能由系統設置)

格式3:push內存單元 push[0]
pop內存單元 pop[0]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章