3

As an exercise, I am attempting to implement an assembler for a self-defined fictitious architecture.

The only thing I'm unsure of is how to actually generate the bits. Each of my machine instructions are 2 bytes long.

For example, say I have determined that I need to generate the following byte code:

0100000100110001

This is a situation where I'm building the instruction a chunk at a time, for example, the first 3 bits are the op code, then there's some reserved bits, then a flag etc.

I figure it would be easiest to construct it as a literal string.

How can I convert a string, e.g. '0100000100110001' into the corresponding bit string and then write it to a file directly, without changing the byte ordering?

I think I might be able to use the ByteArray constructor, but I can't find any suitable examples in the docs.

1 Answer 1

2

You could try to write your opcode with python struct to the string. It allows to define the format of your values (int8, int16, int32, ...). So then just combine your opcode and flags to your 2 Byte code and write this with an uint16 format.

import struct

outstring = ''

code = opcode << 13
code += flags << 10
code += reg1  << 5
code += reg2 
outstring += struct.pack('H',code)

Just shift the values in the right possition. Maybe masking would be good to prevent some errors. In the end add it to your output string with struct.pack. ('H' is unsigned int 16, 'h' would be signed int 16) The whole list is in the documentation (python struct)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.