开发者

Can anyone solve this 8080 assembly code 'puzzle'?

开发者 https://www.devze.com 2022-12-18 00:05 出处:网络
A friend of mine was given 8080 assembly code as part of a puzzle he\'s trying to solve. This is the code:

A friend of mine was given 8080 assembly code as part of a puzzle he's trying to solve. This is the code:

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

He needs the values of B, DE, C and HL

Can anyone solve this or point me in the right direction on how to run this?

Up开发者_如何学Godate

Spoiler: The solution seems to be:

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


Here's a guide to the 8080 instruction set: http://www.comsci.us/cpu/8080/isindex.html Your hex listing looks like an instruction stream; you should be able to go from there. How delightfully old-school!

Good luck.


For reference, here's the disassembly:

 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


You need to disassemble it.

That is, convert the hex op codes in to their mnemonics.

Here's an example reference.

You can see from this that 3E is "MVI A, d8", so that looks like 3E 02 is putting the value 02 in to the A register.

Once you've decoded the mnemonics, you can look up what they actually mean and figure out the program.

Easy enough to do by hand.


Complete spoiler

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

An 8080 online disassembler here.
An 8080 online instruction set reference here.


You don't need to run it - you just need to translate it. A table of 8080 opcodes like this, 10 minutes work and you will have disassembled the code. You can then simulate it mentally to work out the answer.


Judging by this, your best bet would be to do a search for an 8080 emulator and run it against the emulator, and get the answer from it.

Hope this helps, Best regards, Tom.


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
0

精彩评论

暂无评论...
验证码 换一张
取 消