Q:如何將一個數(shù)據(jù)(如段地址)送入段寄存器昆婿?
A:用一個通用寄存器進行中轉菲饼,如bx吵护,因為8086cpu不支持將數(shù)據(jù)直接送入段寄存器。
寄存器與內存之間的通信
8086CPU自動獲取ds中的數(shù)據(jù)作為內存的段地址达布。
Q:"add ds,ax" 為什么報錯团甲?
A:段寄存器不能直接進行加法運算?
數(shù)據(jù)段
用ds存放數(shù)據(jù)段的段地址黍聂,例如:
訪問數(shù)據(jù)段
小結
棧
8086CPU提供入棧和出棧指令躺苦,最基本的兩個是 PUSH(入棧)和POP(出棧)。比如产还,push ax表示將寄存器ax 中的數(shù)據(jù)送入棧中匹厘,pop ax表示從棧頂取出數(shù)據(jù)送入 ax。8086CPU的入棧和出棧操作都是以字為單位進行的脐区。
棧頂?shù)亩蔚刂罚篠S(stack segment)
棧的偏移地址:SP(stack pointer)
任意時刻 SS:SP指向棧頂元素
push指令執(zhí)行過程
pop指令執(zhí)行過程
8086CPU不保證棧溢出愈诚!要自己注意!
Q:CS:IP處取值執(zhí)行,如何判斷取多少的內存?
棧的總結
Q:棧最大容量是多少炕柔?
棧的最大容量
棧段最大是64KB = 0:FFFFH = 2^16B
如果繼續(xù)壓棧酌泰,則棧頂會循環(huán),覆蓋原來的內容汗唱。
段的總結
實驗
中斷機制
Debug的T命令在執(zhí)行完修改寄存器SS的指令后宫莱,下一條指令也緊接著執(zhí)行(如修改SP的指令)丈攒。
觸發(fā)中斷會改變棧中的內容