- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 VM,它现在可以运行简单的东西。但是,编译后,我尝试运行它但出现了段错误。有 4 个文件:stack-vm.h
、stack-vm.cpp
、main.cpp
、makefile
.
堆栈虚拟机.h :
#ifndef STACK_VM_H
#define STACK_VM_H
#include <iostream>
#include <vector>
//type definitions
typedef int32_t i32;
class StackVM {
private:
i32 pc = 100; // program counter
i32 sp = 0; // stack pointer
std::vector<i32> memory;
i32 typ = 0;
i32 dat = 0;
i32 running = 1;
i32 getType(i32 instruction);
i32 getData(i32 instruction);
void fetch();
void decode();
void execute();
void doPrimitive();
public:
StackVM();
void run();
void loadProgram(std::vector<i32> prog);
};
#endif
堆栈-vm.cpp :
#include "stack-vm.h"
StackVM::StackVM() {
memory.reserve(1000000);
}
i32 StackVM::getType(i32 instruction) {
i32 type = 0xc0000000;
type = (type & instruction) >> 30;
return type;
}
i32 StackVM::getData(i32 instruction) {
i32 data = 0x3fffffff;
data = data & instruction;
return data;
}
void StackVM::fetch() {
pc++;
}
void StackVM::decode() {
typ = getType(memory[pc]);
dat = getData(memory[pc]);
}
void StackVM::execute() {
if (typ == 0 || typ == 2) {
sp++;
memory[sp] = dat;
} else {
doPrimitive();
}
}
void StackVM::doPrimitive() {
switch (dat) {
case 0: // halt
std::cout << "halt" << std::endl;
running = 0;
break;
case 1: // add
std::cout << "add " << memory[sp - 1] << " " << memory[sp] << std::endl;
memory[sp - 1] = memory[sp - 1] + memory[sp];
break;
}
}
void StackVM::run() {
pc -= 1;
while (running) {
fetch();
decode();
execute();
std::cout << "tos: " << memory[sp] << std::endl;
}
}
void StackVM::loadProgram(std::vector<i32> prog) {
for (i32 i = 0; 1 < prog.size(); i++) {
memory[pc + i] = prog[i];
}
}
main.cpp :
#include "stack-vm.h"
int main(int argc, char* argv[]) {
StackVM vm;
std::vector<i32> prog{3, 4, 0x40000001, 0x40000000};
vm.loadProgram(prog);
return 0;
}
生成文件:
CFLAGS=-std=c++11
all: stack-vm
stack-vm: stack-vm.o main.o
$(CXX) $(CFLAGS) stack-vm.o main.o -o stack-vm
main.o: main.cpp
$(CXX) $(CFLAGS) -c main.cpp
stack-vm.o: stack-vm.h stack-vm.cpp
$(CXX) $(CFLAGS) -c stack-vm.cpp
clean:
rm -f *.o stack-vm
感谢您的回答。
最佳答案
行:
for (i32 i = 0; 1 < prog.size(); i++)
不正确,应该是i,不是1。
此外,reserve 设置的是容量,而不是 vector 的大小。你应该使用调整大小。
关于c++ - 创建 Stack VM 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55027310/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!