[学习资料] Microchip单片机固定时间片轮询调度汇编代码

[复制链接]
 楼主| 过期的塔头 发表于 2021-10-31 22:53 | 显示全部楼层 |阅读模式
这是一个能在PIC16F877A开发板上运行的固定时间片轮询调度汇编程序代码。

为什么要用时间片轮询调度?

假如我们要写一个单片机程序,程序的目的就是用GPIO控制一个灯亮一秒再暗一秒…最简单的写法是用循环来计时,循环n次凑够一秒钟时间,然后去把GPIO的值反一下,然后再继续循环一秒钟…

这样写程序的问题就是,这个程序除了闪灯之外就啥也不能做了,给GPIO赋值只需要一秒钟执行一条指令,并没有消耗什么CPU资源。但CPU资源都浪费在了循环上。所以这种写法在实际应用中基本上是不可取的,而且这样计时也不够精确。

高级一点的写法是用单片机里面的硬件计时器,定时一秒钟,时间到了会触发中断,在中断响应程序中去赋值GPIO点灯。这样CPU在其它时间就空闲了可以干别的事情。但这样写法也有问题,那就是单片机里面的硬件计时器个数是有限的,如果有很多功能都需要定时,计数器不够了怎么办?

解决这个问题的一种方法就是时间片轮询调度法,调度的就是CPU的资源,也就是不同时间片会执行不同的程序。其实现在的操作系统底层都会用这种时间片调度法,也就是分时复用。某个时间片里执行的完成某项功能的程序就类似于一个线程。

 楼主| 过期的塔头 发表于 2021-10-31 22:54 | 显示全部楼层
该程序干了啥?

程序在开发板上实现了秒表,流水灯,按键检测等几个功能。具体可见代码前面的注释。流水灯一秒走一次,码表100ms加一,按键检测需要10ms检测一次按键值进行按键去抖,数码管需要2ms循环刷新。所以这个程序需要很多个不同时间的定时。其基本程序是一个200μs的时间片循环,然后通过对时间片进行计数,并对这些计数进行判断来决定该在合适调用哪个子程序。具体时间片的分布图,和程序流程图可见“TimeSlice流程图.vsd”文件。
 楼主| 过期的塔头 发表于 2021-10-31 22:55 | 显示全部楼层

本帖子中包含更多资源

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

×
 楼主| 过期的塔头 发表于 2021-10-31 22:56 | 显示全部楼层
  1. #INCLUDE<P16F877A.INC>
  2. __CONFIG 3F32H
  3. ;四个数码管右边两个实现了一个秒表,四个红色按键按最右边的K20一个这两个数会减一,按K19会加一。按K18会切换秒表的停止和开始,按K17数字清零
  4. ;数码管左边两个数字会显示执行程序最多的那个时间片在程序执行完了之后TMR0计时器的计数值,16进制。注意TMR0的计数是从初值28开始的

  5. ;............初始化一些值..............;
  6. K_TMR0_200us    EQU  d'28'       ;给TMR0赋初值的立即数,具体的根据实际来调整;在18.432M下,这个值设28,TMR0计时大约就是200μs
  7. F_CNT1ms        EQU  020H        ;用来计数产生1ms时间块
  8. F_CNT10ms       EQU  021H        ;用来计数产生10ms时间块
  9. F_CNT100ms      EQU  022H        ;用来计数产生100ms时间块
  10. F_CNT1s         EQU  023H        ;用来计数产生1s时间块
  11.                                  
  12. F_X200us        EQU  024H        ;用来设置进入第X个200us时间块
  13. F_X1ms          EQU  025H        ;用来设置进入第X个1ms时间块
  14. F_X10ms         EQU  026H        ;用来设置进入第X个10ms时间块
  15. F_X100ms        EQU  027H        ;用来设置进入第X个100ms时间块
  16. F_LED           EQU  028H        ;用于LED显示

  17. F_NUM_SEL       EQU  029H        ;用于数码管位选
  18. F_NUM0          EQU  02AH        ;数码管显示数值,0是最右边的那个
  19. F_NUM1          EQU  02BH        ;
  20. F_NUM2          EQU  02CH        ;
  21. F_NUM3          EQU  02DH        ;
  22. F_KEY0          EQU  02EH        ;用于移位寄存按键输入,进行按键检测
  23. F_KEY1          EQU  02FH        ;
  24. F_KEY2          EQU  030H        ;
  25. F_KEY3          EQU  031H        ;
  26. F_NUMCTRL       EQU  032H        ;第0位用于控制秒表的停止和开启
  27. F_W             EQU  033H        ;用来暂存W
  28. F_TMR0MAX       EQU  034H        ;缓存TMR0最大值,用来查看哪个时间片耗时最多,这个值会显示在数码管的左边两位,16进制


  29. ;............主  程  序..............;
  30.    ORG                                0000H                           ;定义程序存放区域的地址
  31. MAIN                             
  32.    NOP                           ;设置一条ICD必须的空操作指令
  33.    CALL     PORT_INIT            ;调用端口初始化
  34.    BSF      STATUS,RP0           ;设置文件寄存器为体1
  35.    MOVLW    01H                                     ;设置选项寄存器的值;00:2分频,01:4分频;
  36.    MOVWF    OPTION_REG                 ;将00H赋值给选项寄存器 内部时钟源,4分频,将时钟分配给TMR0
  37.    BCF      STATUS,RP0                 ;回到体0
  38.    CLRF     INTCON               ;关中断,清溢出
  39.    CALL     REG_INIT             ;调用各寄存器赋初值
  40.    
  41. LOOP_MAIN                        
  42.    BCF                            INTCON,2         ;TMR0溢出清除
  43.    MOVLW                    K_TMR0_200us     ;TMR0初值
  44.    MOVWF                    TMR0                   ;给TMR0重新启动定时计数
  45.    
  46. ;.....计数产生1ms时间块.....;      
  47.    DECFSZ       F_CNT1ms,F       ;自减1,d为1,存回F,结果为零则跳一步
  48.    GOTO         ELSE_1ms         ;
  49.    MOVLW        d'5'             ;结果为零则赋回初值5,并执行下面的计数
  50.    MOVWF        F_CNT1ms         
  51. ;.....计数产生10ms时间块....;   
  52.    DECFSZ       F_CNT10ms,F      
  53.    GOTO         ELSE_1ms         
  54.    MOVLW        d'10'            ;结果为零则赋回初值10
  55.    MOVWF        F_CNT10ms      
  56. ;.....计数产生100ms时间块...;   
  57.    DECFSZ       F_CNT100ms,F     
  58.    GOTO         ELSE_1ms         
  59.    MOVLW        d'10'            ;结果为零则赋回初值10
  60.    MOVWF        F_CNT100ms         
  61. ;.....计数产生1s时间块......;   
  62.    DECFSZ       F_CNT1s,F        
  63.    GOTO         ELSE_1ms         
  64.    MOVLW        d'10'            ;结果为零则赋回初值10
  65.    MOVWF        F_CNT1s
  66. ELSE_1ms
  67. ;.....时间块产生结束.........;   

  68. ;.....选择某个时间片执行程序.;
  69.   ;......5号200us时间片......;
  70.    MOVLW        05H
  71.    XORWF        F_CNT1ms,W        ;比较是否相等
  72.    BTFSS        STATUS,Z          ;如果相等就跳过   
  73.    GOTO         END_IF200us_5
  74.   ;是5号200us时间片就执行这些程序  
  75.    MOVLW        d'10'                    
  76.    MOVWF        F_X1ms             
  77.    MOVLW        d'10'                  
  78.    MOVWF        F_X10ms         
  79.    MOVLW        d'5'                    
  80.    MOVWF        F_X100ms      
  81.    CALL         Enter_x100ms.x10ms.x1ms  ;进入5.10.10这个时间片
  82.    BTFSS        STATUS,Z         
  83.    GOTO         END_5_10_10              ;不是就跳到结束
  84.    CALL         LED_RUN                  ;是5.10.10这个时间片就调用需要执行的程序,跑马灯,1秒灯走一次  
  85.    CALL         TMR0MAX_DISPLAY          ;显示耗时最长时间片程序结束是TRM0的值
  86. END_5_10_10   
  87.    MOVLW        d'5'                    
  88.    MOVWF        F_X1ms             
  89.    MOVLW        d'8'                  
  90.    MOVWF        F_X10ms         
  91.    MOVF         F_CNT1s,W                           
  92.    MOVWF        F_X100ms                 ;让这个参数等于现在的计数就相当于忽略这个计数
  93.    CALL         Enter_x100ms.x10ms.x1ms  
  94.    BTFSS        STATUS,Z         
  95.    GOTO         END_x_8_8              
  96.    CALL         NUM_RUN                  ;是x.9.9这个时间片就调用需要执行的程序  
  97. END_x_8_8   
  98.    
  99. END_IF200us_5

  100. ;......4号200us时间片......;
  101.    MOVLW        04H
  102.    XORWF        F_CNT1ms,W        ;比较是否相等
  103.    BTFSS        STATUS,Z          ;如果相等就跳过   
  104.    GOTO         END_IF200us_4
  105.   ;是4号200us时间片就执行这些程序
  106.    MOVLW        09H
  107.    XORWF        F_CNT10ms,W       ;比较是否相等
  108.    BTFSS        STATUS,Z          ;如果相等就跳过   
  109.    GOTO         END_IF200us_4
  110.   ;..进入9号1ms时间片
  111.    CALL         KEY_DETECT        ;按键检测,10ms一次
  112.   
  113. END_IF200us_4

  114. ;......3号200us时间片......;
  115.    MOVLW        03H
  116.    XORWF        F_CNT1ms,W        ;比较是否相等
  117.    BTFSS        STATUS,Z          ;如果相等就跳过   
  118.    GOTO         END_IF200us_3
  119.   ;是3号200us时间片就执行这些程序
  120.    BTFSS        F_CNT10ms,0       ;是偶数就去刷数码管,2ms刷一次
  121.    CALL         DISPLAY_NUM                                                     

  122. END_IF200us_3
  123.      
  124.          
  125. ;.....产生测试波形..........;
  126.    MOVLW        01H
  127.    XORWF        F_CNT1ms,W       ;比较是否相等
  128.    BTFSS        STATUS,Z           ;如果相等就跳过
  129.    GOTO         ELSE1            
  130.    BCF          PORTB,RB5   
  131.    GOTO         END_IF1
  132. ELSE1
  133.    BSF                        PORTB,RB5   
  134. END_IF1

  135. ;...找出时间片最大占用率...;
  136.    MOVF     TMR0,0
  137.    SUBWF    F_TMR0MAX,W       ;MAX的值减去TMR0
  138.    BTFSC    STATUS,C         
  139.    GOTO     FINDMAX_ELSE
  140.    MOVF     TMR0,W            ;小于就跳到这
  141.    MOVWF    F_TMR0MAX           
  142.    BCF                  PORTB,RB4
  143.    GOTO     FINDMAX_END
  144. FINDMAX_ELSE
  145.    MOVF     TMR0,W
  146.    SUBWF    F_TMR0MAX,W      
  147.    BTFSC    STATUS,C
  148.    GOTO     FINDMAX_ELSE
  149.    BCF                PORTB,RB4
  150. FINDMAX_END   
  151.    
  152.    BCF                        PORTB,RB4             ;输出置0,从RB4端口输出波形用

  153. ;检测TMR0是否有溢出,移出就跳出LOOP_OF,跳回LOOP_MAIN
  154. LOOP_OF                     
  155.    BTFSS    INTCON,2              ;如果溢出,跳过GOTO LOOP_OF
  156.    GOTO     LOOP_OF               
  157.    BSF      PORTB,RB4             ;跳到这条了
  158.    GOTO     LOOP_MAIN


  159. ;............主程序结束..............;
  160. ;.......................................这是一条主程序和子程序的分割线................................;
  161.    
  162. ;......数码管查表子程序.........;
  163. NUM_TABLE
  164.    MOVWF     F_W
  165.    SUBLW     d'16'               ;判断是否大于16,大于就不能查表,返回个-
  166.    MOVF      F_W,W
  167.    BTFSS     STATUS,C
  168.    RETLW     03FH
  169.    ADDWF     PCL,F
  170.    RETLW     0C0H
  171.    RETLW     0F9H
  172.    RETLW     0A4H
  173.    RETLW     0B0H
  174.    RETLW     099H
  175.    RETLW     092H
  176.    RETLW     082H
  177.    RETLW     0F8H
  178.    RETLW     080H
  179.    RETLW     090H
  180.    RETLW     088H
  181.    RETLW     083H
  182.    RETLW     0C6H
  183.    RETLW     0A1H
  184.    RETLW     086H
  185.    RETLW     08EH
  186.    RETLW     0BFH
  187.    
  188. ;....进入x100ms.x10ms.x1ms时间片子程序..;
  189. Enter_x100ms.x10ms.x1ms
  190.    MOVF     F_X1ms,W             ;把F_X1ms参数值送到W;
  191.    XORWF    F_CNT10ms,W          ;比较是否相等,相等时结果为0,送到了W  
  192.    BTFSS    STATUS,Z             ;如果相等就跳过下一条
  193.    GOTO     END_Enter_xxx        ;不想等就直接结束,此时W中的值不为0
  194.    MOVF     F_X10ms,W            ;把F_X10ms参数值送到W;               
  195.    XORWF    F_CNT100ms,W         ;比较是否相等,相等时结果为0,送到了W  
  196.    BTFSS    STATUS,Z             ;如果相等就跳过下一条
  197.    GOTO     END_Enter_xxx        ;不想等就直接结束,此时W中的值不为0
  198.    MOVF     F_X100ms,W           ;把F_X100ms参数值送到W;               
  199.    XORWF    F_CNT1s,W            ;比较是否相等,相等时结果为0,送到了W              
  200.          
  201. END_Enter_xxx                    ;如果相等W就是0,标志位Z就是1
  202.    return
  203. ;....把F_TMR0MAX的值给数码管....;
  204. TMR0MAX_DISPLAY
  205.   MOVF      F_TMR0MAX,W   
  206.   ANDLW     b'00001111'
  207.   MOVWF     F_NUM2
  208.   MOVF      F_TMR0MAX,W
  209. ANDLW     b'11110000'
  210.   MOVWF     F_NUM3
  211.   SWAPF     F_NUM3     
  212.   return
  213. ;.........跑马灯子程序..........;
  214. LED_RUN
  215.    BSF                        PORTC,RC5            ;开启LED的锁存使能
  216.    MOVF     F_LED,W
  217.    MOVWF    PORTD
  218.    BCF                        PORTC,RC5            ;关闭LED的锁存使能
  219.    ;循环左移F_LED
  220.    BCF      STATUS,C             ;是0进位就设0
  221.    BTFSC    F_LED,7              ;看最左边是0是1,是0则跳
  222.    BSF      STATUS,C             ;是1进位就设1
  223.    RLF      F_LED,1              ;移位产生跑马效果   
  224.    return
  225.    
  226. ;...........秒表子程序...........;
  227. NUM_RUN
  228.   BTFSC  F_NUMCTRL,0             ;控制第0位是0就不加秒表
  229.   CALL   NUM_ADD
  230.   return
  231.   
  232. ;..........秒表加...............;
  233. NUM_ADD
  234.    MOVLW     09H
  235.    XORWF     F_NUM0,W
  236.    BTFSS     STATUS,Z               ;如果相等就跳过下一条
  237.    GOTO      Add1_F_NUM0
  238.    CLRF      F_NUM0                 ;加到9就清零
  239.    MOVLW     09H
  240.    XORWF     F_NUM1,W
  241.    BTFSS     STATUS,Z             ;如果相等就跳过下一条
  242.    GOTO      Add1_F_NUM1
  243.    CLRF      F_NUM1
  244.    GOTO      Add1_F_NUM1_END
  245.   Add1_F_NUM1
  246.      INCF      F_NUM1,F   
  247.   Add1_F_NUM1_END   
  248.    GOTO      Add1_F_NUM0_END  
  249. Add1_F_NUM0
  250.    INCF      F_NUM0,F
  251. Add1_F_NUM0_END           
  252.    return
  253. ;..........秒表减...............;
  254. NUM_SUB
  255.    MOVLW    09H
  256.    MOVF     F_NUM0,F
  257.    BTFSS    STATUS,Z                 ;等于0就去再设为9
  258.    GOTO     SUB1_F_NUM0     
  259.    MOVWF    F_NUM0                   ;设为9
  260.    MOVF     F_NUM1,F
  261.    BTFSS    STATUS,Z               ;等于0就去再设为9
  262.    GOTO     SUB1_F_NUM1     
  263.    MOVWF    F_NUM1                 ;设为9
  264.    GOTO     SUB1_NUM1_END
  265.    SUB1_F_NUM1
  266.    DECF     F_NUM1,F
  267.    SUB1_NUM1_END  
  268.    GOTO     SUB1_NUM0_END
  269. SUB1_F_NUM0
  270.    DECF     F_NUM0,F
  271. SUB1_NUM0_END
  272.    
  273.    return
  274. ;......数码管显示子程序.........;
  275. DISPLAY_NUM
  276.    MOVF     F_NUM_SEL,W
  277.    BSF      PORTC,RC4            ;开启位选的锁存使能
  278.    MOVWF    PORTD                ;输出位选
  279.    BCF                        PORTC,RC4            ;关闭位选的锁存使能
  280.   ;....根据位选从寄存器中读出相应位的值
  281.    BTFSC    F_NUM_SEL,0          ;为0跳过,继续判断其它位
  282.    GOTO     DISPLAY0
  283.    BTFSC    F_NUM_SEL,1          ;为0跳过,继续判断其它位
  284.    GOTO     DISPLAY1
  285.    BTFSC    F_NUM_SEL,2          ;为0跳过,继续判断其它位
  286.    GOTO     DISPLAY2
  287.    BTFSC    F_NUM_SEL,3          ;为0跳过,继续判断其它位
  288.    GOTO     DISPLAY3

  289. DISPLAY0
  290.    MOVF     F_NUM0,W
  291.    GOTO     END_NUM_SELECT  
  292. DISPLAY1
  293.    MOVF     F_NUM1,W
  294.    GOTO     END_NUM_SELECT
  295. DISPLAY2
  296.    MOVF     F_NUM2,W
  297.    GOTO     END_NUM_SELECT   
  298. DISPLAY3
  299.    MOVF     F_NUM3,W
  300.    GOTO     END_NUM_SELECT  
  301.    
  302. END_NUM_SELECT     
  303.   ;......把W里的数值查表转换成显示码
  304.    CALL     NUM_TABLE            ;查表转码
  305.    BSF      PORTC,RC3            ;开启段选的锁存使能
  306.    MOVWF    PORTD                ;输出段选
  307.    BCF      PORTC,RC3            ;关闭段选的锁存使能
  308.    
  309.    ;循环左移F_NUM_SEL
  310.    BCF      STATUS,C             ;是0进位就设0
  311.    BTFSC    F_NUM_SEL,7          ;看最左边是0是1,是0则跳
  312.    BSF      STATUS,C             ;是1进位就设1   
  313.    RLF      F_NUM_SEL,F          ;移位循环刷数码管
  314.    return

  315. ;......按键检测子程序...........;
  316. KEY_DETECT
  317.   ;...检测按键K17,RB0...;  
  318.   BCF      STATUS,C             ;先把进位清零
  319.   BTFSC    PORTB,W              
  320.   BSF      STATUS,C             ;按键输入是1就把进位设为1
  321.   RLF      F_KEY0               ;每10毫秒把按键输入移位寄存到这个寄存器里面
  322.   MOVLW    b'11110000'          ;这个序列检测开始按下
  323.   XORWF    F_KEY0,W            
  324.   BTFSS    STATUS,Z             ;如果相等就跳过下一条
  325.   GOTO     END_KEY_DETECTK17_1
  326.   CLRF     F_NUM0
  327.   CLRF     F_NUM1
  328.   CLRF     F_NUM2
  329.   CLRF     F_NUM3
  330. END_KEY_DETECTK17_1
  331.   MOVLW    b'00000000'          ;这个序列检测一直按下
  332.   XORWF    F_KEY0,W            
  333.   BTFSS    STATUS,Z             ;如果相等就跳过下一条
  334.   GOTO     END_KEY_DETECTK17_2
  335.   CLRF     F_NUM0
  336.   CLRF     F_NUM1
  337.   CLRF     F_NUM2
  338.   CLRF     F_NUM3
  339. END_KEY_DETECTK17_2
  340.   ;...检测按键K18,RB1...;  
  341.   BCF      STATUS,C             ;先把进位清零
  342.   BTFSC    PORTB,F              
  343.   BSF      STATUS,C             ;按键输入是1就把进位设为1
  344.   RLF      F_KEY1               ;每10毫秒把按键输入移位寄存到这个寄存器里面
  345.   MOVLW    b'11110000'          ;这个序列检测开始按下
  346.   XORWF    F_KEY1,W            
  347.   BTFSS    STATUS,Z             ;如果相等就跳过下一条
  348.   GOTO     END_KEY_DETECTK18_1
  349.   COMF     F_NUMCTRL,1  
  350. END_KEY_DETECTK18_1   
  351.   ;...检测按键K19,RB2...;  
  352.   BCF      STATUS,C             ;先把进位清零
  353.   BTFSC    PORTB,2              
  354.   BSF      STATUS,C             ;按键输入是1就把进位设为1
  355.   RLF      F_KEY2               ;每10毫秒把按键输入移位寄存到这个寄存器里面
  356.   MOVLW    b'11110000'          ;这个序列检测开始按下
  357.   XORWF    F_KEY2,W            
  358.   BTFSS    STATUS,Z             ;如果相等就跳过下一条
  359.   GOTO     END_KEY_DETECTK19_1
  360.   CALL     NUM_ADD
  361. END_KEY_DETECTK19_1   
  362. ;...检测按键K20,RB3...;  
  363.   BCF      STATUS,C             ;先把进位清零
  364.   BTFSC    PORTB,3              
  365.   BSF      STATUS,C             ;按键输入是1就把进位设为1
  366.   RLF      F_KEY3               ;每10毫秒把按键输入移位寄存到这个寄存器里面
  367.   MOVLW    b'11110000'          ;这个序列检测开始按下
  368.   XORWF    F_KEY3,W            
  369.   BTFSS    STATUS,Z             ;如果相等就跳过下一条
  370.   GOTO     END_KEY_DETECTK20_1
  371.   CALL     NUM_SUB
  372. END_KEY_DETECTK20_1   
  373.   return      
  374.   
  375. ;.......端口初始化子程序........;
  376. PORT_INIT
  377.    CLRF         STATUS                 ;选体0;Bank0
  378.    CLRF         PORTA                  ;清空端口输出
  379.    CLRF         PORTB                  ;
  380.    CLRF         PORTC                  ;
  381.    CLRF         PORTD                  ;
  382.    BSF           STATUS,RP0                   ;设置文件寄存器为体1
  383.    MOVLW        b'00000000'            ;把设置端口为输入还是输出,0是输出
  384.    MOVWF        TRISA
  385.    MOVLW        b'00001111'
  386.    MOVWF        TRISB
  387.    MOVLW        b'00000000'
  388.    MOVWF        TRISC
  389.    MOVLW        b'00000000'
  390.    MOVWF        TRISD
  391.    return                        

  392. ;.......各寄存器赋初值子程序.........;
  393. REG_INIT   
  394.    MOVLW    b'11111110'            
  395.    MOVWF    F_LED                ;给LED寄存器赋初值,用于跑马灯  
  396.    MOVLW    b'00010001'
  397.    MOVWF    F_NUM_SEL
  398.    MOVLW    d'0'
  399.    MOVWF    F_NUM0              ;数码管上电时会显示“FF00”
  400.    MOVLW    d'0'
  401.    MOVWF    F_NUM1
  402.    MOVLW    0FH
  403.    MOVWF    F_NUM2
  404.    MOVLW    0FH
  405.    MOVWF    F_NUM3
  406.    CLRF     F_TMR0MAX
  407.   return

  408. END   
MianQi 发表于 2021-11-1 09:55 | 显示全部楼层
本帖最后由 MianQi 于 2021-11-1 09:56 编辑

楼主是用什么工具测试地,我在MPLAB X IDE中测试时,出现了诸多报错:

  1. newAsmTemplate.asm:3:: error: (876) syntax error
  2. newAsmTemplate.asm:13:: error: (876) syntax error
  3. newAsmTemplate.asm:75:: error: (876) syntax error
  4. newAsmTemplate.asm:81:: error: (876) syntax error
  5. newAsmTemplate.asm:89:: error: (876) syntax error
  6. newAsmTemplate.asm:105:: error: (876) syntax error
  7. newAsmTemplate.asm:115:: error: (876) syntax error
  8. newAsmTemplate.asm:123:: error: (876) syntax error
  9. newAsmTemplate.asm:130:: error: (876) syntax error
  10. newAsmTemplate.asm:133:: error: (876) syntax error
  11. newAsmTemplate.asm:153:: error: (876) syntax error
  12. newAsmTemplate.asm:157:: error: (876) syntax error
  13. newAsmTemplate.asm:161:: error: (876) syntax error
  14. newAsmTemplate.asm:165:: error: (844) lexical error
  15. newAsmTemplate.asm:165:: error: (876) syntax error
  16. newAsmTemplate.asm:165:: error: (844) lexical error
  17. newAsmTemplate.asm:175:: error: (876) syntax error
  18. newAsmTemplate.asm:177:: error: (876) syntax error
  19. newAsmTemplate.asm:181:: error: (876) syntax error
  20. newAsmTemplate.asm:189:: error: (844) lexical error
  21. newAsmTemplate.asm:189:: advisory: (1) too many errors (21)

  22. <img src="https://bbs.21ic.com/forum.php?mod=image&aid=1781302&size=300x300&key=f83123be81677cef&nocache=yes&type=fixnone" aid="attachimg_1781302" alt="" border="0">

本帖子中包含更多资源

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

×
elephant00 发表于 2021-11-1 16:22 | 显示全部楼层
学习一下,楼主的分享的资料很棒了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

998

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

84

主题

998

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部