任何人都可以解决这个8080汇编代码'拼图'吗?

时间:2010-01-26 21:48:27

标签: assembly machine-code intel-8080

我的一位朋友获得了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

7 个答案:

答案 0 :(得分:3)

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

祝你好运。

答案 1 :(得分:2)

你需要拆卸它。

即,将十六进制操作码转换为其助记符。

以下是reference的示例。

你可以从中看到3E是“MVI A,d8”,所以看起来像3E 02将值02放入A寄存器。

解码助记符后,您可以查看它们的实际含义并找出程序。

手工操作很容易。

答案 2 :(得分:2)

作为参考,这里是反汇编:

 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

答案 3 :(得分:1)

据此判断,您最好的选择是搜索8080模拟器并对模拟器运行,并从中获得答案。

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

答案 4 :(得分:1)

完整剧透

  

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           dad 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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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