c - 如何用 C 编写一个基本的汇编程序?
问题描述
所以我试图用 C 语言编写一个基本的汇编程序,它将接收两个文件,一个输入和一个输出。输入将包含指令,输出将包含汇编代码,例如可以使用“od -x output.txt | head -5”查看。然而,我的问题是如何为分支指令做到这一点?下面提供的是添加指令,它也会产生一个我不太理解的奇怪输出,在“add R2 R4 R1”的手动组装中,它应该产生“1241”的输出,但它会产生“4112”的输出。为什么这样做?
PR1.C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *ltrim(char *s) {
while (*s == ' ' || *s == '\t') s++;
return s;
}
char getRegister(char *text) {
if (*text == 'r' || *text=='R') text++;
return atoi(text);
}
int assembleLine(char *text, unsigned char* bytes) {
text = ltrim(text);
char *keyWord = strtok(text," ");
if (strcmp("add",keyWord) == 0) {
bytes[0] = 0x10;
bytes[0] |= getRegister(strtok(NULL," "));
bytes[1] = getRegister(strtok(NULL," ")) << 4 | getRegister(strtok(NULL," "));
return 2;
}
}
int main(int argc, char **argv) {
FILE *src = fopen(argv[1],"r");
FILE *dst = fopen(argv[2],"w");
while (!feof(src)) {
unsigned char bytes[4];
char line[1000];
if (NULL != fgets(line, 1000, src)) {
printf ("read: %s\n",line);
int byteCount = assembleLine(line,bytes);
fwrite(bytes,byteCount,1,dst);
}
}
fclose(src);
fclose(dst);
return 0;
}
解决方案
推荐阅读
- javascript - 在使用 Scully 的现有应用程序上生成角度静态 html 时出错
- c - 在格式规范之前使用逗号。在 C 中的 scanf 中?
- javascript - 如何在 PhpStorm 的 JavaScript 中启用 Emmet?
- python - PySide2:AttributeError:“NoneType”对象没有属性“objectName”
- python - 测试 SQLAlchemy 会话是否已关闭
- junit5 - 重新运行失败的测试junit5黄瓜
- cgal - 为 CGAL 的 Delaunay_triangulation_2 的 Delaunay 条件实现替代凸形
- mysql - 选择大陆中的城市 = 'Europe' with Max Population 但不使用连接 (MySQL)
- docker - 是否可以在错误时创建新容器?
- node.js - errorType”:“Runtime.UnhandledPromiseRejection”,“errorMessage”:“错误:Node.js 中的 getaddrinfo ENOTFOUND