三章 彙編知識整理之暫存器(記憶體訪問)

2021-10-08 20:14:55 字數 1440 閱讀 2702

乙個字16位,乙個記憶體單元8位,儲存乙個字需要兩個記憶體單元,並且這兩個單元一般是連續的。高8位存放高位位元組,低8位存放低位位元組。

字單元:存放乙個字型資料的記憶體單位,由兩個位址連續的記憶體單元組成。

ds是段暫存器,通常來存放我們要讀取的資料的段位址,[xx],表示偏移位址為xx的記憶體單元,有了段位址還有偏移位址,我們就可以得到記憶體單元具體的位址,從而進行資料訪問。

段暫存器不能像通用暫存器那樣操作運算,mov不涉及運算,只是傳送指令。

一種具有特殊訪問形式的儲存空間,也就是lifo(last in first out)。

如圖所示:

我們知道,計算機只認識1和0,不知道0和1組成的一些列數字哪一些是指令,哪一些是資料。為了解決這個問題,我們規定,cs:ip表示的位址指向指令,ds:[xx] 指向的位址表示資料。那麼,我們可以推測,應該存在指向棧的段暫存器還有儲存其偏移位址的暫存器。

ss和sp

入棧:push 出棧:pop

在cpu中,用16位的暫存器來儲存乙個字,剛好乙個字是16位。

假設棧裡面是空的,ss:sp 指向棧頂空間。

push ax(暫存器) //把ax的送入棧中

pop bx(暫存器) //把棧裡面的元送到bx中

push的過程。

棧的初始化狀態:

ss:1000 h //h表示16進製制

例如:push ax

1.sp = sp -2 //減2的原因:乙個記憶體單元是8位,兩個記憶體單元就是16位,而出棧是以乙個字的單位來進行的。

2.將ax裡面的資料送到棧裡面。

每進行一次push運算,sp自己會減少二。

pop的過程

和push反過來。

例如:pop ax

1.先把棧中的資料送到ax裡面,棧裡面的元素是沒有變化的,送到ax裡面的資料是複製過去了,不是剪下過去的。

2.然後在sp = sp + 2。

初始化,自定義棧

將10000h~1000f當作棧的空間,棧的空間是空的。

mov ax,2000

mov ss,ax //把暫存器ax的值送到ss裡面,不能直接把資料傳遞到ss裡面。

mov sp,010 //設定sp的初值。

debug的t命令在執行修改暫存器ss的指令時,下一條指令也緊接著被執行。

彙編 第三章 暫存器(記憶體訪問)

之前第二章講的重點是理解8086位址的組成方式,相關的暫存器以及6個命令的使用 r,d,a,e,t,u 第三章繼續從訪問記憶體的角度學習暫存器。3.1 記憶體中字的儲存 乙個字由兩個位元組組成,而乙個位元組佔乙個儲存單元,所以用16位暫存器來儲存乙個字 具體儲存採用小端法,乙個字單元由連續的兩個記憶...

一 二章 彙編知識整理之基礎知識,暫存器

機器語言其實就是和機器交流的語言,是機器指令的集合,機器指令可以控制計算機的一系列的命令。它是一系列二進位制語言,計算機將其轉化為一系列高低電平,來驅動計算機的電器器件,從而達到某些功能。由於機器語言是一堆二進位制語言,可讀性非常差,所以出現了組合語言,目的是為了更好的閱讀還有書寫 1.彙編指令 機...

《組合語言》第三章 暫存器(記憶體訪問)

在記憶體單元中,位址高的是高位,位址低的是低位。我們在讀取記憶體時喜歡從0開始讀,但我們在讀取數字的時候一定不喜歡從最低位開始讀,所以如果這個分不清,那麼是這個是相當 痛苦的 所以,乙個資料如果確定是乙個字,那麼直接從高位開始讀取,這樣更好理解。如果直接將記憶體單元送入暫存器中,那麼預設送入乙個字,...