8085二進位制搜尋程式
這裡我們將瞭解如何在8085中執行二進位制搜尋。
問題陳述:
編寫8085組合語言程式,對儲存在F110到F119位置的一組資料執行二進位制搜尋。金鑰位於F100。
討論
要執行二進位制搜尋,陣列必須已排序。我們將下限放入L,上限放入H。陣列位置儲存在DE暫存器對中。中間值使用(H + L)/2計算。要執行此除法,我們只需將其右移一次。然後將中間值放入D並檢查使用DE定位的項。如果數字相同,則跳轉到結束並將1儲存在F101。這表示找到該項,並將中間值儲存為索引。如果中間值不匹配,則有兩種情況,如果數字小於中間元素,則它位於下半部分,因此上限將為中間值-1,在另一種情況下,它將位於另一側,因此下限將為中間值+1。如果未找到該項,它將在F101位置儲存02。
輸入
地址 | 資料 |
---|---|
F100 | 48 |
… | … |
F110 | 04 |
F111 | 08 |
F112 | 22 |
F113 | 2B |
F114 | 31 |
F115 | 38 |
F116 | 48 |
F117 | 51 |
F118 | 54 |
F119 | 62 |
… | … |
地址 | 資料 |
---|---|
F100 | 9D |
… | … |
F110 | 04 |
F111 | 08 |
F112 | 22 |
F113 | 2B |
F114 | 31 |
F115 | 38 |
F116 | 48 |
F117 | 51 |
F118 | 54 |
F119 | 62 |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 3A, 00, F1 | | LDA F100 | 將金鑰載入到A中 |
F003 | 47 | | MOV B,A | 將金鑰儲存到B中 |
F004 | AF | | XRA A | 清除累加器 |
F005 | 32, 03, F1 | | STA F103 | 將迭代次數儲存到F103H中 |
F008 | 6F | | MOV L,A | 也將A儲存到L中 |
F009 | 26, 09 | | MVI H,09 | 將9載入到H中 |
F00B | 3A, 03, F1 | START | LDA F103 | 將迭代次數載入到A中 |
F00E | 3C | | INR A | 增加A |
F00F | 32, 03, F1 | | STA F103 | 恢復迭代次數 |
F012 | 7C | | MOV A,H | 將上限從H取到A |
F013 | BD | | CMP L | 比較A和L |
F014 | DA, 46, F0 | | JC L2 | 如果CY = 1,則跳轉到L2 |
F017 | 85 | | ADD L | 否則將L與A相加 |
F018 | 1F | | RAR | 右移以獲取其一半 |
F019 | 4F | | MOV C,A | 將中間值儲存到C中 |
F01A | D2, 1E, F0 | | JNC RESET | 如果CY = 0,則跳轉到Reset |
F01D | 3F | | CMC | 對進位取反 |
F01E | 11, 10, F1 | RESET | LXI D,F110 | 將陣列的初始地址載入到DE中 |
F021 | 83 | | ADD E | 將E和Mid相加 |
F022 | 5F | | MOV E,A | 將索引儲存到E中 |
F023 | AF | | XRA A | 清除A |
F024 | 8A | | ADC D | 將D與A和進位相加 |
F025 | 57 | | MOV D,A | 將A恢復到D |
F026 | 1A | | LDAX D | 將A載入中間位置的值 |
F027 | B8 | | CMP B | 與金鑰比較 |
F028 | DA, 34, F0 | | JC ELSE | 如果CY = 1,則跳轉到ELSE |
F02B | CA, 3A, F0 | | JZ PRINT | 如果它們相同,則跳轉到PRINT |
F02E | 79 | | MOV A,C | 將中間值從C取到A |
F02F | 3D | | DCR A | 減少A以獲取中間值-1 |
F030 | 67 | | MOV H,A | 使用中間值-1更新上限 |
F031 | C3, 0B, F0 | | JMP START | 再次跳轉到START |
F034 | 79 | ELSE | MOV A,C | 將中間值從C載入到A |
F035 | 3C | | INR A | 增加A以獲取中間值+1 |
F036 | 7D | | MOV A,L | 使用中間值+1更新下限 |
F037 | C3, 0B, F0 | | JMP START | 再次跳轉到START |
F03A | 3E, 01 | PRINT | MVI A,01 | 載入1,因為找到該項 |
F03C | 32, 01, F1 | | STA F101 | 將結果儲存在F101中 |
F03F | 79 | | MOV A,C | 將中間值從C取到A |
F040 | 32, 02, F1 | | STA F102 | 將金鑰的索引儲存到F102中 |
F043 | C3, 4B, F0 | | JMP END | 結束任務 |
F046 | 3E, 02 | L2 | MVI A,02 | 將2載入到A中,表示金鑰不存在 |
F048 | 32, 01, F1 | | STA F101 | 將結果儲存在F102中 |
F04B | 76 | END | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
F101 | 01 |
F102 | 06 |
地址 | 資料 |
---|---|
F101 | 02 |
廣告