我最近一直在努力让自己沉浸在汇编编程的世界中,最终目标是创建自己的编程语言.我希望我的第一个真正的项目是一个用C编写的简单汇编程序,它将能够组装一小部分x86机器语言并创建一个Windows可执行文件.没有宏,没有连接器.只是集会.
在纸面上,它似乎很简单.汇编代码进来,机器代码出来.
但是一旦我想到所有的细节,它就会突然变得非常艰巨.操作系统需要哪些约定?如何对齐数据并计算跳跃?可执行文件的内部甚至是什么样的?
我感到迷茫.我找不到任何关于这个的教程,看看流行汇编程序的源代码并不鼓舞人心(尽管我愿意再试一次).
我从哪里开始?你会怎么做的?有关于这个主题的任何好的教程或文献吗?
最近,我一直在思考一个人可以迭代数组的各种方式,并想知道哪些是最有效(和最低效)的.我写了一个假设的问题和五个可能的解决方案.
问题
给定一个包含多个元素的int数组arr,为每个元素len分配任意数字的最有效方法是42什么?
解决方案0:显而易见
for (unsigned i = 0; i < len; ++i)
arr[i] = 42;
Run Code Online (Sandbox Code Playgroud)
解决方案1:反向明显
for (unsigned i = len - 1; i >= 0; --i)
arr[i] = 42;
Run Code Online (Sandbox Code Playgroud)
解决方案2:地址和迭代器
for (unsigned i = 0; i < len; ++i)
{ *arr = 42;
++arr;
}
Run Code Online (Sandbox Code Playgroud)
解决方案3:反向地址和迭代器
for (unsigned i = len; i; --i)
{ *arr = 42;
++arr;
}
Run Code Online (Sandbox Code Playgroud)
解决方案4:解决疯狂问题
int* end = arr + len;
for (; arr < …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MinGW 4.7.2编译一个简单的C++程序,但是由于大量的错误和警告而感到沮丧.
/*\ program.h \*/
typedef struct
{ int member0;
int member1;
int member2;
int member3;
} structure;
void function(&structure);
Run Code Online (Sandbox Code Playgroud)
/*\ program.cpp \*/
#include "program.h"
int main(void)
{ structure *instance;
function(instance);
}
void function(&structure)
{ // nothing
}
Run Code Online (Sandbox Code Playgroud)
function取一个地址structure.指针instance包含structure随后传递给的地址function.
很简单,但编译器并不开心.
g++ program.cpp
In file included from program.cpp:1:0:
program.h:8:14: error: variable or field 'function' declared void
program.h:8:25: error: expected primary-expression before ')' token
program.cpp: In function 'int main()':
program.cpp:5:19: error: 'function' was …Run Code Online (Sandbox Code Playgroud)