8085程式:從陣列中提取所有非00H的資料
在這裡,我們將學習如何使用8085從陣列中提取所有非00H的數字。
問題陳述
編寫一個8085程式,從陣列中提取所有非00H的數字,並將它們儲存到不同的位置。數字從8001地址開始儲存,8000地址儲存陣列大小,結果將從9000地址開始儲存。
討論
為了解決這個問題,我們從記憶體中讀取數字,然後對數字和00H執行或運算。如果零標誌被啟用,則表示該數字為00,因此我們忽略它。否則,我們將其儲存到正確的位置。
輸入
地址 | 資料 |
---|---|
… | … |
8000 | 0A |
8001 | 45 |
8002 | 21 |
8003 | 00 |
8004 | FD |
8005 | 00 |
8006 | 00 |
8007 | 36 |
8008 | 98 |
8009 | 00 |
800A | AC |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 80 | | LXI H,8000 | 載入陣列大小 |
F003 | 4E | | MOV C,M | 將大小儲存到C |
F004 | 11, 00, 90 | | LXI D,9000 | 載入目標地址 |
F007 | 23 | LOOP: | INX H | 指向下一個位置 |
F008 | 7E | | MOV A,M | 將記憶體中的數字取到A |
F009 | F6, 00 | | ORI 00H | A與00H進行或運算 |
F00B | CA, 10, F0 | | JZ SKIP | 如果A為0,則跳過 |
F00E | 12 | | STAX D | 否則將A儲存到DE指向的記憶體中 |
F00F | 13 | | INX D | 指向下一個位置 |
F010 | 0D | SKIP: | DCR C | 計數器減1 |
F011 | C2, 07, F0 | | JNZ LOOP | 如果C不為0,則跳轉到LOOP |
F014 | 76 | | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
… | … |
9000 | 45 |
9001 | 21 |
9002 | FD |
9003 | 36 |
9004 | 98 |
9005 | AC |
… | … |
廣告