3.《匯編語言》-王爽第三版學習筆記 寄存器(內(nèi)存訪問)

  1. 內(nèi)存中的字存儲
  • 字單元
    存放一個字型數(shù)據(jù)(16位)的內(nèi)存單元匪凉,由兩個地址梁旭的內(nèi)存單元組成蔑赘。高地址存高位字節(jié)式矫,低地址存放地位字節(jié)乡摹。
  • N地址字單元
    起始地址為N的字單元。比如一個字單元由2采转,3兩個內(nèi)存單元組成趟卸,則這個字單元的起始地址為2,我們可以說這是2地址的字單元氏义。
  • Example:


    7FCA58B7-98C0-46C1-8850-7A3B59E22C4A.png

    對于圖中:
    (1)0地址單元中存放的字節(jié)型數(shù)據(jù)是 20H
    (2)0地址字單元中存放的字型數(shù)據(jù) 4E20H
    (3)2地址單元中存放的字節(jié)型數(shù)據(jù)是 12H
    (4)2地址字單元中存放的字型數(shù)據(jù) 0012H
    (5)1地址字單元中存放的字型數(shù)據(jù) 124EH

  1. DS 和 [address]
  • DS 8086CPU中的段寄存器,用來存儲需要訪問數(shù)據(jù)的地址段
  • [address] 表示一個內(nèi)存單元图云,其中address表示內(nèi)存單元的偏移地址
  • 內(nèi)存單元的地址 = SA(ds中的數(shù)據(jù)為內(nèi)存單元的段地址) * 16 + EA([address]偏移地址)
  • 8086CPU不支持將數(shù)據(jù)直接送入段寄存器的操作惯悠。所以只能用寄存器進行中轉(zhuǎn)。
  • Example 1 將10000H(1000:0) 中的數(shù)據(jù)讀到al中
mov bx,1000H
mov ds,bx
mov al,[0]
  • Example 2 將 al 中的數(shù)據(jù)存入內(nèi)存單元10000H(1000:0)中
mov bx,1000H
mov ds,bx
mov [0],al
  1. 字的傳送
    8086CPU是16位結(jié)構(gòu)竣况,有16根數(shù)據(jù)線克婶,可以一次傳送16位的數(shù)據(jù)(一個字),所以只要在mov指令中給出16位的寄存器就可以進行16位數(shù)據(jù)的傳送了丹泉。

  2. mov add sub指令

mov  寄存器情萤,數(shù)據(jù)     // mov ax,8
mov  寄存器,寄存器     // mov ax,bx
mov  寄存器摹恨,內(nèi)存單元     // mov ax,[0]
mov  內(nèi)存單元筋岛,寄存器     // mov [0],ax
mov  段寄存器,寄存器     // mov ds,ax
mov 寄存器, 段寄存器     // mov ax, ds
mov 內(nèi)存單元, 段寄存器     // mov [0], ds
mov 段寄存器, 內(nèi)存單元     // mov ds, [0]
add  寄存器晒哄,數(shù)據(jù)     // add ax,8
add  寄存器睁宰,寄存器     // add ax,bx
add  寄存器,內(nèi)存單元     // add ax,[0]
add  內(nèi)存單元寝凌,寄存器     // add [0],ax
sub  寄存器柒傻,數(shù)據(jù)     // sub ax,8
sub  寄存器,寄存器     // sub ax,bx
sub  寄存器较木,內(nèi)存單元     // sub ax,[0]
sub  內(nèi)存單元红符,寄存器     // sub [0],ax
  1. 數(shù)據(jù)段
    編程時的一種安排,將一組長度為N(N<=64KB)伐债,地址連續(xù)预侯,起始地址為16倍數(shù)的內(nèi)存單元當作專門存儲數(shù)據(jù)的內(nèi)存空間。
  • Example 將123B0H ~ 123B9H 的內(nèi)存單元定義為數(shù)據(jù)段泳赋。
    (1)累加這個數(shù)據(jù)段中的前3個單元中的數(shù)據(jù)
mov ax,123BH
mov ds,ax
mov al,0
add al,[0]
add al,[1]
add al,[2]

(2)累加這個數(shù)據(jù)段中的前3個字型數(shù)據(jù)

mov ax,123BH
mov ds,ax
mov ax,0
add ax,[0]
add ax,[2]
add ax,[4]
  • 小結(jié)
    (1)字在內(nèi)存中存儲時雌桑,要用兩個地址連續(xù)的內(nèi)存單元存放,字的地位放在低地址單元祖今,高位放在高地址單元校坑。
    (2)用 mov 訪問內(nèi)存單元拣技,可以再mov中只給出偏移地址,段地址默認在段寄存器DS中耍目。
    (3)[address]表示一個偏移地址為 address的內(nèi)存單元
    (4)在內(nèi)存和寄存器之間傳送字型數(shù)據(jù)時膏斤,高地址單元和高8位寄存器,低地址單元和低8位寄存器相對應(yīng)
    (5)mov邪驮,add莫辨,sub 是具有兩個操作對象的指令,jmp是具有一個操作對象的指令

  • 練習

(1)在Debug中毅访, 用 "d 0:0 1f" 查看內(nèi)存沮榜,結(jié)果如下:
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序執(zhí)行前, AX = 0喻粹, BX = 0蟆融, 寫出相關(guān)寄存器中的值
mov ax 1
mov ds ax         // ds = 1
mov ax,[0000]   // AX = 2662H
mov bx,[0001]   // BX = E626H
mov ax,bx         // AX = E626H
mov ax,[0000]   // AX = 2662H
mov bx,[0002]   // BX = D6E6H
add ax,bx          // AX = FD48H
add ax,[0004]   // AX = 2C14H
mov ax,0          // AX = 0H
mov al,[0002]   // AX = 00E6H
mov bx,0          // BX = 0H
mov bl,[000C]   // BX = 0026H
add al,bl           // AX = 000CH
AF017D58-B4BA-4B5C-9652-BE2D971EA324.png
執(zhí)行指令如下:
mov ax,6622H
jmp 0ff0:0100
mov ax,2000H
mov ds,ax
mov ax,[0008]
mov ax,[0002]
15C2843E-C084-4C73-9C72-449BAFB398F5.png

  1. 一種數(shù)據(jù)結(jié)構(gòu)。操作規(guī)則 LIFO(Last In First Out 后進先出)

7.CPU提供的棧機制

PUSH ax  // 表示將寄存器ax中的數(shù)據(jù)送入棧中
POP ax  //表示取出棧頂數(shù)據(jù)存入寄存器ax中
  • 8086CPU入棧和出棧都是以字為單位進行的守呜。
  • 8086CPU中 段寄存器 SS 和寄存器 SP型酥,段地址存放在SS中,偏移地址存放在SP中查乒。任意時刻弥喉,SS:SP 指向棧頂元素, PUSH POP執(zhí)行時玛迄,CPU從中取出棧頂?shù)刂?/p>

    8FD03AE2-A6A2-43C9-8B70-564517009023.png
  • 8086CPU入棧時由境,棧頂從高地址向低地址方向增長。


    D9DFF7D5-0FC9-4F0C-B7D7-AA03245D344B.png
  1. 棧頂超界問題
    8086CPU只知道棧頂在何處(由SS:SP知識)憔晒,而不知道安排的椩逡蓿空間有多大,所以在編程的時候自己操作拒担,根據(jù)可能用到的最大空間來安排棧的大小嘹屯,執(zhí)行出棧入棧的時候要注意可能導(dǎo)致棧超界問題。

9.PUSH POP指令

push 寄存器    //將一個寄存器中的數(shù)據(jù)入棧
pop 寄存器    //出棧从撼,用一個寄存器中接受出棧的數(shù)據(jù)
push 段寄存器    //將一個段寄存器中的數(shù)據(jù)入棧
pop 段寄存器    //出棧州弟,用一個段寄存器中接受出棧的數(shù)據(jù)
push 內(nèi)存單元    //將一個內(nèi)存單元中的字入棧(注意:戰(zhàn)的操作以字為單位)
pop 內(nèi)存單元  //出棧,用一個內(nèi)存字單元接受出棧的數(shù)據(jù)
  • push pop等棧操作指令修改的只是SP低零,也就是說棧頂?shù)淖兓秶畲鬄?0~FFFFH
棧的綜述:
(1)8086CPU提供了棧操作機制婆翔,方案如下:
在SS,SP中存放棧頂?shù)亩蔚刂泛推频刂?提供入棧出棧指令掏婶,它們根據(jù)SS:SP指示的地址啃奴,按照棧的方向訪問內(nèi)存單元
(2)push指令執(zhí)行的操作步驟:1.SP=SP-2; 2.向SS:SP指向的字單元中送入數(shù)據(jù)
(3)pop指令執(zhí)行的操作步驟:1.從SS:SP指向的字單元中讀取數(shù)據(jù);2.SP=SP+2
(4)任意時刻雄妥,SS:SP 指向棧頂元素
(5)8086CPU只記錄棧頂最蕾,椧浪荩空間的大小我們要自己管理
(6)PUSH POP實質(zhì)上是一種內(nèi)存?zhèn)魉椭噶?
  1. 棧段
  • 數(shù)據(jù)段 段地址存放在 DS中,用mov add sub 等訪問內(nèi)存單元指令瘟则,CPU就將我們定義的數(shù)據(jù)段的內(nèi)容當做數(shù)據(jù)來訪問
  • 代碼段 段地址存放在 CS中黎炉,將段中的第一條指令的偏移地址放在IP中,這樣CPU就將執(zhí)行我們定義在代碼段中的命令
  • 棧段 段地址存放在 SS中醋拧,將棧頂單元的偏移地址放在SP中慷嗜,這樣CPU在需要進行棧操作的時候,比如執(zhí)行push丹壕,pop等指令庆械,就將我們定義的棧段當做棧空間來用菌赖。
  • Debug T命令在執(zhí)行修改寄存器SS的指令時干奢,下一條指令也緊接著被執(zhí)行。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盏袄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子薄啥,更是在濱河造成了極大的恐慌辕羽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垄惧,死亡現(xiàn)場離奇詭異刁愿,居然都是意外死亡,警方通過查閱死者的電腦和手機到逊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門铣口,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奠货,“玉大人抬虽,你說我怎么就攤上這事∑梁洌” “怎么了铜靶?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵叔遂,是天一觀的道長。 經(jīng)常有香客問我争剿,道長已艰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任蚕苇,我火速辦了婚禮哩掺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涩笤。我一直安慰自己嚼吞,他們只是感情好盒件,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著誊薄,像睡著了一般履恩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呢蔫,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天切心,我揣著相機與錄音,去河邊找鬼片吊。 笑死绽昏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的俏脊。 我是一名探鬼主播全谤,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爷贫!你這毒婦竟也來了认然?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漫萄,失蹤者是張志新(化名)和其女友劉穎卷员,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾务,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡毕骡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩瘦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未巫。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖启昧,靈堂內(nèi)的尸體忽然破棺而出叙凡,到底是詐尸還是另有隱情,我是刑警寧澤密末,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布狭姨,位于F島的核電站,受9級特大地震影響苏遥,放射性物質(zhì)發(fā)生泄漏饼拍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一田炭、第九天 我趴在偏房一處隱蔽的房頂上張望师抄。 院中可真熱鬧,春花似錦教硫、人聲如沸叨吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茶鉴。三九已至锋玲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涵叮,已是汗流浹背惭蹂。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留割粮,地道東北人盾碗。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像舀瓢,于是被迫代替她去往敵國和親廷雅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容