8085程式:相減陣列中兩個連續位元組
在這裡,我們將學習如何使用8085微處理器來減去陣列中兩個連續的元素。
問題陳述
編寫一個8085程式,該程式減去陣列中兩個連續的元素並將結果儲存在同一位置。結果將放置在與獲取它們相同的位置。數字從8001號位置開始儲存。陣列的大小儲存在8000號位置。
討論
我們將使用一個子程式來解決這個問題。該子程式將減去兩個連續的數字並將它們儲存到正確的位置。將多次呼叫該子程式以減去所有連續的數對。任務將執行元素數量的一半次。因此,我們獲取計數,然後將其右移以使其減半。我們透過進位位進行旋轉。如果進位位已為高電平,則可能會儲存不同的結果,因此我們使用STC和CMC指令清除進位位。
輸入
地址 | 資料 |
---|---|
… | … |
8000 | 0A |
8001 | E9 |
8002 | D3 |
8003 | AD |
8004 | 61 |
8005 | 2A |
8006 | 1F |
8007 | 5D |
8008 | 26 |
8009 | A9 |
800A | 35 |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標號 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 80 | | LXI H,8000 | 指向獲取陣列大小的位置 |
F003 | 7E | | MOV A,M | 將陣列大小載入到累加器A |
F004 | 37 | | STC | 設定進位標誌 |
F005 | 3F | | CMC | 反轉進位標誌 |
F006 | 0F | | RRC | 右移,帶進位 |
F007 | 47 | | MOV B,A | 將A儲存到B |
F008 | 23 | LOOP: | INX H | 指向下一個位置 |
F009 | CD, 11, F0 | | CALL PADD | 呼叫PADD子程式 |
F00C | 05 | | DCR B | 將B減1 |
F00D | C2, 08, F0 | | JNZ LOOP | 跳轉到LOOP |
F010 | 76 | | HLT | 終止程式 |
F011 | 0E, 00 | PADD: | MVI C,00H | 清除C暫存器 |
F013 | 7E | | MOV A,M | 將第一個數字從記憶體載入到A |
F014 | 23 | | INX H | 指向下一個位置 |
F015 | 96 | | SUB M | A減去記憶體單元的值 |
F016 | D2, 1A, F0 | | JNC STORE | 如果進位標誌未設定,跳轉到STORE |
F019 | 0C | | INR C | 否則,將C加1 |
F01A | 71 | STORE: | MOV M,C | 將C儲存到記憶體 |
F01B | 2B | | DCX H | 指向前一個位置 |
F01C | 77 | | MOV M,A | 將A儲存到記憶體 |
F01D | 23 | | INX H | 指向下一個位置 |
F01E | C9 | | RET | 從子程式返回 |
輸出
地址 | 資料 |
---|---|
… | … |
8001 | 16 |
8002 | 00 |
8003 | 4C |
8004 | 00 |
8005 | 0B |
8006 | 00 |
8007 | 37 |
8008 | 00 |
8009 | 74 |
800A | 00 |
… | … |
廣告