【发布时间】:2016-07-21 16:15:42
【问题描述】:
我正在编写一个粗略的 ISS 处理器,我想知道是否有更有效的方法来处理我正在做的事情(最好不要求助于不安全的库)。 (简化)我通过以下方式表示记忆:
type DataMem []uint8
注册人:
type Register uint16
内存需要以字节大小为单位,并且处理器以上述更大的单位工作。这意味着存储我们所做的数据:
func (m *Machine) ExecuteST (ins Instruction) {
// Store to memory
// Data to store specified in one register
// Address to store to specified by another register
target_address := m.RegBank[ins.Dst]
src_data := m.RegBank[ins.Src]
///////// Start of annoying section////////
var target_0 uint8
var target_1 uint8
target_0 = src_data & 0x0f
target_1 = (src_data & 0xf0)>>8
m.data_mem[target_address ] = target_0
m.data_mem[target_address+1] = target_1
/////////// End of annoying section /////////
m.logger.Printf("ST To Address %x, Data %x\n",target_address,src_data)
}
等等各种不同的数据类型和传输。
对我来说烦人的是我知道运行 go 代码的处理器将有一个加载指令,可以在一次传输中完成上述所有操作。我希望有一个好的 c 编译器可以为我优化,但不破坏不安全的库并直接指向我认为我无法解决的指针?
我愿意接受建议,包括更好的数据存储器建模方法...
【问题讨论】:
-
我不知道有什么更好的方法来做你正在做的事情,但你的面具是错误的。第一个应该是
0xff,另一个应该是0xff00。 -
糟糕,谢谢!我重新编写了我正在运行的代码以简化问题 - 看起来我简化不正确/太快了!
标签: go