8085微處理器程式:累加N個字儲存單元的內容
在這裡,我們將看到一個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 | 將HL暫存器對載入為8052H和8253H的內容 | |
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 |
… | … |
廣告