数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4497|回复: 15

[other] 哪个单片机架构的汇编语言最优雅?

[复制链接]
发表于 2020-12-11 09:57:20 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
纯调查
1. 8051
2. AVR
3. ARM
4. PIC
5. MSP430
6. C166
7. Z80
8. 6502
9. 6805
10. STM8
11. H8

或者其他
发表于 2020-12-11 10:06:57 | 显示全部楼层
汇编有优雅一说吗?C还能看,汇编各种跳转能优雅?
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-11 10:11:14 | 显示全部楼层
楼主有点闲,dan
回复 支持 反对

使用道具 举报

发表于 2020-12-11 10:15:11 | 显示全部楼层
汇编都一样吧
回复 支持 反对

使用道具 举报

发表于 2020-12-11 10:23:52 | 显示全部楼层
感觉PIC命令最少,所以曾经玩了一阵PIC汇编。:lol::lol::lol:
回复 支持 反对

使用道具 举报

发表于 2020-12-11 11:00:20 | 显示全部楼层
优雅的代码和单片机没关系吧?和写代码的人关系密切,没有模块化的一条路写到底的代码,看到你头晕,特别是各种变量定义。
回复 支持 反对

使用道具 举报

发表于 2020-12-12 00:10:24 来自手机浏览器 | 显示全部楼层
MCS-51我熟悉
回复 支持 反对

使用道具 举报

发表于 2020-12-12 15:28:24 | 显示全部楼层
优雅与否看个人。
写成意大利面条一样的东西(特别是ASM,有人最喜欢这样写),无论什么语言,都跟一坨屎一样。

打赏

参与人数 1家元 +20 收起 理由
2545889167 + 20

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-12 21:21:28 | 显示全部楼层
温力口 发表于 2020-12-11 10:23
感觉PIC命令最少,所以曾经玩了一阵PIC汇编。

写乘法和除法的时候一定口吐芬芳。

打赏

参与人数 1家元 +20 收起 理由
广东梁百万 + 20 我很贊同

查看全部打赏

回复 支持 2 反对 0

使用道具 举报

发表于 2020-12-12 23:18:11 | 显示全部楼层
595953427@qq 发表于 2020-12-12 21:21
写乘法和除法的时候一定口吐芬芳。

确实如此,指令集简单不是好事,虽然容易记,但实际使用会很麻烦,一些简单的功能本来一两条指令就解决,然而简单指令集却要一大堆指令才能完成
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-14 09:56:02 | 显示全部楼层
gdyaojie 发表于 2020-12-11 11:00
优雅的代码和单片机没关系吧?和写代码的人关系密切,没有模块化的一条路写到底的代码,看到你头晕,特别是 ...

话虽这么说,但看到一个老外主导的6502逆向工程演说,他认为6502的指令设计得非常好。各个平台差别还是有的
回复 支持 反对

使用道具 举报

发表于 2020-12-14 10:24:00 来自手机浏览器 | 显示全部楼层
优雅的话还是上机器码吧…
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-21 20:43:47 | 显示全部楼层
活用宏,写好底层公用库,写好了和C没多大区别.
回复 支持 反对

使用道具 举报

发表于 2020-12-21 20:47:30 | 显示全部楼层
有人认识这什么MCU么“CalMul:
        call        CalClearNumC
        call        CalPoint_A
        call        CalNumZero
        jz                CalMul_End
        call        CalClearNumD
        call        CalPoint_B
        call        CalNumZero
        jz                CalMul_End
        lda                calA+CALNUM_SIGN
        eor                calB+CALNUM_SIGN
        sta                calC+CALNUM_SIGN
        lds                Ry3,0
        lda                calA+CALNUM_DOT
        add                calB+CALNUM_DOT
        sta                Ry0
        adci*        Ry3,0                               
        subi        Ry0,CALNUMMAX               
        sta                calC+CALNUM_DOT
        sbci*        Ry3,0
        ;
        lds                Ry2,CALNUMMAX-1               
CalMul_loop:
        INDEX        (calB+CALNUM_MSB)       
        lda                Ry2
        INDEXaddA
        mwr#        Ry0,@hl
        lds                Ry1,0                               
CalMul_loop2:
        lda                Ry0
        jz                CalMul_Next
        dec*        Ry0                                       
        lda                calA+CALNUM_LSB-0
        add                calC+CALNUM_LSB-0
        daa*        calC+CALNUM_LSB-0
        lda                calA+CALNUM_LSB-1
        adc                calC+CALNUM_LSB-1
        daa*        calC+CALNUM_LSB-1
        lda                calA+CALNUM_LSB-2
        adc                calC+CALNUM_LSB-2
        daa*        calC+CALNUM_LSB-2
        lda                calA+CALNUM_LSB-3
        adc                calC+CALNUM_LSB-3
        daa*        calC+CALNUM_LSB-3
        lda                calA+CALNUM_LSB-4
        adc                calC+CALNUM_LSB-4
        daa*        calC+CALNUM_LSB-4
        lda                calA+CALNUM_LSB-5
        adc                calC+CALNUM_LSB-5
        daa*        calC+CALNUM_LSB-5
        lda                calA+CALNUM_LSB-6
        adc                calC+CALNUM_LSB-6
        daa*        calC+CALNUM_LSB-6
        lda                calA+CALNUM_LSB-7
        adc                calC+CALNUM_LSB-7
        daa*        calC+CALNUM_LSB-7
        adci*        Ry1,0
        jmp                CalMul_loop2
CalMul_Next:
        call        CalPoint_D
        call        CalShiftNumR
        LMR                calC+CALNUM_LSB,calD+CALNUM_MSB
        call        CalPoint_C
        call        CalShiftNumR
        LMR                Ry1,calC+CALNUM_MSB               
        dec*        Ry2
        jc                CalMul_loop
CalMul_Judge:
        lda                calC+CALNUM_MSB
        jnz                CalMul_Judge2
        call        CalPoint_C
        call        CalShiftNumL
        LMR                calD+CALNUM_MSB,calC+CALNUM_LSB
        call        CalPoint_D
        call        CalShiftNumL
        inc*        calC+CALNUM_DOT
        adci*        Ry3,0
        jmp                CalMul_Judge
CalMul_Judge2:
        lda                Ry3                                               
        JNB3        CalMul_End
CalMul_Overflow:                               
        lds                Ry0,15
        eor*        calC+CALNUM_DOT
        inc*        calC+CALNUM_DOT
        lds                Ry0,CALNUMMAX
        lda                calC+CALNUM_DOT
        sub*        Ry0                                       
        sta                calC+CALNUM_DOT
        jmp                CalOverflow       
CalMul_End:
        lda                Ry3
        jz                CalNumFormat
        call        CalPoint_C       
        call        CalShiftNumR
        dec*        calC+CALNUM_DOT
        sbci*        Ry3,0
        jmp                CalNumFormat


回复 支持 反对

使用道具 举报

发表于 2021-1-25 13:18:00 | 显示全部楼层
6502 没有之一,用过很多单片机的汇编,就6502最好,优雅谈不上,同样的功能6502做起来最方便
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-22 22:37 , Processed in 0.249600 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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