📄 string.s
字号:
.text//------------------------------------------// unsigned int str_len(const char *s)//// return value:// unsigned int: the length of strings//-----------------------------------------.global str_lenstr_len: xor %eax, %eax movl 4(%esp), %edxloop: movb (%edx), %bl inc %eax inc %edx test %bl,%bl jnz loop dec %eax ret//-------------------------------------// char get_char(const char *s)// // return value:// char: get char of string[ith]//--------------------------------------.global get_charget_char: movl 4(%esp), %edx movl 8(%esp), %ecx loop1: movb (%edx), %al test %al, %al jz out inc %edx dec %ecx test %ecx, %ecx jnz loop1out: ret//----------------------------------// int str_ch(const char *d, char c)//// return: 0: no found// value: found & postion;//---------------------------.global str_chstr_ch: xor %eax, %eax movl 4(%esp), %edx movl 8(%esp), %ecxloop2: inc %eax movb (%edx), %bl test %bl, %bl jz out1 inc %edx cmpb %bl, %cl jnz loop2 jmp out2out1: xor %eax, %eaxout2: ret//--------------------------------------------------------------// unsigned int str_str(const char *dest, const char* source)//// reture value:// 0: no found// unsigned int: found & get postion//--------------------------------------------------------------.global str_strstr_str: movl 4(%esp), %edi movl 8(%esp), %esi // set tmp var sub $8, %esp movl %edi, 4(%esp) movl %esi, (%esp) mov $1, %eaxloop3: mov %esi, %ebx mov %edi, %edx inc %esi inc %edi movb (%ebx), %cl//-----------// found & no found test %cl,%cl jz result cmpb $0, (%edx) jz no //----------- cmpb (%edx), %cl jz loop3 yes: incl 4(%esp) movl 4(%esp), %edi movl (%esp), %esi inc %eax jmp loop3no: xor %eax, %eaxresult: add $8, %esp ret//----------------------------// ungisgned get_c_sum(char *s, char c)//// return char c sum in string s////------------------------------------.global get_c_sumget_c_sum: movl 4(%esp), %edx movb 8(%esp), %bl xor %eax, %eax test %edx, %edx jz out_get_cloop_get_c: inc %edx movb -1(%edx), %cl test %cl, %cl jz out_get_c cmp %bl, %cl jnz loop_get_c inc %eax jmp loop_get_c out_get_c: ret////--------------------------.global get_pcget_pc: call nextnext: pop %eax ret//-----------------------------------------.global dump_banrydump_banry: push %ebp mov %esp, %ebp movl 8(%ebp), %edx movb 12(%ebp), %al movl $9, %ecxloop5: dec %ecx jz out5 shl $1, %al jc onezero: movb $48, (%edx) inc %edx jmp loop5one: movb $49, (%edx) inc %edx jmp loop5out5: pop %ebp ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -