Adds strclr() and strlclr()
This commit is contained in:
34
string.asm
34
string.asm
@ -4,6 +4,8 @@ section .text
|
||||
global strlcpy
|
||||
global strcat
|
||||
global strcmp
|
||||
global strclr
|
||||
global strlclr
|
||||
|
||||
;----- strlen(char* str) -----;
|
||||
; return value: amount of characters before EOS was found
|
||||
@ -123,3 +125,35 @@ strcmp:
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- strclr(char* str) -----;
|
||||
; Replaces all characters of a string with \0 untill EOS is found
|
||||
; returns amount of changed characters
|
||||
strclr:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
call strlen
|
||||
mov rcx, rax
|
||||
mov rdx, rax
|
||||
xor rax, rax
|
||||
cld
|
||||
rep stosb
|
||||
mov rax, rdx
|
||||
|
||||
leave
|
||||
ret
|
||||
;----- strlclr(char* str, int size) -----;
|
||||
; Replaces characters of a string with \0, using arg size
|
||||
; <!> DANGEROUS FUNCTION, it might exceed string boundaries if used incorrectly. Use strclr() instead!
|
||||
; Function has no return value, rax is unmodified
|
||||
strlclr:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
mov rcx, rsi
|
||||
xor rax, rax
|
||||
cld
|
||||
rep stosb
|
||||
|
||||
leave
|
||||
ret
|
||||
|
611
tests.asm
611
tests.asm
@ -19,67 +19,120 @@ extern puts
|
||||
extern strlen
|
||||
extern strcpy
|
||||
extern strlcpy
|
||||
extern strclr
|
||||
extern strlclr
|
||||
extern strcat
|
||||
extern strcmp
|
||||
|
||||
section .rodata
|
||||
PRINT_nums equ 1
|
||||
PRINT_strs equ 1
|
||||
TEST_min equ 1 ;includes minu
|
||||
TEST_max equ 1 ;includes maxu
|
||||
TEST_print equ 1
|
||||
TEST_puts equ 1
|
||||
TEST_min equ 1 ;includes minu
|
||||
TEST_max equ 1 ;includes maxu
|
||||
TEST_strlen equ 1
|
||||
TEST_islower equ 1
|
||||
TEST_isupper equ 1
|
||||
TEST_strcpy equ 1
|
||||
TEST_strlcpy equ 1
|
||||
TEST_strclr equ 1
|
||||
TEST_strlclr equ 1
|
||||
TEST_strcat equ 1
|
||||
TEST_tolower equ 1
|
||||
TEST_toupper equ 1
|
||||
TEST_strcmp equ 1
|
||||
|
||||
num1 dq 13
|
||||
num2 dq -25
|
||||
num3 equ 60
|
||||
msgNums db "> num1: %d",NL,"> num2: %d",NL,"> num3: %d",NL,EOS
|
||||
msgMin db "min(num1, num2): %d",NL,EOS
|
||||
msgMin2 db "minu(num1, num3): %d",NL,EOS
|
||||
msgMin3 db "min(num2, num3): %d",NL,EOS
|
||||
msgMax db "max(num1, num2): %d",NL,EOS
|
||||
msgMax2 db "maxu(num1, num3): %d",NL,EOS
|
||||
msgMax3 db "max(num2, num3): %d",NL,EOS
|
||||
msgPrint db "print() test",EOS
|
||||
msgPuts db " and puts() test",EOS
|
||||
num1 dq 69
|
||||
num2 dq 0xFFFFFF
|
||||
num3 equ 25
|
||||
num4 dq -90
|
||||
prntNums db "PRINT numbers:",NL,"> num1: %d",NL,"> num2: %d",NL,"> num3: %d",NL,"> num4: %d",NL,EOS
|
||||
|
||||
str1 db "Hello, world!",EOS
|
||||
str2 db "Hello World!",EOS
|
||||
str2 db "Hello world!",EOS
|
||||
str3 db "Howdy environment!",EOS
|
||||
msgStrings db "> str1: %s",NL,"> str2: %s",NL,"> str3: %s",NL,EOS
|
||||
msgStrlen db "strlen(str1): %d",NL,EOS
|
||||
msgStrlen2 db "strlen(str3): %d",NL,EOS
|
||||
msgIslower db "islower(str1[0]): %d",NL,EOS
|
||||
msgIslower2 db "islower(str1[1]): %d",NL,EOS
|
||||
msgIsupper db "isupper(str1[0]): %d",NL,EOS
|
||||
msgIsupper2 db "isupper(str1[1]): %d",NL,EOS
|
||||
msgStrcpy db "strcpy(strBuff, str1): %s",NL,EOS
|
||||
msgStrlcpy db "strlcpy(strBuff2, str1, -1): (%d): %s",NL,EOS
|
||||
msgStrlcpy2 db "strlcpy(strBuff2, str1, 0): (%d): %s",NL,EOS
|
||||
msgStrlcpy3 db "strlcpy(strBuff2, str1, 5): (%d): %s",NL,EOS
|
||||
msgStrcat db "strcat(strBuff, str3): %s",NL,EOS
|
||||
msgStrlen3 db "strlen(strBuff): %d",NL,EOS
|
||||
msgTolower db "tolower(str1[0]): %c",NL,EOS
|
||||
msgTolower2 db "tolower(str1[1]): %c",NL,EOS
|
||||
msgTolower3 db "tolower() for whole strBuff: %s",NL,EOS
|
||||
msgToupper db "toupper(str1[0]): %c",NL,EOS
|
||||
msgToupper2 db "toupper(str1[1]): %c",NL,EOS
|
||||
msgToupper3 db "toupper() for whole strBuff: %s",NL,EOS
|
||||
msgStrcmp db "strcmp(str1, str2): %d",NL,EOS
|
||||
msgStrings2 db "Comparing...",NL,"> str1: %s",NL,"> strBuff: %s",NL,EOS
|
||||
msgStrcmp2 db "strcmp(str1, strBuff): %d",NL,EOS
|
||||
section .data
|
||||
section .bss
|
||||
strBuff resb 32
|
||||
strBuff2 resb 5
|
||||
str4 db "Hell",EOS"o world!",EOS
|
||||
prntStrs db "PRINT strings:",NL,"> str1: %s",NL,"> str2: %s",NL,"> str3: %s",NL,"> str4: %s",NL,EOS
|
||||
|
||||
; print()
|
||||
msgPrint db "# print()",NL,EOS
|
||||
msgPrint1 db "print() test",EOS
|
||||
; puts()
|
||||
msgPuts db NL,"# puts()",NL,EOS
|
||||
msgPuts1 db "puts() test",EOS
|
||||
; min() / minu()
|
||||
msgMin db "# min() / minu()",EOS
|
||||
msgMin1 db "TEST min(num1, num2): %d",NL,EOS
|
||||
msgMin2 db "TEST minu(num1, num2): %d",NL,EOS
|
||||
msgMin3 db "TEST min(num1, num3): %d",NL,EOS
|
||||
msgMin4 db "TEST minu(num1, num3): %d",NL,EOS
|
||||
msgMin5 db "TEST min(num1, num4): %d",NL,EOS
|
||||
msgMin6 db "TEST minu(num1, num4): %d",NL,EOS
|
||||
msgMin7 db "TEST min(num2, num4): %d",NL,EOS
|
||||
msgMin8 db "TEST minu(num2, num4): %d",NL,EOS
|
||||
; max() / maxu()
|
||||
msgMax db "# max() / maxu()",EOS
|
||||
msgMax1 db "TEST max(num1, num2): %d",NL,EOS
|
||||
msgMax2 db "TEST maxu(num1, num2): %d",NL,EOS
|
||||
msgMax3 db "TEST max(num1, num3): %d",NL,EOS
|
||||
msgMax4 db "TEST maxu(num1, num3): %d",NL,EOS
|
||||
msgMax5 db "TEST max(num1, num4): %d",NL,EOS
|
||||
msgMax6 db "TEST maxu(num1, num4): %d",NL,EOS
|
||||
msgMax7 db "TEST max(num2, num4): %d",NL,EOS
|
||||
msgMax8 db "TEST maxu(num2, num4): %d",NL,EOS
|
||||
; strlen()
|
||||
msgStrlen db "# strlen()",EOS
|
||||
msgStrlen1 db "TEST strlen(str1): %d",NL,EOS
|
||||
msgStrlen2 db "TEST strlen(str2): %d",NL,EOS
|
||||
msgStrlen3 db "TEST strlen(str3): %d",NL,EOS
|
||||
msgStrlen4 db "TEST strlen(str4): %d",NL,EOS
|
||||
; islower()
|
||||
msgIslower db "# islower()",EOS
|
||||
msgIslower1 db "TEST islower(str1[0]): %d",NL,EOS ;str1[0] => 'H'
|
||||
msgIslower2 db "TEST islower(str1[1]): %d",NL,EOS ;str1[1] => 'e'
|
||||
msgIslower3 db "TEST islower(str1[5]): %d",NL,EOS ;str1[5] => ','
|
||||
; isupper()
|
||||
msgIsupper db "# isupper()",EOS
|
||||
msgIsupper1 db "TEST isupper(str1[0]): %d",NL,EOS ;str1[0] => 'H'
|
||||
msgIsupper2 db "TEST isupper(str1[1]): %d",NL,EOS ;str1[1] => 'e'
|
||||
msgIsupper3 db "TEST isupper(str1[5]): %d",NL,EOS ;str1[5] => ','
|
||||
; strcpy()
|
||||
msgStrcpy db "# strcpy()",EOS
|
||||
msgStrcpy1 db "TEST strcpy(strBuff1, str4): %s",NL,EOS
|
||||
msgStrcpy2 db "TEST strcpy(strBuff1, str2): %s",NL,EOS
|
||||
msgStrcpy3 db "TEST strcpy(strBuff1, str1): %s",NL,EOS
|
||||
; strlcpy()
|
||||
msgStrlcpy db "# strlcpy()",EOS
|
||||
msgStrlcpy1 db "TEST strlcpy(strBuff2, str1, -1) (%d): %s",NL,EOS
|
||||
msgStrlcpy2 db "TEST strlcpy(strBuff2, str1, 0) (%d): %s",NL,EOS
|
||||
msgStrlcpy3 db "TEST strlcpy(strBuff2, str1, 5) (%d): %s",NL,EOS
|
||||
msgStrlcpy4 db "TEST strlcpy(strBuff2, str4, 8) (%d): %s",NL,EOS
|
||||
; strclr()
|
||||
msgStrclr db "# strclr()",EOS
|
||||
msgStrclr1 db "TEST strclr(strBuff1): (%d) %s",NL,EOS
|
||||
msgStrclr2 db "> strcpy(strBuff1, str3). strBuff1 => %s",NL,EOS
|
||||
msgStrclr3 db "TEST strclr(strBuff1): (%d) %s",NL,EOS
|
||||
; strlclr()
|
||||
msgStrlclr db "# strlclr()",EOS
|
||||
msgStrlclr1 db "TEST strlclr(strbuff1, 32): %s",NL,EOS
|
||||
msgStrlclr2 db "> strcpy(strBuff1, str3). strBuff1 => %s",NL,EOS
|
||||
msgStrlclr3 db "TEST strlclr(strBuff1, 32): %s",NL,EOS
|
||||
; strcat()
|
||||
msgStrcat db "# strcat()",EOS
|
||||
msgStrcat1 db "TEST strcat(strBuff1, str3): %s", NL,EOS
|
||||
msgStrcat2 db "> strclr(strBuff1)",EOS
|
||||
msgStrcat3 db "TEST strcat(strBuff1, str1): %s",NL,EOS
|
||||
msgStrcat4 db "TEST strcat(strBuff1, str3): %s",NL,EOS
|
||||
; tolower()
|
||||
msgTolower db "# tolower()",NL,"> strcpy(strBuff1, str3)",EOS
|
||||
msgTolower1 db "TEST tolower(strBuff1[0]): %c",NL,EOS
|
||||
msgTolower2 db "TEST tolower for whole strBuff1: %s",NL,EOS
|
||||
; toupper()
|
||||
; strcmp()
|
||||
section .bss
|
||||
strBuff1 resb 32
|
||||
strBuff2 resb 8
|
||||
section .text
|
||||
global main
|
||||
main:
|
||||
@ -87,144 +140,293 @@ main:
|
||||
mov rbp, rsp
|
||||
|
||||
%IF PRINT_nums
|
||||
; PRINT: num1, num2, num3
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgNums]
|
||||
lea rdi, [rel prntNums]
|
||||
mov rsi, [rel num1]
|
||||
mov rdx, [rel num2]
|
||||
mov rcx, num3
|
||||
mov r8, [rel num4]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF PRINT_strs
|
||||
xor rax, rax
|
||||
lea rdi, [rel prntStrs]
|
||||
lea rsi, [rel str1]
|
||||
lea rdx, [rel str2]
|
||||
lea rcx, [rel str3]
|
||||
lea r8, [rel str4]
|
||||
call printf
|
||||
%ENDIF
|
||||
|
||||
%IF TEST_print
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgPrint]
|
||||
call printf
|
||||
lea rdi, [rel msgPrint1]
|
||||
call print
|
||||
%ENDIF
|
||||
%IF TEST_puts
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgPuts]
|
||||
call printf
|
||||
lea rdi, [rel msgPuts1]
|
||||
call puts
|
||||
%ENDIF
|
||||
%IF TEST_min
|
||||
; TEST: min()
|
||||
lea rdi, [rel msgMin]
|
||||
call puts
|
||||
|
||||
;TEST: min(num1, num2)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num2]
|
||||
call min
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin]
|
||||
lea rdi, [rel msgMin1]
|
||||
call printf
|
||||
;
|
||||
;TEST: minu(num1, num2)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
mov rsi, [rel num2]
|
||||
call minu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin2]
|
||||
call printf
|
||||
;
|
||||
mov rdi, [rel num2]
|
||||
;TEST: min(num1, num3)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
call min
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin3]
|
||||
call printf
|
||||
;TEST: minu(num1, num3)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
call minu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin4]
|
||||
call printf
|
||||
;TEST: min(num1, num4)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num4]
|
||||
call min
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin5]
|
||||
call printf
|
||||
;TEST: minu(num1, num4)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num4]
|
||||
call minu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin6]
|
||||
call printf
|
||||
;TEST: min(num2, num4)
|
||||
mov rdi, [rel num2]
|
||||
mov rsi, [rel num4]
|
||||
call min
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin7]
|
||||
call printf
|
||||
;TEST: minu(num2, num4)
|
||||
mov rdi, [rel num2]
|
||||
mov rsi, [rel num4]
|
||||
call minu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMin8]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_max
|
||||
; TEST: max()
|
||||
lea rdi, [rel msgMax]
|
||||
call puts
|
||||
;TEST: max(num1, num2)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num2]
|
||||
call max
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax]
|
||||
lea rdi, [rel msgMax1]
|
||||
call printf
|
||||
;
|
||||
;TEST: maxu(num1, num2)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
mov rsi, [rel num2]
|
||||
call maxu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax2]
|
||||
call printf
|
||||
;
|
||||
mov rdi, [rel num2]
|
||||
;TEST: max(num1, num3)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
call max
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax3]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_print
|
||||
; TEST: print()
|
||||
lea rdi, [rel msgPrint]
|
||||
call print
|
||||
%ENDIF
|
||||
%IF TEST_puts
|
||||
; TEST: puts()
|
||||
lea rdi, [rel msgPuts]
|
||||
call puts
|
||||
%ENDIF
|
||||
%IF PRINT_strs
|
||||
; PRINT: str1, str2, str3
|
||||
;TEST: maxu(num1, num3)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, num3
|
||||
call maxu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrings]
|
||||
lea rsi, [rel str1]
|
||||
lea rdx, [rel str2]
|
||||
lea rcx, [rel str3]
|
||||
lea rdi, [rel msgMax4]
|
||||
call printf
|
||||
;TEST: max(num1, num4)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num4]
|
||||
call max
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax5]
|
||||
call printf
|
||||
;TEST: maxu(num1, num4)
|
||||
mov rdi, [rel num1]
|
||||
mov rsi, [rel num4]
|
||||
call maxu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax6]
|
||||
call printf
|
||||
;TEST: max(num2, num4)
|
||||
mov rdi, [rel num2]
|
||||
mov rsi, [rel num4]
|
||||
call max
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax7]
|
||||
call printf
|
||||
;TEST: maxu(num2, num4)
|
||||
mov rdi, [rel num2]
|
||||
mov rsi, [rel num4]
|
||||
call maxu
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgMax8]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strlen
|
||||
; TEST: strlen()
|
||||
lea rdi, [rel msgStrlen]
|
||||
call puts
|
||||
|
||||
; TEST: strlen(str1)
|
||||
lea rdi, [rel str1]
|
||||
call strlen
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlen]
|
||||
lea rdi, [rel msgStrlen1]
|
||||
call printf
|
||||
;
|
||||
lea rdi, [rel str3]
|
||||
; TEST: strlen(str2)
|
||||
lea rdi, [rel str2]
|
||||
call strlen
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlen2]
|
||||
call printf
|
||||
; TEST: strlen(str3)
|
||||
lea rdi, [rel str3]
|
||||
call strlen
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlen3]
|
||||
call printf
|
||||
; TEST: strlen(str4)
|
||||
lea rdi, [rel str4]
|
||||
call strlen
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlen4]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_islower
|
||||
; TEST: islower()
|
||||
lea rdi, [rel msgIslower]
|
||||
call puts
|
||||
|
||||
; TEST: islower(str1[0])
|
||||
lea rdi, [rel str1]
|
||||
call islower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIslower]
|
||||
lea rdi, [rel msgIslower1]
|
||||
call printf
|
||||
;
|
||||
; TEST: islower(str1[1])
|
||||
lea rdi, [rel str1+1]
|
||||
call islower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIslower2]
|
||||
call printf
|
||||
; TEST: islower(str1[5])
|
||||
lea rdi, [rel str1+5]
|
||||
call islower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIslower3]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_isupper
|
||||
; TEST: isupper()
|
||||
lea rdi, [rel msgIsupper]
|
||||
call puts
|
||||
|
||||
; TEST: isupper(str1[0])
|
||||
lea rdi, [rel str1]
|
||||
call isupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIsupper]
|
||||
lea rdi, [rel msgIsupper1]
|
||||
call printf
|
||||
;
|
||||
; TEST: isupper(str1[1])
|
||||
lea rdi, [rel str1+1]
|
||||
call isupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIsupper2]
|
||||
call printf
|
||||
; TEST: isupper(str1[5])
|
||||
lea rdi, [rel str1+5]
|
||||
call isupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgIsupper3]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcpy
|
||||
; TEST: strcpy()
|
||||
lea rdi, [rel strBuff]
|
||||
lea rdi, [rel msgStrcpy]
|
||||
call puts
|
||||
|
||||
; TEST: strcpy(strBuff1, str4)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str4]
|
||||
call strcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcpy1]
|
||||
call printf
|
||||
; TEST: strcpy(strBuff1, str2)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str2]
|
||||
call strcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcpy2]
|
||||
call printf
|
||||
; TEST: strcpy(strBuff1, str1)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str1]
|
||||
call strcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcpy]
|
||||
lea rsi, [rel strBuff]
|
||||
lea rdi, [rel msgStrcpy3]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strlcpy
|
||||
lea rdi, [rel msgStrlcpy]
|
||||
call puts
|
||||
|
||||
; TEST: strlcpy(strBuff2, str1, -1)
|
||||
lea rdi, [rel strBuff2]
|
||||
lea rsi, [rel str1]
|
||||
@ -232,7 +434,7 @@ main:
|
||||
call strlcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlcpy]
|
||||
lea rdi, [rel msgStrlcpy1]
|
||||
lea rdx, [rel strBuff2]
|
||||
call printf
|
||||
; TEST: strlcpy(strBuff2, str1, 0)
|
||||
@ -255,130 +457,129 @@ main:
|
||||
lea rdi, [rel msgStrlcpy3]
|
||||
lea rdx, [rel strBuff2]
|
||||
call printf
|
||||
; TEST: strlcpy(strBuff2, str4, 8)
|
||||
lea rdi, [rel strBuff2]
|
||||
lea rsi, [rel str4]
|
||||
mov rdx, 8
|
||||
call strlcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlcpy4]
|
||||
lea rdx, [rel strBuff2]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcat
|
||||
; TEST: strcat()
|
||||
lea rdi, [rel strBuff]
|
||||
%IF TEST_strclr
|
||||
lea rdi, [rel msgStrclr]
|
||||
call puts
|
||||
|
||||
; TEST: strclr(strBuff1)
|
||||
lea rdi, [rel strBuff1]
|
||||
call strclr
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdx, [rel strBuff1]
|
||||
lea rdi, [rel msgStrclr1]
|
||||
call printf
|
||||
; str3->strBuff1
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcat
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcat]
|
||||
lea rsi, [rel strBuff]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcat
|
||||
%IF TEST_strlen
|
||||
; TEST: strlen() for strBuff
|
||||
lea rdi, [rel strBuff]
|
||||
call strlen
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlen3]
|
||||
call printf
|
||||
%ENDIF
|
||||
%ENDIF
|
||||
%IF TEST_tolower
|
||||
; TEST: tolower(str1[0])
|
||||
lea rdi, [rel str1]
|
||||
call tolower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower]
|
||||
call printf
|
||||
; ...str1[1]
|
||||
lea rdi, [rel str1+1]
|
||||
call tolower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower2]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_toupper
|
||||
; TEST: toupper(str1[0])
|
||||
lea rdi, [rel str1]
|
||||
call toupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgToupper]
|
||||
call printf
|
||||
; ...str1[1]
|
||||
lea rdi, [rel str1+1]
|
||||
call toupper
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgToupper2]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_tolower
|
||||
; TEST: tolower: entire strBuff
|
||||
lea rdi, [rel strBuff]
|
||||
call strlen
|
||||
mov rcx, rax
|
||||
.tolowerLoop:
|
||||
movzx r10, byte [rdi]
|
||||
mov byte [rdi], r10b
|
||||
mov r11, rcx
|
||||
call tolower
|
||||
mov rcx, r11
|
||||
mov byte [rdi], al
|
||||
inc rdi
|
||||
inc r10
|
||||
loop .tolowerLoop
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower3]
|
||||
lea rsi, [rel strBuff]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_toupper
|
||||
; TEST: toupper: entire strBuff
|
||||
lea rdi, [rel strBuff]
|
||||
call strlen
|
||||
mov rcx, rax
|
||||
.toupperLoop:
|
||||
movzx r10, byte [rdi]
|
||||
mov byte [rdi], r10b
|
||||
mov r11, rcx
|
||||
call toupper
|
||||
mov rcx, r11
|
||||
mov byte [rdi], al
|
||||
inc rdi
|
||||
inc r10
|
||||
loop .toupperLoop
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgToupper3]
|
||||
lea rsi, [rel strBuff]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcmp
|
||||
; TEST: strcmp(str1, str2)
|
||||
lea rdi, [rel str1]
|
||||
lea rsi, [rel str2]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp]
|
||||
call printf
|
||||
;
|
||||
lea rdi, [rel strBuff]
|
||||
lea rsi, [rel str1]
|
||||
call strcpy
|
||||
lea rdi, [rel strBuff]
|
||||
lea rsi, [rel str3]
|
||||
call strcat
|
||||
%IF PRINT_strs
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrings2]
|
||||
lea rsi, [rel str1]
|
||||
lea rdx, [rel strBuff]
|
||||
call printf
|
||||
%ENDIF
|
||||
lea rdi, [rel str1]
|
||||
lea rsi, [rel strBuff]
|
||||
call strcmp
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcmp2]
|
||||
lea rdi, [rel msgStrclr2]
|
||||
call printf
|
||||
; TEST: strclr(strBuff1)
|
||||
lea rdi, [rel strBuff1]
|
||||
call strclr
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrclr3]
|
||||
lea rdx, [rel strBuff1]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strlclr
|
||||
lea rdi, [rel msgStrlclr]
|
||||
call puts
|
||||
|
||||
; TEST: strlclr(strBuff1, 32)
|
||||
lea rdi, [rel strBuff1]
|
||||
mov rsi, 32
|
||||
call strlclr
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlclr1]
|
||||
lea rsi, [rel strBuff1]
|
||||
call printf
|
||||
; str3->strBuff1
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcpy
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlclr2]
|
||||
call printf
|
||||
; TEST: strlclr(strBuff1, 32)
|
||||
lea rdi, [rel strBuff1]
|
||||
mov rsi, 32
|
||||
call strlclr
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrlclr3]
|
||||
lea rsi, [rel strBuff1]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_strcat
|
||||
lea rdi, [rel msgStrcat]
|
||||
call puts
|
||||
|
||||
; TEST: strcat(strBuff1, str3)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcat
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcat1]
|
||||
call printf
|
||||
; CLEAR strBuff1
|
||||
lea rdi, [rel msgStrcat2]
|
||||
call puts
|
||||
lea rdi, [rel strBuff1]
|
||||
call strclr
|
||||
; TEST: strcat(strBuff1, str1)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str1]
|
||||
call strcat
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcat3]
|
||||
call printf
|
||||
; TEST: strcat(strBuff1, str3)
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
call strcat
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgStrcat4]
|
||||
call printf
|
||||
%ENDIF
|
||||
%IF TEST_tolower
|
||||
lea rdi, [rel msgTolower]
|
||||
call puts
|
||||
|
||||
lea rdi, [rel strBuff1]
|
||||
lea rsi, [rel str3]
|
||||
|
||||
; TEST: tolower(strBuff1[0])
|
||||
lea rdi, [rel strBuff1]
|
||||
call tolower
|
||||
mov rsi, rax
|
||||
xor rax, rax
|
||||
lea rdi, [rel msgTolower1]
|
||||
call printf
|
||||
|
||||
; TEST: tolower() whole strBuff1
|
||||
;lea rdi, [rel strBuff1]
|
||||
;.tolowerLoop:
|
||||
|
||||
%ENDIF
|
||||
|
||||
leave
|
||||
ret
|
||||
|
Reference in New Issue
Block a user