8085程式反序傳輸資料塊
在這裡,我們將學習如何使用8085反序傳輸資料塊。
問題陳述
編寫8085程式,以反序傳輸N位元組的資料塊。該資料塊儲存在地址8001及其後續地址中,資料塊大小儲存在8000地址中。資料塊將移動到地址9000及其後續地址中。
討論
為了解決這個問題,我們首先獲取資料塊的大小。DE暫存器對設定為指向目標地址9000H。HL暫存器對設定為指向資料塊的最後一個元素。如果資料塊大小為0A,則最後一個塊將位於800A。首先,HL指向8000,從中獲取塊大小並存儲到C中。現在將C與L暫存器相加以獲取最後一個塊的地址。現在從HL指向的記憶體中獲取每個元素,並將其儲存回DE指向的記憶體中。然後增加DE,並減少HL。因此,整個塊將反向移動。
輸入
地址 | 資料 |
---|---|
… | … |
8000 | 0A |
8001 | 11 |
8002 | 22 |
8003 | 33 |
8004 | 44 |
8005 | 55 |
8006 | 66 |
8007 | 77 |
8008 | 88 |
8009 | 99 |
800A | AA |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 80 | | LXI H,8000 | 指向8000以獲取塊大小 |
F003 | 4E | | MOV C,M | 將塊大小存入C |
F004 | 11, 00 90 | | LXI D,9000 | 指向目標地址 |
F007 | 7D | | MOV A,L | 將L載入到A |
F008 | 81 | | ADD C | 將C相加以指向塊的最後一個地址 |
F009 | 6F | | MOV L,A | 將A再次儲存到L |
F00A | 7E | LOOP | MOV A,M | 將記憶體載入到A |
F00B | 12 | | STAX D | 將A儲存到DE指向的目標位置 |
F00C | 13 | | INX D | 將目標指向下一個地址 |
F00D | 2B | | DCX H | 將源指向之前的地址 |
F00E | 0D | | DCR C | 將C減1 |
F00F | C2, 0A, F0 | | JNZ LOOP | 如果Z標誌未設定,則跳轉到LOOP |
F012 | 76 | | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
… | … |
9000 | AA |
9001 | 99 |
9002 | 88 |
9003 | 77 |
9004 | 66 |
9005 | 55 |
9006 | 44 |
9007 | 33 |
9008 | 22 |
9009 | 11 |
… | … |
廣告