| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- const utils = require('./utils.js')
- const regmap = [
- 'zero', 'at', 'v0', 'v1', 'a0', 'a1', 'a2', 't0', 't1', 't2', 't3', 't4', 't5',
- 't6', 't7', 's0', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 't8', 't9', 'k0',
- 'k1', 'gp', 'sp', 's8', 'ra' ]
- const getReg = (id) => {
- if (id.startsWith('$')) {
- id = id.slice(1)
- }
- if ((isNaN(id) === false && +id >= 0 && +id <= 31) || (id = regmap.indexOf(id)) > -1) {
- return id
- } else {
- utils.error("Invalid register: " + id)
- }
- }
- const encoders = {
- 'LUI': (rt, immediate) => {
- let encoded = '001111'
- encoded = encoded + '0'.repeat(5)
- encoded = encoded + utils.dec2binu(getReg(rt), 5)
- encoded = encoded + utils.hex2bin(immediate, 16)
- return '0x' + utils.bin2hex(encoded, 8)
- },
- 'ORI': (rt, rs, immediate) => {
- let encoded = '001101'
- encoded = encoded + utils.dec2binu(getReg(rs), 5)
- encoded = encoded + utils.dec2binu(getReg(rt), 5)
- encoded = encoded + utils.hex2bin(immediate, 16)
- return '0x' + utils.bin2hex(encoded, 8)
- },
- 'SW': (rt, offsetBase) => {
- const [offset, base] = utils.splitOffsetBase(offsetBase)
- let encoded = '101011'
- encoded = encoded + utils.dec2binu(getReg(base), 5)
- encoded = encoded + utils.dec2binu(getReg(rt), 5)
- encoded = encoded + utils.int16_2bin(offset, 16)
- console.log(encoded)
- return '0x' + utils.bin2hex(encoded, 8)
- }
- }
- module.exports = encoders
|