📄 memset.s
字号:
#include "setarch.h"#include "defines.h"#if defined (__H8300SX__) .global _memset_memset: ; Use er3 is a temporary since er0 must remain unchanged on exit. mov.l er0,er3 ; Fill er1 with the byte to copy. mov.b r1l,r1h mov.w r1,e1 ; Account for any excess bytes and words that will be copied after ; the main loop. r2 >= 0 if there is a longword to copy. sub #4,LEN(r2) blo longs_done ; Copy one byte if doing so will make er3 word-aligned. ; This isn't needed for correctness but it makes the main loop ; slightly faster. bld #0,r3l bcc word_aligned mov.b r1l,@er3+ sub #1,LEN(r2) blo longs_doneword_aligned: ; Likewise one word for longword alignment. bld #1,r3l bcc long_copy mov.w r1,@er3+ sub #2,LEN(r2) blo longs_donelong_copy: ; Copy longwords. mov.l er1,@er3+ sub #4,LEN(r2) bhs long_copylongs_done: ; At this point, we need to copy r2 & 3 bytes. Copy a word ; if necessary. bld #1,r2l bcc words_done mov.w r1,@er3+words_done: ; Copy a byte. bld #0,r2l bcc bytes_done mov.b r1l,@er3+bytes_done: rts#else; A0P pointer to cursor; A1P thing to copy .global _memset_memset:; MOVP @(2/4,r7),A2P ; dst; MOVP @(4/8,r7),A1 ; src thing; MOVP @(6/12,r7),A3P ; len MOVP A2P,A2P beq quit ; A3 points to the end of the area MOVP A0P,A3P ADDP A2P,A3P ; see if we can do it in words ; by oring in the start of the buffer to the end address or A0L,A2L btst #0,A2L bne byteloop ; we can do it a word at a time mov.b A1L,A1H wordloop: mov.w A1,@-A3P CMPP A3P,A0P bne wordloopquit: rts byteloop: mov.b A1L,@-A3P CMPP A3P,A0P bne byteloop rts#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -