⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 write.s79

📁 《IAR EWARM 嵌入式系统 编程与实践》书中例程
💻 S79
字号:
 PUBLIC __write
 EXTERN __dwrite

/*******************************************************************
* 定义汇编语言函数:
* int __write(int Handle, const unsigned char *Buf, size_t BufSize)
* 实现从Terminal I/O窗口输出字符之前先输出一个星号的功能
*******************************************************************/
  RSEG CODE:CODE:NOROOT(2)
  CODE16
__write:
   PUSH     {R4-R6,LR}
   MOV      R4, R0
   MOV      R5, R1                     ; R5 = 当前输入字符地址
   ADD      R6, R2, R1                ; R6 = 最大输入字符地址+1
   SUB      SP, #4                     ; 保留4字节缓冲区
   LDR      R3, ='*'
   MOV      R0, SP
   STRB     R3, [R0, #0]              ; 输出一个"*"
   B        __write_loop_start
__write_loop_next:
   MOV      R0, R4                      ; 为 __dwrite设置第一个参数
   MOV      R1, SP                      ; 设置第二个参数,缓冲区地址
   LDRB     R3, [R5, #0]
   STRB     R3, [R1, #1]               ; 将当前输入字符放入缓冲区
   LDR      R2, =2                       ; 为 __dwrite设置第三个参数,长度
   _BLF     __dwrite, __dwrite_r      ; 调用__dwrite函数输出文本
   ADD      R5, #1
__write_loop_start:
   CMP      R5, R6
   BLT      __write_loop_next
__write_end:
   ADD      SP, #4
   POP      {R4-R6}
   POP      {R1}
   BX       R1

  RSEG CODE:CODE:NOROOT(2)
  CODE16
__dwrite_r:                             ; 长跳转到__dwrite函数
   LDR      R3, =__dwrite
   BX       R3
   END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -