矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3419|回复: 20

弄个中文编译要多少钱左右?

[复制链接]
     
发表于 2019-4-14 00:36:02 来自手机 | 显示全部楼层 |阅读模式
我想弄这个编译软件,不知道要找人写这个软件要多少成本?能实现自定义输入中文指令,自定义输出二进制文件!比如输入:无条件转移,然后软件输出:10101010(机器码),中文指令对应相对应的机器码文件!
     
发表于 2019-4-14 12:31:38 | 显示全部楼层
本帖最后由 yjmwxwx 于 2019-4-14 12:41 编辑

我不会编电脑上用的程序,只会编写单片机上用的简单的程序,用单片机做翻译写到你那个CPU上应该也行。


说下我的思路,在电脑上用文本编辑器用汉字写,然后把这个文件下载到单片机某个地址上,单片机把这个翻译成你需要的机器码下载到你的那个CPU上。


这程序肯定不需要钱,会写电脑上程序的人很容易就能写出来。

我这单片机上的实现的方法有点笨。


用文本编辑器写两个汉字,中间按了三次回车键

截图_2019-04-14_12-04-15.png

看二进制文件

截图_2019-04-14_12-05-25.png

0x9188e6    (我)
0x0a         (换行)
0x0a         (换行)
0x0a         (换行)
0x9188e6  (我)


把这个下载到单片机某个地址,把0x9188e6和单片机汉字表里面的比较,链表数据里面放三个数据,一个指向下一级,另外两个分别是汉字码地址和你要翻译的机器码地址,查到汉字码就查到了机器码。

把查到的机器码写到一个连续的地址里面用来写入你那个CPU






评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-4-14 20:30:47 来自手机 | 显示全部楼层
yjmwxwx 发表于 2019-4-14 12:31
我不会编电脑上用的程序,只会编写单片机上用的简单的程序,用单片机做翻译写到你那个CPU上应该也行。


...

谢谢你了,这个方法不错
回复 支持 反对

使用道具 举报

     
发表于 2019-4-15 00:09:21 | 显示全部楼层

写了个简单的实验,把汉字“我”翻译成10101010。


实验结果

程序下载到0x80000000
0x80000400写入0x0a9188e6, 0x9188e6 = 我 , 0x0a换行
结果放在 0x80000500的0-7位,可以看到是0xaa

截图_2019-04-14_23-53-49.png

简单写了框架,很简单的程序,没什么用。

  1.         @作者:yjmwxwx
  2.         @时间:2019-04-14
  3.         @功能:汉字翻译成机器码
  4.         @cpu:imx6ull
  5.         @运行地址:0x80000000
  6.         @读取汉字所在地址:0x80000400
  7.         @保存机器码地址:0x80000500
  8.         .syntax unified
  9.         .arch armv7-a
  10.         .align 4
  11.         .arm
  12.         .data
  13. __han_zi_ma_biao:
  14.         .int 0x0a9188e6
  15. __ji_qi_ma:
  16.         .int 0xaa
  17. __dan_xiang_lian_biao:
  18.         .word __di_yi_ge
  19. __di_yi_ge:
  20.         .word __di_2_ge, __han_zi_ma_biao, __ji_qi_ma
  21. __di_2_ge:
  22.         .int 0xffffffff
  23. __bao_cun_ji_qi_ma_zhi_zhen:
  24.         .int 0x80000500
  25. __han_zi_ma_zhi_zhen:
  26.         .int 0x80000400
  27.        
  28.         .text
  29. __han_zi_zhuan_ji_qi_ma:
  30. __du_han_zi_ma_wen_jian:
  31.         ldr r0, = __han_zi_ma_zhi_zhen
  32.         ldr r1, [r0]
  33. __cha_zhao_ji_qi_ma:
  34.         ldr r3, = __dan_xiang_lian_biao
  35.         ldr r3, [r3]
  36.         add r3, r3, # 4
  37.         ldr r2, [r3]
  38.         bl __bi_jiao_han_zi_ma
  39.         cmp r0, # 0
  40.         it ne
  41.         bne ting
  42.         add r3, r3, # 4
  43.         ldr r0, [r3]
  44.         bl __bao_cun_ji_qi_ma
  45. ting:
  46.         b ting
  47.        
  48. __bi_jiao_han_zi_ma:
  49.         push {r3,r4,lr}
  50. __bi_jiao_han_zi_ma_xun_huan:       
  51.         ldrb r3, [r1], # 1
  52.         ldrb r4, [r2], # 1
  53.         cmp r3, # 0x0a
  54.         ite eq
  55.         beq __han_zi_ma_xiang_tong
  56.         cmpne r3, r4
  57.         ite ne
  58.         bne __han_zi_ma_bu_tong
  59.         beq __bi_jiao_han_zi_ma_xun_huan
  60. __han_zi_ma_xiang_tong:
  61.         mov r0, # 0
  62.         pop {r3,r4,pc}
  63. __han_zi_ma_bu_tong:
  64.         mov r0, # 1
  65.         pop {r3,r4,pc}
  66. __bao_cun_ji_qi_ma:
  67.         ldr r0, [r0]
  68.         ldr r2, = __bao_cun_ji_qi_ma_zhi_zhen
  69.         ldr r1, [r2]
  70.         strb r0, [r1], # 1
  71.         str r1, [r2]
  72.         bx lr
  73.         .end
复制代码


评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2019-4-15 07:38:10 | 显示全部楼层
现在的计算机不是以汉字为基的,系统上打入的汉字本来就是二进制码,您的这种做法不过是把一种二进制编码换成另一种二进制编码表示而已。

一碗豆腐,豆腐一碗。
回复 支持 反对

使用道具 举报

     
发表于 2019-4-15 11:37:53 | 显示全部楼层
比如输入:无条件转移,然后软件输出:10101010(机器码)
++++++++++++++
那么 k 呢?
1100 kkkk kkkk kkkk RJMP k

同样的比如 LDI Rd,k
1110 kkkk dddd kkkk

你都没约定怎么写?

回复 支持 反对

使用道具 举报

     
发表于 2019-4-15 11:58:59 | 显示全部楼层
本帖最后由 壹法拉 于 2019-4-15 12:04 编辑

别把编译器想的那么简单;
网上有农民自己造汽车,造潜艇,造飞机;看上去也行,也能开动!

我不是媚外,以前盗版碟狂卖的年代,我遇到汉化的或者带汉化包的编程工具都不用,只用原版的;
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-4-15 13:09:15 来自手机 | 显示全部楼层
washu 发表于 2019-4-15 11:37
比如输入:无条件转移,然后软件输出:10101010(机器码)
++++++++++++++
那么 k 呢?

定义几十个中文关键字,其它无效,报错,一行一行翻译,检查一行的中文和关键字对比,没有就输出错误,正确就输出对应机器码
回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 04:23:37 | 显示全部楼层
轮子已经被人创造出来, 何苦又要再来一次?
回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 04:26:55 | 显示全部楼层
yjmwxwx 发表于 2019-4-15 00:09
写了个简单的实验,把汉字“我”翻译成10101010。

你懂编匯语言,不懂宏定义吗?
回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 04:33:11 | 显示全部楼层
本帖最后由 raysin 于 2019-4-17 04:35 编辑

随便使用一个编匯语言, 有宏定义和支援中文的

.MACRO 空操作
DB        0x0,0x0
.ENDMACRO


.MACRO A到 $1
DB        0x21,$1
.ENDMACRO


.MACRO 立即数到A $1
DB        0x1E, $1
.ENDMACRO


.MACRO A加到 $1
DB        0x17, $1
.ENDMACRO

编译程式最后便会输出,执行档的数组
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-4-17 06:30:45 来自手机 | 显示全部楼层
本帖最后由 分立元件 于 2019-4-17 06:35 编辑
raysin 发表于 2019-4-17 04:33
随便使用一个编匯语言, 有宏定义和支援中文的

.MACRO 空操作


这个直接输出二进制文件了吗?不知道keil支不支持
回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 11:25:15 | 显示全部楼层
我没有使用 k e i l,  翻查他的网上文件, 可以这样做



        MACRO
$label  空操作
$label  DCB        #0, #0
        MEND


        MACRO
$label  A到RAM        $X
$label  DCB        #71, $X
        MEND


        MACRO
$label  RAM到A        $X
$label  DCB        #1A, $X
        MEND



signed char        M1, M2        ; M1地址=0 M2地址=1
;

        AREA        MAIN, CODE, READONLY

        ENTRY

        RAM到A        M1        ; 编译為 1A, 0

        空操作                ; 编译為 0, 0

        A到RAM        M2        ; 编译為 71, 1


        END

评分

2

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 12:04:35 | 显示全部楼层
raysin 发表于 2019-4-17 04:26
你懂编匯语言,不懂宏定义吗?


确实不懂,从来没用过宏汇编,都是直接写机器指令。
回复 支持 反对

使用道具 举报

     
发表于 2019-4-17 14:34:29 | 显示全部楼层

现学现卖,这方法确实简单,不过要有编译器软件。

GNU AS的汇编器


  1.         .macro  空操作
  2.         .short   0x0000
  3.         .endm

  4.         .macro  A到B
  5.         .short   0x2100
  6.         .endm

  7.         .macro 立即数到A t:vararg
  8.         .short   0x100\t
  9.         .endm

  10.         .macro  A加B
  11.         .short   0x1700
  12.         .endm
  13.        
  14.         .macro  A减B
  15.         .short   0x1800
  16.         .endm
  17.        
  18.         .macro  无条件转移
  19.         .short   0x0b00
  20.         .endm
  21.        
  22.         .macro  为零转移
  23.         .short   0x0c00
  24.         .endm
  25.        
  26.         .macro  不为零转移
  27.         .short   0x0d00
  28.         .endm
  29.        
  30.         .macro  A到RAM
  31.         .short   0x7100
  32.         .endm
  33.         .macro  RAM到A
  34.         .short   0x1a00
  35.         .endm

  36. .section .text               
  37.         立即数到A t=5
  38.         A到B
  39.         A到RAM
  40.         A减B
  41.         不为零转移
复制代码


结果可以看到汉字的五条指令,每条指令16位。

1.png


评分

1

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 01:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表