📄 write.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 + -