8085程式:求N個字單元內容之和
現在讓我們來看一個Intel 8085微處理器的程式。在這個程式中,我們將看到如何新增N個字單元的內容。
問題陳述:
編寫8085組合語言程式,將儲存在記憶體中的N個16位數相加。
討論:
16位數字儲存在記憶體地址8001H開始的位置。N的值儲存在8000H位置。相加後,結果將儲存在8050H開始的位置。
在8085中,暫存器的數量有限。因此我們將計數儲存到記憶體中,當我們需要更新它時,我們將從記憶體中獲取它,更新它,然後再次將其儲存到記憶體中。
這裡16位數字儲存在DE和HL地址中,使用DAD指令將它們相加。
輸入:
第一個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 03 |
| 8001 | 34 |
| 8002 | 12 |
| 8003 | 78 |
| 8004 | 56 |
| 8005 | BC |
| 8006 | 9A |
| . . . | . . . |
流程圖:

程式:
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| F000 | 31, 00, C0 | LXI SP,C000H | 初始化堆疊指標 | |
| F003 | 21, 00, 00 | LXI H,0000H | 清零HL暫存器對 | |
| F006 | 22, 52, 80 | SHLD 8052H | 將HL內容儲存到8052H和8053H | |
| F009 | 01, 00, 80 | LXI B,8000H | 指向地址以獲取數字計數 | |
| F00C | 0A | LDAX B | 將計數載入到累加器 | |
| F00D | 32, 00, 90 | STA 9000H | 臨時儲存累加器內容 | |
| F010 | 03 | LOOP: | INX B | 指向獲取低位位元組 |
| F011 | 0A | LDAX B | 用記憶體內容載入累加器 | |
| F012 | 5F | MOV E,A | 將累加器內容儲存到E | |
| F013 | 03 | INX B | 指向獲取高位位元組 | |
| F014 | 0A | LDAX B | 用記憶體內容載入累加器 | |
| F015 | 57 | MOV D,A | 將累加器內容儲存到D | |
| F016 | 19 | DAD D | 將DE與HL相加 | |
| F017 | D2, 23, F0 | JNC SKIP | 如果CY=0,則跳轉到SKIP | |
| F01A | E5 | PUSH H | 將HL內容壓入堆疊 | |
| F01B | 2A, 52, 80 | LHLD 8052H | 用8052H和8253H的內容載入HL | |
| F01E | 23 | INX H | 增加HL內容 | |
| F01F | 22, 52, 80 | SHLD 8052H | 將HL內容儲存到8052H和8053H | |
| F022 | E1 | POP H | 從堆疊中取回HL內容 | |
| F023 | 3A, 00, 90 | SKIP: | LDA 9000H | 載入臨時儲存的資料 |
| F026 | 3D | DCR A | 將A減1 | |
| F027 | 32, 00, 90 | STA 9000H | 儲存更新後的值 | |
| F02A | C2, 10, F0 | JNZ LOOP | 如果Z=0,則跳轉到LOOP | |
| F02D | 22, 50, 80 | SHLD 8050H | 將HL內容儲存到8050H和8051H | |
| F030 | 76 | HLT | 結束程式 |
輸出:
第一個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 68 |
| 8051 | 03 |
| 8052 | 01 |
| 8053 | 00 |
| . . . | . . . |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP