首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

組合語言開發DOS下內存駐留程序(二):8086/8088架構基礎

     編輯:組合語言

基本原理

2.1 8086/8088 微處理器概覽

IBM PC採用Intel 8088(8086的8位總線版本)。對程序員而言,兩者指令集幾乎相同,差別僅在外部總線寬度:8086為16位,8088為8位(內部仍16位),導致8088存取內存需兩個週期,性能約降低30%。

2.1.1 寄存器組織

  • 通用16位寄存器:AX、BX、CX、DX、BP、SI、DI。前四者可拆為兩個8位寄存器(AH/AL等)。
  • 段寄存器:CS(代碼)、DS(數據)、SS(堆疊)、ES(附加)。
  • 專用指標:IP(指令指針)、SP(堆疊指針)、BP(基址指針,相對SS)、SI(源變址,相對DS)、DI(目標變址,相對ES)。

8086採用段式寻址:物理地址 = (段值 << 4) + 偏移,構成20位地址,可寻址1MB。IBM PC保留前320KB給ROM BIOS與顯存,用戶程序可用640KB。

2.1.2 尋址方式

8086提供豐富的尋址模式:

  • 立即尋址:MOV AX, 1234H
  • 直接內存尋址:MOV BX, [VAR]
  • 寄存器間接尋址:基址寄存器(BX/BP)+ 變址寄存器(SI/DI),如 MOV DL, ES:[SI]。最多組合一個基址+一個變址。

各模式可組合,形成靈活的數據訪問方式。

2.1.3 標誌寄存器(9位有效)

標誌含義
CF進位/借位
PF奇偶校驗
AF輔助進位(BCD運算用)
ZF結果為零
SF符號位(結果最高位)
TF單步執行(調試用)
IF中斷允許
DF方向標誌(串操作遞增/遞減)
OF有符號溢出

2.1.4 循環指令

所有循環指令以CX為計數器。LOOP LABEL 相當於 DEC CX / JNZ LABEL。示例:用累加實現乘法。

MOV AX, 0
MOV CX, 4
NEXT: ADD AX, 6
LOOP NEXT   ; CX=0時退出

2.1.5 內存數據存儲規則

8088按字節寻址,但CPU內部按字(16位)處理。遵循小端序:低字節存低地址,高字節存高地址。示例程序演示將 AX='HL' 存入內存後按字節讀出顯示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved