8085程式用於計算給定8位數中1的個數
在這個程式中,我們將看到如何計算8位數中1的個數。
問題陳述
編寫8085組合語言程式,計算儲存在8000H位置的8位數中1的個數。
討論
在這個程式中,我們使用旋轉操作來計算1的個數。由於8位數有8個不同的位,因此我們將數字旋轉8次。我們可以使用RRC或RLC。這裡我們使用了RRC指令。此指令將LSb傳送到MSb以及進位標誌。因此,在每次迭代之後,我們可以檢查進位狀態以獲得1的計數。
如果數字是DA(11011010),則答案將是5,因為數字中有五個1。
輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | DA |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 37 | STC | 設定進位 | |
F001 | 3F | CMC | 補碼進位 | |
F002 | 3A, 00, 80 | LDA 8000H | 將數字載入到A | |
F005 | 0E, 08 | MVI C,08H | 將計數器初始化為08H | |
F007 | 06, 00 | MVI B,00H | 清空B暫存器 | |
F009 | 0F | LOOP | RRC | 右移 |
F00A | D2, 0E, F0 | JNC SKIP | 如果CY = 0,則跳過下一步 | |
F00D | 04 | INR B | 如果CY = 1,則增加B | |
F00E | 0D | SKIP | DCR C | 將C減1 |
F00F | C2, 09, F0 | JNZ LOOP | 如果Z = 0,則跳轉到迴圈 | |
F012 | 78 | MOV A,B | 將計數載入到A | |
F013 | 32, 50, 80 | STA 8050H | 將結果儲存在8050H | |
F016 | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | 05 |
. . . | . . . |
廣告