【问题标题】:Can anyone solve this 8080 assembly code 'puzzle'?谁能解决这个 8080 汇编代码“难题”?
【发布时间】:2011-01-09 17:13:13
【问题描述】:

我的一个朋友得到了 8080 汇编代码,这是他试图解决的一个谜题的一部分。 这是代码:

3E 02
4F
C6 04
47
11 41 01
21 69 00
19
76

他需要 B、DE、C 和 HL 的值

谁能解决这个问题或为我指出如何运行它的正确方向?

更新

剧透:解决方案似乎是:

C = 02, B = 06, D = 01, E = 41, H = 01, L = AA

【问题讨论】:

  • 我只记得 21 和 11 分别是 LD HL 和 LD DE 指令:)

标签: assembly machine-code intel-8080


【解决方案1】:
3E 02      ;mvi a, 02h    -- load A with 02h
4F         ;mov c,a       -- move A into C (A remains 02h)
C6 04      ;adi 04h       -- a = a + 04h  (A now contains 06h)
47         ;mov b,a       -- BC pair now contains 0602h
11 41 01   ;lxi d, 0414h  -- DE now contains 0141h
21 69 00   ;lxi h, 0069h  -- HL now contains 0069h
19         ;dad d         -- HL = HL + DE
76         ;hlt           -- halt processing

【讨论】:

    【解决方案2】:

    完全剧透

    0000h: 3e02 mvi a, 2h ; A = 2
    0002h: 4f mov c, a ; C = 2 
    0003h: c604 adi 4h ; A = 6 
    0005h: 47 mov b, a ; B = 6 
    0006h: 114101 lxi d, 141h ; DE = 0141h 
    0009h: 216900 lxi h, 069h ; HL = 69h 
    000ch: 19 爸爸 d ; HL = 69h + 141h = 1aah 
    000dh: 76 hlt 
    A = 6, B = 6, C = 2, D = 1, E = 41h, H = 1, L = 0aah

    一个8080在线反汇编器here.
    8080在线指令集参考here

    【讨论】:

      【解决方案3】:

      作为参考,下面是反汇编:

       3E 02      mvi     a, 2     ; Move o1 <- immediate data
       4F         mov     c, a     ; Move o1 <- o2
       C6 04      adi     4        ; Add immediate to A
       47         mov     b, a     ; Move o1 <- o2
       11 41 01   lxi     d, 141h  ; Load register pair with immediate data
       21 69 00   lxi     h, 69h   ; Load register pair with immediate data
       19         dad     d        ; Add register pair to HL
       76         hlt              ; Halt
      

      【讨论】:

        【解决方案4】:

        你需要拆开它。

        也就是说,将十六进制操作码转换成它们的助记符。

        这是一个例子reference

        从这里可以看出3E是“MVI A, d8”,所以看起来3E 02是把值02放到A寄存器中。

        一旦你解码了助记符,你就可以查看它们的实际含义并找出程序。

        手工操作很容易。

        【讨论】:

          【解决方案5】:

          据此判断,最好的办法是搜索 8080 仿真器并在仿真器上运行它,然后从中获得答案。

          希望这会有所帮助, 最好的祝福, 汤姆。

          【讨论】:

          • 当然,除非他的“朋友”需要手动执行此操作,例如,在未来某个时间的测试中。 =)
          • 我会亲自对任何需要这样的东西进行测试的教授大喊大叫。
          • @David:祝你好运记住操作码......
          • 实际上,我曾经对大多数十六进制的 Z80(以及 8080)操作码了如指掌——我从来没有坐下来学习过它们,但是几个月来,我一直弯腰学习汇编器和调试器,它们在我的头脑。当然,现在几乎所有东西都消失了。
          • 当年我与 8051 密切合作,不小心记住了很多很多操作码。当我在读本科时,我们不得不在考试中手动反汇编机器代码,但我们有一本 68hc11 参考手册,其中愉快地列出了操作码、标志、参数等。在这里插入不寒而栗。
          【解决方案6】:

          你不需要运行它——你只需要翻译它。一个包含 8080 个操作码的表like this,10 分钟的工作,你将反汇编代码。然后,您可以在心理上模拟它以得出答案。

          【讨论】:

            【解决方案7】:

            以下是 8080 指令集指南: http://www.comsci.us/cpu/8080/isindex.html 你的十六进制列表看起来像一个指令流;你应该可以从那里去。多么令人愉快的老派!

            祝你好运。

            【讨论】:

              猜你喜欢
              • 2021-07-25
              • 1970-01-01
              • 2015-11-20
              • 2017-02-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-24
              • 2022-11-10
              相关资源
              最近更新 更多