8085程式:灰度碼轉換為二進位制碼
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將把格雷碼轉換為二進位制碼。
問題陳述
編寫一個8085組合語言程式,將格雷碼轉換為二進位制碼。資料儲存在地址8200H,結果儲存在記憶體位置8201H。
討論
在這裡,我們從記憶體中載入數字,並在每一步執行右移操作,並將中間結果與前一個結果進行異或運算。這樣我們就得到了結果。在下面的演示中,您可以瞭解邏輯。
C 1110 1011 (A) (EBH) 07H 0111 0101 (RAR) XOR 1110 1011 (D) 1001 1110 (A = A XOR D) (9EH) 06H 0100 1111 (RAR) XOR 1110 1011 (D) 1010 0100 (A = A XOR D) (A4H) 05H 0101 0010 (RAR) XOR 1110 1011 (D) 1011 1001 (A = A XOR D) (B9H) 04H 0101 1100 (RAR)XOR 1110 1011 (D)
1011 0111 (A = A XOR D) (B7H) 03H 0101 1011 (RAR) XOR 1110 1011 (D) 1011 0000 (A = A XOR D) (B0H) 02H 0101 1000 (RAR) XOR 1110 1011 (D) 1011 0011 (A = A XOR D) (B3H) 01H 0101 1001 (RAR) XOR 1110 1011 (D) 1011 0010 (A = A XOR D) (B2H)
輸入
地址 | 資料 |
---|---|
. . . | . . . |
8200 | EB |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 指令助記符 | 註釋 |
---|---|---|---|---|
8000 | 3A, 00, 82 | START: | LDA 8200 H | A = (8200 H); 載入格雷碼 |
8003 | 57 | MOV D, A | D = A | |
8004 | 0E, 07 | MVI C, 07 H | C = 07 H | |
8006 | 37 | UP: | STC | Cy = 1 |
8007 | 3F | CMC | Cy = 0; 清除Cy | |
8008 | 1F | RAR | 帶進位的右移旋轉 | |
8009 | AA | XRA D | A = A XOR D | |
800A | 0D | DCR C | C = C – 1 | |
800B | C2, 06, 80 | JNZ UP | C是否為0?如果不是,則跳轉到UP | |
800E | 32, 01, 82 | STA 8201 H | (8201 H) = A; 儲存數字 | |
8011 | 76 | HLT | 停止 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
8201 | B2 |
. . . | . . . |
廣告