【全网首个】用中文写汇编代码CASM

【全网首个】用中文写汇编代码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
中文汇编语言源码汉文库名include Include\user32.incincludelib Lib\user32.lib -----以上为库申明-----信息框MessageBox此段为说明第1段为首申明第2段为对应的库申明分割请用“-----申明  分割-----”空格去掉-----申明分割-----创建窗口CreateWindowEx此物参数分别为:扩展风格,类名,窗口标题,风格,屏幕横坐标,屏幕纵坐标,宽度,高度,父窗口句,菜单句,程序句,参数-----申明分割-----显示窗口ShowWindow2个参数  窗口句柄,显示方式简单的说 0隐藏,1显示  SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。  SW_HIDE:隐藏窗口并激活其他窗口。  SW_MAXIMIZE:最大化指定的窗口。  SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。  SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。  SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。  SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。  SW_SHOWMAXIMIZED:激活窗口并将其最大化。  SW_SHOWMINIMIZED:激活窗口并将其最小化。  SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。  SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。  SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。  SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。-----申明分割-----上载窗口UpdateWindow1个参数 窗口句柄-----申明分割-----取进程PIDGetWindowThreadProcessId.参数 窗口句柄, 整数型.参数 进程ID, 整数型, 传址, 提供一个整数型变量存储取到的进程PID
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值