我的一个朋友得到了 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
我的一个朋友得到了 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
这是 8080 指令集的指南:http: //www.comsci.us/cpu/8080/isindex.html 您的十六进制列表看起来像指令流;你应该可以从那里去。多么令人愉快的老派!
祝你好运。
作为参考,这是反汇编:
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
你需要拆开它。
也就是说,将十六进制操作码转换为其助记符。
这是一个示例参考。
从中可以看出 3E 是“MVI A, d8”,因此看起来 3E 02 将值 02 放入 A 寄存器。
一旦你解码了助记符,你就可以查看它们的实际含义并找出程序。
很容易用手做。
完整的扰流板
0000h: 3e02 mvi a, 2h ; A = 20002h: 4f 移动 c, a ; C = 20003h:c604 adi 4h;A = 60005h: 47 移动 b, a ; B = 60006h:114101 lxi d,141h;DE = 0141h0009h: 216900 lxi h, 069h ; HL = 69 小时000ch: 19 爸爸 d ; HL = 69h + 141h = 1aah000 小时:76 小时A = 6, B = 6, C = 2, D = 1, E = 41h, H = 1, L = 0aah
你不需要运行它——你只需要翻译它。像这样的 8080 个操作码表,10 分钟的工作,你将反汇编代码。然后,您可以在心理上模拟它以得出答案。
由此判断,您最好的选择是搜索 8080 仿真器并在仿真器上运行它,并从中获得答案。
希望这会有所帮助,最好的问候,汤姆。
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