8085程式交換10個位元組
在這個程式中,我們將看到如何使用8085交換10位元組資料塊。
問題陳述
編寫8085組合語言程式以交換資料塊,其中塊大小為10。
討論
資料儲存在8010H到8019H和9010H到9019H的位置。位置8000H儲存要交換的位元組數。在這種情況下,位元組數為10D,因此將為0AH。
邏輯非常簡單,HL和DE暫存器對分別指向第一個和第二個資料塊。透過獲取資料,我們只是交換每個記憶體位置的值。然後重複此過程以完全交換兩個塊。
輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 0A |
. . . | . . . |
8010 | 00 |
8011 | 11 |
8012 | 22 |
8013 | 33 |
8014 | 44 |
8015 | 55 |
8016 | 66 |
8017 | 77 |
8018 | 88 |
8019 | 99 |
. . . | . . . |
9010 | 84 |
9011 | 63 |
9012 | 12 |
9013 | 47 |
9014 | 48 |
9015 | AD |
9016 | BC |
9017 | 2A |
9018 | 8F |
9019 | 99 |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 10, 80 | LXI H, 8000H | 指向8000H獲取位元組計數 | |
F003 | 4E | MOV C, M | 從記憶體載入計數 | |
F004 | 21, 10, 80 | LXI H,8010H | 指向第一個塊地址 | |
F007 | 11, 10, 90 | LXI D,9010H | 指向第二個塊地址 | |
F00A | 46 | LOOP | MOV B, M | 將第一個塊的元素取到B |
F00B | 1A | LDAX D | 將第二個塊的元素取到累加器 | |
F00C | 77 | MOV M, A | 將累加器內容儲存到第二個塊 | |
F00D | 78 | MOV A, B | 將B載入到A | |
F00E | 12 | STAX D | 儲存到第二個塊 | |
F00F | 23 | INX H | 指向第一個塊的下一個地址 | |
F010 | 13 | INX D | 指向第二個塊的下一個地址 | |
F011 | 0D | DCR C | 減少計數變數 | |
F012 | C2, 0A, F0 | JNZ LOOP | 當塊未完成時,跳轉到LOOP | |
F015 | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
8010 | 84 |
8011 | 63 |
8012 | 12 |
8013 | 47 |
8014 | 48 |
8015 | AD |
8016 | BC |
8017 | 2A |
8018 | 8F |
8019 | 99 |
. . . | . . . |
9010 | 00 |
9011 | 11 |
9012 | 22 |
9013 | 33 |
9014 | 44 |
9015 | 55 |
9016 | 66 |
9017 | 77 |
9018 | 88 |
9019 | 99 |
. . . | . . . |
廣告