8085程式檢查迴文
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將ASCII轉換為二進位制值。
問題陳述
編寫8085組合語言程式來檢查位模式是否為迴文。
討論
在這個程式中,我們從8000H位置獲取數字。如果數字不是迴文,程式將返回00H;否則,將返回FFH。
例如,輸入是18H,則二進位制值為(0001 1000),這是一個迴文。數字52H(0101 0010)不是迴文。
在這個問題中,我們將第一個數字放入累加器,然後將其左移。左移時,MSB將被放置在LSB,也放在進位標誌中。透過右移,將此進位標誌插入D暫存器。因此,位模式將被反轉,現在透過檢查實際數字和反轉數字的值,我們可以確定它是否為迴文。
輸入
第一個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | BD |
. . . | . . . |
第二個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 52 |
. . . | . . . |
第三個輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 18 |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 3A, 00, 80 | LDA 8000H | 將數字載入到A暫存器 | |
F003 | 67 | MOV H, A | 將A暫存器的內容移到H暫存器 | |
F004 | 0E, 08 | MVI C,08H | 初始化計數器 | |
F006 | 7C | LOOP: | MOV A, H | 將H暫存器的內容載入到A暫存器 |
F007 | 07 | RLC | 左移旋轉 | |
F008 | 67 | MOV H, A | 將A暫存器的內容送回H暫存器 | |
F009 | 7A | MOV A, D | 將D暫存器的內容載入到A暫存器 | |
F00A | 1F | RAR | 帶進位的右移旋轉 | |
F00B | 57 | MOV D, A | 將A暫存器的內容送回D暫存器 | |
F00C | 0D | DCR C | C暫存器減1 | |
F00D | C2, 06, F0 | JNZ LOOP | 如果零標誌為0,則跳轉到LOOP | |
F010 | 7C | MOV A, H | 將H暫存器的資料載入到A暫存器 | |
F011 | BA | CMP D | 將D暫存器與A暫存器比較 | |
F012 | CA, 1A, F0 | JZ TRUE | 如果兩者相同,則為迴文 | |
F015 | 3E, 00 | MVI A, 00H | 將00H載入到A暫存器 | |
F017 | C3, 1C, F0 | JMP EXIT | 跳轉到EXIT | |
F01A | 3E, FF | TRUE: | MVI A, FFH | 將FFH載入到A暫存器 |
F01C | 32, 50, 80 | EXIT: | STA 8050H | 將結果儲存到記憶體中 |
F01F | 76 | HLT | 終止程式 |
輸出
第一個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | FF |
. . . | . . . |
第二個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | 00 |
. . . | . . . |
第三個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | FF |
. . . | . . . |
廣告