在學習16位匯編指令之前我們先來了解下匯編語言的特征:
匯編語言特點:與機器相關,執行效率高,調試復雜。
匯編語言優缺點:匯編語言和高級語言混合編寫,形成互補。
匯編語言數據表示類型:二進制(B),八進制(Q),十進制(D),十六進制(H)。
BCD編碼:指用二進制來表示十進制數。
CPU資源和存儲器:指通用寄存器,標志寄存器,指令寄存器。
EAX,累加
ECX,循環計數
EDX,數據寄存器
EBX,基址寄存器
ESP,棧頂
EBP,棧底
ESI,擴展源指針
EDI,擴展目的指針
EIP,指令指針
SI(16位),變址寄存器,常用于存儲器尋址時提供地址,源操作數指針
DI(16位),變址寄存器,常用于存儲器尋址時提供地址,目的操作數指針
Flag寄存器
進位CF,CF=1,運算結果表示有進位或者借位
零標志ZF,ZF=1,表示結果為0
符號標志SF,SF=1,運算結果最高位為1
奇偶標志PF,PF=1,運算結果最低8位1的個數為0或者偶數(奇)
溢出標志OF,OF=1,算數運算結果有溢出
輔助進位AF,AF=1,運算時有進位或借位
方向標志DF,DF=1,地址自動減少,用于串操作,控制地址變化方向
中斷標志IF,IF=1,允許中斷,用于控制外部可屏蔽中斷是否可處理
陷阱標志TF,TF=1,處理器處于單步執行指令(處理器每執行一條指令便產生一個內部中斷,可以對程序進行單步調試)
16位匯編物理地址與邏輯地址轉換:邏輯地址<< 4位 + 偏移 = 物理地址(可以有多個邏輯地址)
CS(代碼段),表示代碼段的起始地址
SS(堆棧段),表示堆棧段的起始地址
DS(數據段),表示數據段的起始地址
ES(附加段),表示附加段的起始地址,附加段是數據段,用于數據保存,串操作指令將附加段作為其目的操作數的存放區域
段前綴CS: ;使用代碼段
段前綴SS: ;使用棧段
段前綴DS: ;使用數據段
段前綴ES: ;使用附加段
默認訪問DS,使用BP則訪問主存(SS)
1M最多可分64K個段,最少能分16個段
8086有8個8位通用寄存器(al,ah…),8個16位通用寄存器(ax,bx…),6個狀態標志(CF,ZF,SF,PF,OF,AF)和3個控制標志(DF,IF,TF),4個段寄存器,4種邏輯段,4個段前綴指令
立即數尋址,mov ah,0x01
寄存器尋址,mov ah,[bh]
直接尋址,mov AX,ES:[2000H]
寄存器間接尋址,mov AX,[SI]
寄存器相對尋址,mov AX,[DI+05]
基址變址尋址,mov AX,[BX(BP)+SI]
相對基址變址尋址,mov AX,[BX+SI+05]
段內轉移也稱近轉移(near ptr)
段內轉移也稱短轉移(short)
段間轉移也稱遠轉移(far ptr)