【全网首个】用中文写汇编代码CASM汇编语言
casm是以nasm为基础的汇编语言
一、下载
网上只有Windows64的程序下载,但是可以用它的开源代码自己写
官网:CASM官网

下载按钮全部点了
按下载程序源代码可以看到源代码
二、运行
注意:需要有GCC的环境,这里假设已经设置好环境变量
双击运行CODE_OF_CASM.exe
点击模式,选择casm
点击文件->打开,打开 测试.汇编 文件

可以看到里面的内容
双击打开CASM.exe
模式输入 -r
源文件输入 测试.汇编
目标文件写123

运行成功!
在打开终端,输入.\123也很成功地打印 123hhh
三、解析
发现生成了汇编asm文件,obj目标文件和exe可执行文件
类似一个编译器
使用nasm型语法和gcc链接器
根据以下规则编译
std::unordered_map<std::string, std::string> conversionDict = {
{"导入", "%include"},
{"声明", "extern"},
{"打印", "puts"},
{",", ","},
{"。", "."},
{":", ":"},
{";", ";"},
{"¥", "$"},
{"【", "["},
{"】", "]"},
{"“", "'"},
{"”", "'"},
{"回车", "0ah"},
{"定义段", "SECTION .data"},
{"代码段", "SECTION .text"},
{"预留段", "SECTION .bss"},
{"定义常量", "equ"},
{"定义", "db"},
{"预留字节", "resb"},
{"预留字", "resw"},
{"预留双字", "resd"},
{"预留双精度浮点数", "resq"},
{"预留扩展精度浮点数", "rest"},
{"全局", "global"},
{"主函数", "main"},
{"赋值", "mov"},
{"中断", "int"},
{"跳转", "jmp"},
{"比较", "cmp"},
{"相等跳转", "je"},
{"非相等跳转", "jne"},
{"大于跳转", "jg"},
{"小于跳转", "jl"},
{"大等跳转", "jge"},
{"小等跳转", "jle"},
{"非大于跳转", "jng"},
{"非小于跳转", "jnl"},
{"加", "add"},
{"减", "sub"},
{"乘", "mul"},
{"除", "div"},
{"出栈", "pop"},
{"进栈", "push"},
{"返回", "ret"},
{"调用", "call"},
{"栈顶", "rsp"}
};
程序很简单,上源代码
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <unordered_map>
#include <exception>
void assembleWithNasm(const std::string& objFilePath, const std::string& asmFilePath, const std::string& exeFilePath) {
std::string nasmCommand = "nasm -f win64 -o " + objFilePath + " " + asmFilePath;
int result = std::system(nasmCommand.c_str());
if (result!= 0) {
throw std::runtime_error("编译失败");
}
std::st

最低0.47元/天 解锁文章
6350

被折叠的 条评论
为什么被折叠?



