彙編第三章總結
1.字資料在記憶體中的儲存
存取原則:高 高 低 低 即:字資料的低位位元組存放在低位記憶體單元;高位存放在高位位元組存放在高地址記憶體單元;取低地址記憶體單位作為字資料地址。
2.資料在記憶體和cpu之間的傳送
DS暫存器:資料段段暫存器,用於存放資料段的【段地址】
將一段記憶體用作資料段,是程式設計時的一種安排;在mov add sub 等彙編指令中,訪問記憶體單元時,預設情況下指的是資料段。mov ax,【1】;ax<—((ds)*16+1)
3.彙編指令mov,add,sub
mov 指令形式:mov 暫存器,常數 mov ax,1000H ;mov 暫存器,暫存器 mov bx,ax ;mov 暫存器,記憶體單元 mov ax 【1】;mov 暫存器,段暫存器 mov ax,ds;mov 記憶體單元,常數 mov 【1】,byte ptr 3;mov 記憶體單元,暫存器 mov 【1】,ax; mov 記憶體單元 暫存器 mov 【1】,ds; mov 段暫存器,暫存器 mov ds,ax;mov 段暫存器,記憶體單元 mov ds,【1】
(1)兩個操作的長度一致(2)關於常數,不能作為第一個運算元,做第二個運算元時如果最高位是十六進位制的a~f或者A~F前面要加零(3)兩個記憶體單元之間不能直接傳送資料(4)不能使用mov指令修改CS和IP的值(5)關於段暫存器 兩個斷就成年期直接不能直接傳送;不能把常數送到段暫存器
add指令形式:add 暫存器,常數 add ax,1000H ;add 暫存器 暫存器,add bx,ax;add 暫存器,記憶體單元,add ax,【1】;add 記憶體單元 常數 ,add 【1】,byte ptr 3;add 記憶體單元 暫存器,add 【1】,ax
(1)add指令的運算元不能同時是記憶體單元(2)add指令的運算元不能是段暫存器
sub指令:sub 暫存器,常數 sub ax,1000H;sub暫存器,暫存器 sub bx,ax;sub暫存器,記憶體單元 , sub ax,【1】;sub 記憶體單元,常數 , sub 【1】,byte ptr 3;sub 記憶體單元,暫存器 sub 【1】,ax
(1)兩個記憶體單元不能直接使用sub指令相減(2)sub指令的操作不能是段暫存器
4.棧
是一個邏輯上的概念,可以將一段記憶體空間當作棧來使用
特性:後進先出;兩個概念:棧底棧頂;兩個操作:出棧入棧;一個約定:8086中棧以字為存取單元
棧頂:最後入棧的字資料所對應的地址單元;棧底:固定的一端,棧區最高地址單元的前一個單元
入棧:把資料存入棧;出棧:把棧取出資料
入棧操作分析:1126H存入棧區
第一步:棧頂上移兩個單元,即棧頂-2—>棧頂;第二步存入資料
出棧操作分析:從棧中取出一個字資料給AX
第一步:取出字資料5020H—>AX;第二步:棧頂下移兩個單元,即:棧頂+2—>棧頂
與棧相關的暫存器SS和SP
ss:棧段段暫存器,用於存放棧段的段地址
sp:棧指標暫存器,用於存放棧頂的偏移地址
ss:sp對應的實體地址是棧頂的實體地址 (ss)*16+(sp)—>棧頂的實體地址
棧操作指令:push和pop
指令形式:push ax 棧<—ax;pop ax ax<—棧 push 【0】 棧<—ds:0對應的記憶體單元字資料 ;pop【0】 ds:0對應的記憶體單元<—棧;push ds 棧<—ds ;pop ds ds<—棧
彙編指令:push 暫存器 將暫存器植入棧;pop 暫存器 用暫存器儲存出棧資料;push記憶體單元 將記憶體單元內容入棧;pop 記憶體單元 用記憶體單元儲存出棧資料;push 段暫存器 江段暫存器植入棧;pop 段暫存器 用段暫存器儲存出棧資料
在posh記憶體單元和pop記憶體單元中,指令中只需給出【偏移地址】預設地址在DS中。
對8086cpu而言,push和pop的操作:入棧和出棧均以字為單位;操作物件不能是常數;pop段暫存器中,段暫存器不能是cs和ss;
利用棧後入先出特性,使用push和pop指令可以完成一些特殊處理
pop ss;x
;ss<—(ss:sp)
;sp<—(sp)+2
棧頂超界;當棧慢的時候,在使用push指令入棧;當棧空的時候,在使用pop指令出棧;