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 |
. . . | . . . |
廣告