|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
C写多了,回来写汇编 |
作者:Anitya 栏目:单片机 |
感觉那个难啊~~~汗,缓冲区.队列的让我写半天 |
2楼: | >>参与讨论 |
作者: hotpower 于 2004/12/22 11:40:00 发布:
想改都难 但必须了解汇编... |
3楼: | >>参与讨论 |
作者: computer00 于 2004/12/22 11:50:00 发布:
你说汇编在10年之内,会不会被淘汰? |
4楼: | >>参与讨论 |
作者: hotpower 于 2004/12/22 12:03:00 发布:
汇编(代码)是机器能识别的唯一“语言” 淘汰汇编容易,但淘汰编译后生成的代码难。。。 |
5楼: | >>参与讨论 |
作者: computer00 于 2004/12/22 12:08:00 发布:
汇编代码只是助记符,我觉得已经没有必要用汇编语言来开发程序了 机器码才识最终的代码,汇编代码要经过汇编之后才生成机器码。 汇编语言只有那些开发编译器的人才有必要去使用。 |
6楼: | >>参与讨论 |
作者: Anitya 于 2004/12/22 14:48:00 发布:
对于有些有特殊要求的 要么需要对C的技巧和编译器的特点有足够的了解和"耍"的能力,要么用汇编或者只能是汇编.当温习了,还好程序不怎么长.只是个测试程序. |
7楼: | >>参与讨论 |
作者: 宇宙飞船 于 2004/12/22 16:08:00 发布:
看得出贴主的汇编还末入门!连汇编的门在哪里都不知道! |
8楼: | >>参与讨论 |
作者: st_z 于 2004/12/22 23:40:00 发布:
基本上可以这么说 做8Bit 的东西,如果不用汇编,不去了解CPU内部构架,而想仅只通过高级语言来做好东西,或许能写得出好的程序(仅只是对程序而言)但是绝对做不出好的产品的!!! 话说得有些偏激,但是我坚持这个观点! |
9楼: | >>参与讨论 |
作者: 宇宙飞船 于 2004/12/23 8:32:00 发布:
贴主用的是小汇编,当然是没有架构可言了! 目前国内的书上几乎讲的都是小汇编,根本没有架构可言。一个真正的汇编同C是没有区别的。真正的汇编高手也根本不用学C。 汇编也就是C,C 也就是汇编。 小伙子好好去磨练磨练,不要在这里误导初学者。 |
10楼: | >>参与讨论 |
作者: Anitya 于 2004/12/23 8:40:00 发布:
我只同意一半 若不了解,无论是C还是汇编.根本无法下手.更别说做出东西.了解越多,做得越好. C的高效性使人们有更多时间去了解硬件的特性,只是有没有用好的问题. 宇宙飞船的话也正是我迷茫之处,现在感觉自己C不高.汇编不就:( 所以才想慢慢通过一些小的程序,先把汇编补上. 不知道你所谓的汇编的门指什么,有多高?做到什么样我才能算及格? 高兴的是我们谈论的是MCU,而不是禅,有这么多人可以指点,要不然等到我能顿悟,不知道等到何年何月了. |
11楼: | >>参与讨论 |
作者: hudaidai 于 2004/12/23 9:07:00 发布:
其实也没那么玄乎 你就按照C语言函数的规则编写汇编,一般来说是个不错的起点。 通常,混合编程中汇编有两个用途: 1、和CPU密切相关的东西,如初始化建立C运行环境; 2、在效率要求特别高的地方,如部分中断服务程序(短小而经常执行的ISR用汇编可以少保存寄存器),对效率影响特别大的函数(如RTOS调度)。 汇编比较讨厌的地方是处理寄存器覆盖,使用C的规则可以使这个问题简单化(当然也可能损失了一点点效率)。 另外,尽量用可重定位的汇编,通过连接来确定代码和变量的地址。 需要优化的函数,我经常是先用C,对生成的汇编进行手工优化,效率提高最多的往往在循环上,事半功倍。另外,采用这种方式可以让你更深入了解编译器特性,有助于直接用C编写出高效率的代码。 如果编译器能像gcc那样对嵌入汇编支持得好(编译器自动进行慢速C变量到寄存器的装载,能指明破坏了哪些中间寄存器来和编译器协调),可以多采用嵌入汇编(多次使用的模块还可以inline化)。 |
12楼: | >>参与讨论 |
作者: hudaidai 于 2004/12/23 9:27:00 发布:
补充一些 前面主要讲了混合编程中的汇编,这也是大多数项目首先推荐的方法。如果一个项目对效率要求特别高,事情又比较简单,那么可能最好的选择就是全用汇编,这时候最重要的事情就是对寄存器的使用进行预先规划,对各项任务的处理方法进行预先规划。 贴一个2000年写的软件方法捕捉4个uart信号(采样速率38400bps,最高可支持9600bd吧)的DEMO程序,当时我还没找到gcc for avr,嘿嘿。 ;*************************************************************************** ;* S E R I A L P O R T S M O N I T O R U S I N G T H E A V R MCU ;* ;* File NAME :"main.asm" ;* Title :Use ATMEGA103 to MONITOR a serial PORT ;* Date :2000.07.15 ;* Version :0.1 ;* Target MCU :ATMEGA103, 6MHZ ;* ;* DESCRIPTION ;* ;* This is a DEMO program of serial PORT MONITOR. It can capture for serial ;* PORTs in asyn. mod(no parity check, 1 stop bit) with 1200 baud. Further ;* more, the Disk On Chip DEVICE driver is also included. ;* ;*************************************************************************** .include "m103def.inc" ;***** GLOBAL Register Variables .def LSTB =r7 ; Last SAMPLE VALUE of the serial channels. .def SH0 =r8 .def SH1 =r9 .def SH2 =r10 .def SH3 =r11 ; Shift register of the serial channels. .def SCNT0 =r12 .def SCNT1 =r13 .def SCNT2 =r14 .def SCNT3 =r15 ; SAMPLE counter of a bit. .def STS0 =r16 .def STS1 =r17 .def STS2 =r18 .def STS3 =r19 ; Status register of the serial channels. ;***** Bit of the status register. .equ PARITY =0 ; Praity bit of a character. .equ FRMERR =1 ; Frame error flag. .equ IDLE =2 ; LINE idle, waiting for a start bit. .equ RXBT =3 ; Receive a new byte. .def AL =r20 .def AH =r21 ; Regiters used by the SAMPLE ISR. .def RXLEN =r22 .def TXEND =r23 .def TXNOW =r24 .def CMDSTS =r25 ; Command status. .equ MON0 =0 ; MONITOR serial channel 0. .equ MON1 =1 ; MONITOR serial channel 1. .equ MON2 =2 ; MONITOR serial channel 2. .equ MON3 =3 ; MONITOR serial channel 3. .equ DOC =4 ; Search for the DOC. .equ TIME =5 ; DISPLAY time. .equ STTM =6 ; Set time. .equ WAIT =7 ; Wait for a command. .equ CSCLK =PD6 .equ CSDOC =PD5 .equ RUN =PD4 ;***** Slow Variables .dseg MULTI: .byte 4 ; MULTI SAMPLE times in a bit. cbits: .byte 4 ; Bit NUMBER of a character. bcnt: .byte 4 ; Bit counter of a character. dat: .byte 4 ; Data of the serial channels. rxbuf: .byte 25 ; Receive buffer from the terminal. txbuf: .byte 256 ; Transmit buffer to the terminal. |
13楼: | >>参与讨论 |
作者: 宇宙飞船 于 2004/12/23 10:33:00 发布:
楼上贴的只是没有架构可言的小汇编。 |
14楼: | >>参与讨论 |
作者: Anitya 于 2004/12/23 11:35:00 发布:
to 宇宙飞船 你来讲下区别?! 结构上什么不同? 何为小何为大? 拭目以待,虚心听课. |
15楼: | >>参与讨论 |
作者: 宇宙飞船 于 2004/12/23 14:54:00 发布:
老兄,我不是教授,从不授课,只会灌水。 hudaidai 贴的虽然基本上包含了代浮动代码的汇编指令,但是还没有形成架构。 老兄去找一本外国大学5X86汇编的经典教材来看看就会明白的了。 除了数学函数要自已构建,市面上早有张克彦先生为AVR做好数学浮点汇编子程序了。 能否做成一个好的架构就看您定下的目标了。如果您没有做世界一流编译器的远大理想也很难在汇编架构中有所作为! |
16楼: | >>参与讨论 |
作者: hudaidai 于 2004/12/24 9:30:00 发布:
To: 宇宙飞船 我觉得是“内容决定形式”,就我贴的汇编程序而言,工作在6M的Mega103上面,要软件完成4路串口信号的采集(支持尽可能高的波特率),另外就是人机界面的命令行处理,程序结构上比较简单,这里有几个因素决定了把程序写成这种形式: 1、为了高效,所以中断服务程序和主程序使用不同的寄存器; 2、主程序在查询方式对输入的各种命令进行响应,使用两次以上的代码极少,使用子程序只能起到提高可读性的作用,为了效率,直接把命令处理内嵌了,个人觉得利用标号、分段和注释,程序的可读性还凑合。 至于更大的项目,我当然推荐是混合编程,万一没有高级语言编译器,那也要自己模拟编译器用汇编实现模块化(可能就是宇宙飞船所说的“有架构”吧”)。 因为自己在98年设计过80C196上面的RTOS,对用户是高级语言接口,在这个过程中体会到很多,所以强烈推荐通过混合编程提高自己对汇编的认识。 后来主要在Nucleus for 68K、VxWorks for PPC这些平台上面做强实时应用,主要精力在系统分析上,对内容和形式之间的关系关注得更多。 |
17楼: | >>参与讨论 |
作者: azhe5587 于 2004/12/24 18:57:00 发布:
To: 宇宙飞船 推荐几本好的汇编书吧,外国的更好!!谢谢!!1 |
18楼: | >>参与讨论 |
作者: 宇宙飞船 于 2004/12/24 19:52:00 发布:
真不好意思,书放在家里的藏书房的书架上,没放在身边。 太容易得到的东西是不会去珍惜的,从网上找来一个例子,大家慢慢惨悟吧。 请以后不要再讲出汇编会被淘汰的这样的说话了。 //******************************************************************* ; (MACRO.ASM) Example program to show how to use macros (adg). MLIST ON ; show macro expansions in listing DATA EQU $4000 ; start of MEMORY desired for data storage CODE EQU $6000 ; start of MEMORY desired for code storage ADDER MACRO LDAA \1 ; load from first location ADDA \2 ; add in from second location STAA \3 ; store to third location ENDM ORG DATA NUM1 DC.B $10 ; allocate first location, init. to $10 NUM2 DC.B $20 ; allocate second location, init. to $20 NUM3 DS.B 1 ; allocate third location ORG CODE ADDER NUM1,NUM2,NUM3 ; (NUM3)<-(NUM1)+(NUM2) BGND |
19楼: | >>参与讨论 |
作者: gxz207gxz 于 2004/12/27 18:11:00 发布:
我想不会的 |
20楼: | >>参与讨论 |
作者: 微言小蚁 于 2004/12/27 22:13:00 发布:
汇编怎么可能会被淘汰? 汇编怎么可能会被淘汰,大树再高,也得把根扎到土里!只是应用范围小而已! |
21楼: | >>参与讨论 |
作者: waerwu 于 2004/12/28 9:20:00 发布:
不会 汇编语言不会被淘汰,特别是小系统中,直接驱动硬件的系统中,汇编很实用啊,各位老兄,汇编真的很实用,要多加了解! |
22楼: | >>参与讨论 |
作者: cnchip 于 2004/12/28 10:24:00 发布:
呵呵,又要吵起来了! 汇编与C从N年前一直争论到现在,估计还要持续到N年后…… |
23楼: | >>参与讨论 |
作者: Anitya 于 2004/12/28 11:55:00 发布:
我的本意并不是这样 发个帖子来争论谁会被谁淘汰之类的并非我本意. C是好用,所以我常用C来写程序,但是C也有其力所不能及的地方,所以我才会"逼迫"自己回来也写写汇编程序,使自己不至于太生疏:$ |
24楼: | >>参与讨论 |
作者: edmond1000 于 2004/12/28 20:28:00 发布:
我还要考汇编咧 |
25楼: | >>参与讨论 |
作者: 沧海一笑 于 2004/12/28 21:15:00 发布:
搞开发,汇编还是要懂的好,除非你是玩玩! |
26楼: | >>参与讨论 |
作者: dfox 于 2004/12/29 15:54:00 发布:
汇编我能用到的最底层的语言了 |
27楼: | >>参与讨论 |
作者: douzy2008 于 2005/1/4 16:14:00 发布:
汇编有汇编的好处,是高级语言不可替代的。 汇编直接面向底层,写起来虽然麻烦,但对做什么,怎样做,用了什么资源,心中很明白。对实时性要求高的操作比较有保证。多积累一些子程序模块,就会更方便。 |
28楼: | >>参与讨论 |
作者: zps2001 于 2005/1/5 11:13:00 发布:
当然不会 真正的计算机高手都必须懂汇编,而且没有一个黑客会说自己不懂汇编,所以汇编不会被淘汰,它的地位是其他语言都不可取代的。 |
29楼: | >>参与讨论 |
作者: shenhaibo 于 2005/1/5 14:08:00 发布:
用移位寄存器可以实现吗 |
30楼: | >>参与讨论 |
作者: renmingcan 于 2005/1/7 20:20:00 发布:
汇编想说爱你不是件容易的事情! 汇编语言其实很好的 |
31楼: | >>参与讨论 |
作者: 呵呵 于 2010/8/4 19:48:49 发布:
怎么说呢,我们汇编老师就是搞汇编出身的,人家有上亿资产,在我们学习汇编前他就对我们说汇编不会被淘汰,所以我还是很相信他的. |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |