📜  8085程序检查给定的16位数字是否是回文

📅  最后修改于: 2021-06-28 16:39:09             🧑  作者: Mango

问题–编写汇编语言程序来检查给定的16位数字是否是回文。如果数字是回文,则将01存储在存储位置3050中,否则将FF存储在存储位置3050中。

注–回文数是数字相反的数字。

假定用于检查回文的16位数字存储在内存位置2050中。

例子 –


算法 –

  1. 将存储器单元2050的内容加载到寄存器L中,并将存储器单元2051的内容加载到寄存器H中
  2. 将L的内容移至累加器A中
  3. 通过执行4次RLC指令来反转A的内容
  4. 在L中移动A的内容
  5. 在A中移动H的内容
  6. 通过执行4次RLC指令来反转A的内容
  7. 将L的内容移至H
  8. 在L中移动A的内容
  9. 将L的内容存储在内存位置2070中并将H的内容存储在内存位置2071中
  10. 将内存位置2050的内容加载到A中
  11. 将A的内容移到寄存器B中
  12. 将内存位置2070的内容加载到A中
  13. 比较A和B的内容。如果内容不同,则将FF存储在A中并将其存储在内存位置3050
  14. 如果A和B的内容相同,则将内存位置2051的内容加载到A中
  15. 在B中移动A的内容
  16. 将内存位置2071的内容加载到A中
  17. 比较A和B的内容。如果内容不同,则将FF存储在A中并将其存储在内存位置3050
  18. 如果A和B的内容相同,则将01存储在A中并将其存储在内存位置3050中

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
2000 LHLD 2050 L <- M[2050], H <- M[2051]
2003 MOV A, L A <- L
2004 RLC Rotate accumulator content left by 1 bit without carry
2005 RLC Rotate accumulator content left by 1 bit without carry
2006 RLC Rotate accumulator content left by 1 bit without carry
2007 RLC Rotate accumulator content left by 1 bit without carry
2008 MOV L, A L <- A
2009 MOV A, H A <- H
200A RLC Rotate accumulator content left by 1 bit without carry
200B RLC Rotate accumulator content left by 1 bit without carry
200C RLC Rotate accumulator content left by 1 bit without carry
200D RLC Rotate accumulator content left by 1 bit without carry
200E MOV H, L H <- L
200F MOV L, A L <- A
2010 SHLD 2070 M[2070] <- L, M[2071] <- H
2013 LDA 2050 A <- M[2050]
2016 MOV B, A B <- A
2017 LDA 2070 A <- M[2070]
201A CMP B A – B
201B JZ 2024 Jump if ZF = 0
201E MVI A, FF A <- 01
2020 STA 3050 M[3050] <- A
2023 HLT END
2024 LDA 2051 A <- M[2051]
2027 MOV B, A B <- A
2028 LDA 2071 A <- M[2071]
202B CMP B A – B
202C JZ 2035 Jump if ZF = 0
202F MVI A, FF A <- FF
2031 STA 3050 M[3050] <- A
2034 HLT END
2035 MVI A, 01 A <- 01
2037 STA 3050 M[3050] <- A
203A HLT END

说明–寄存器A,H,L,B用于通用。

  1. LHLD 2050:在L中加载存储位置2050的内容,在H中加载2051存储的内容。
  2. MOV A,L:移动A中L的内容。
  3. RLC:将A的内容左移一位而不进位。重复执行当前指令4次,以使A的内容反转。
  4. MOV L,A:在L中移动A的内容。
  5. MOV A,H:移动A中H的内容。
  6. RLC:将A的内容左移一位而不进位。重复执行当前指令4次,以使A的内容反转。
  7. MOV H,L:移动H中L的内容。
  8. MOV L,A:在L中移动A的内容。
  9. SHLD 2070:在2070中存储L的内容,在2071中存储H的内容。
  10. LDA 2050:将内存位置2050的内容加载到A中。
  11. MOV B,A:在B中移动A的内容。
  12. CMP B:比较A和B的内容。如果内容相同,则将其设置为零标志,否则将重置。
  13. JZ 2024:如果ZF = 1,则跳至内存位置2024。
  14. MVI A,FF:将FF存储在A中。
  15. STA 3050:将A的内容存储在3050中。
  16. HLT:停止执行程序,并停止任何进一步的执行。
  17. LDA 2051:将内存位置2050的内容加载到A中。
  18. MOV B,A:在B中移动A的内容。
  19. LDA 2071:将内存位置2071的内容加载到A中。
  20. CMP B:比较A和B的内容。如果内容相同,则将其设置为零标志,否则将重置。
  21. JZ 2035:如果ZF = 1则跳转到内存位置2035。
  22. MVI A,FF:将FF存储在A中。
  23. STA 3050:将A的内容存储在3050中。
  24. HLT:停止执行程序,并停止任何进一步的执行。
  25. MVI A,01:将01存储在A中。
  26. STA 3050:将A的内容存储在3050中。
  27. HLT:停止执行程序,并停止任何进一步的执行。