8085程式:將ASCII轉換為二進位制
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將把ASCII轉換為二進位制值。
問題陳述
編寫8085組合語言程式,將ASCII轉換為二進位制或十六進位制字元值。
討論
我們知道數字00H的ASCII碼是30H(48D),而09H的ASCII碼是39H(57D)。所以所有其他數字都在30H到39H的範圍內。0AH的ASCII碼是41H(65D),0FH的ASCII碼是46H(70D),所以所有其他字母(B、C、D、E、F)都在41H到46H的範圍內。
這裡的邏輯很簡單。我們檢查ASCII值是否小於58H(9的ASCII碼+1)。當數字小於58時,它是數字值。所以我們簡單地從ASCII值中減去30H,當它大於58H時,它是字母值。所以我們減去37H。
輸入
第一個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 41 |
. . . | . . . |
第二個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 35 |
. . . | . . . |
第三個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 46 |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H, 8000H | 載入數字的地址 | |
F003 | 7E | MOV A, M | 將ASCII資料從記憶體載入到累加器 | |
F004 | FE, 58 | CPI 58H | 與ASCII(9)+1比較 | |
F006 | D2, 0E, F0 | JNC NUM | 輸入為數字 | |
F009 | D6, 37 | SUI 37H | 減去偏移量以獲取字母字元 | |
F00B | C3, 10, F0 | JMP STORE | 儲存結果 | |
F00E | D6, 30 | NUM | SUI 30H | 減去30以獲取數值 |
F010 | 23 | STORE | INX H | 指向下一個位置 |
F011 | 77 | MOV M,A | 將累加器內容儲存到記憶體 | |
F012 | 76 | HLT | 終止程式 |
輸出
第一個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 0A |
. . . | . . . |
第二個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 05 |
. . . | . . . |
第三個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 0F |
. . . | . . . |
廣告