机器指令 CPU 已经有了样子,现在开始汇编器制造,
机器指令详情视频
由隔壁操作系统意外发现,看到OUT %AL, %BX 指令, 怀疑寄存器直连地址线,意外追出新显示器内存,实现字符输出,并在视频最后改数字实现左右滚动跑马_哔哩哔哩_bilibili
input.txt
sces scssvw 324tr34 snviwne
cmqoin 32rni
.org 0x33
mov %ax,%bx
字符分割
// 可执行文件字符转码为 UTF-8, 对应txt字符是 UTF-8
// ANSI 对应课程作业,对应txt 文本字符是 ANSI
// cmd 窗口打印中文 ANSI格式
#include <stdio.h>
#include <string.h>
#include <malloc.h>
FILE* fp, *fa2;
int lenth = 10000;
char* str = new char[200]; // 循环读取文件,分200字节读取
char** cmd = new char*[lenth]; // 词元存储
int cnt = 0; // 分割词元个数
void init() {
fp = fopen("input.txt", "r");
fa2 = fopen("output.txt", "w"); // 发现命令中有文件输出,所以之前需要开启文件
for (int i = 0; i < lenth; i++) {
cmd[i] = new char[200];
}
for (int i = 0; i < lenth; i++) {
for (int j = 0; j < 200; j++) {
cmd[i][j] = '\0';
}
}
// printf("end\n");
}
void split() {
char *p;
int num = 0;
// 分割词语
while (fgets(str, 200, fp) != NULL) {
p = str;
// 处理回车,有些回车读取会影响代码结果
if (str[0] == '\n' && strlen(str) == 1) {
// printf("发现回车\n");
continue;
} else if (str[strlen(str) - 1 ] == '\n') {
// 发现文末回车
// printf("发现文末回车\n");
str[strlen(str) - 1 ] = '\0';
}
// 按空格分割字符
while (*p != '\0') {
// printf("%c\n", *p);
if (*p == ' ' || *p == '\n') {
if (num != 0) {
cnt++;
num = 0;
}
} else {
cmd[cnt][num] = *p;
num++;
}
p++;
}
// 如果临时存储区字符不为0,说明还有分割字符,此时
// 恰好是最后一行时,或者到一行末尾了
if (*p == '\0') {
if (num != 0) {
cnt++;
num = 0;
}
}
}
}
int main() {
init();
split();
for (int i = 0; i < cnt; i++) {
printf("%s\n", cmd[i]);
}
return 0;
}