Information

Author(s) Nikita Tyunyayev, Aurélien Buchet
Deadline 22/03/2027 23:59:59
Abgabenlimit 5 Abgaben
in 1 Stunde(n)

Tags

Einloggen

TP5 - Recherche de string

Le simulateur est disponible ici : http://asm.info.ucl.ac.be/ Vous pouvez trouver le syllabus ici : https://sites.uclouvain.be/LSINC1102/pfo/introduction.html


Appel à une fonction

Vous devez récupérer les arguments passés à votre fonction. Vous ne pouvez pas utiliser directement les variables déclarées avec DB

Dans cet exercice, il vous est demandé d'écrire une fonction func, qui prend 3 arguments. Le premier argument est une chaîne de caratères appelée "string", le deuxième est un tableau de chaînes de caractères dénommé "string_tab" et le troisième est la longueur du tableau "len". Vous devez renvoyer 1 si "string" se trouve dans "string_tab" et 0 sinon. Une fonction "str_cmp" à deux arguments vous est fournie qui renvoie 1 si les deux chaines de caractères passées en argument sont égales, et 0 sinon.

Exemple :

string : "pomme" et string_tab : ["citron","orange","kiwi"] => renvoie 0 string : "citron" et string_tab : ["citron","orange","kiwi"] => renvoie 1

Comment déclarer un tableau de string?

Un tableau de string est un tableau d'adresse, chaque entrée correspond à l'adresse de début d'un string :

p1: DB "ab"
DB 0
p2: DB "bc"
DB 0
p3: DB "bd"
DB 0
tab: DB p1
DB p2
DB p3

Dans cet exemple, tab = [p1,p2,p3] = [0,6,12].

Attention, dans cet exercice, les différents strings ne se trouvent pas nécessairement l'un après l'autre en mémoire, ils peuvent être déclarés dans un ordre différent. Il peut également y avoir d'autres variables déclarées entre les strings. Cela signifie que vous devez utiliser les entrées du tableau pour accéder aux différents strings.

Les tests INGInious vont initialiser les variables de la façon suivante :

; Les registres B et C sont utilisés, leur valeur doit être inchangée après exécution de la fonction
MOV B, [rb]
MOV C, [rc]
MOV D, string
PUSH string_tab
PUSH [len]
CALL func
HLT
func: ; Le label func est déja déclaré pour vous
; ====> Votre code sera inséré ici par INGINIOUS  <=====
str_cmp: ; Une fonction qui renvoie 1 si deux strings sont égaux et 0 sinon, vous pouvez appeler celle-ci dans votre code
; Ajouté par INGINIOUS pour les tests
string: DB "?"
DB 0
len: DB "?"
string_tab_0: DB "?"
DB 0
...
string_tab_1: DB "?"
DB 0
...
string_tab_2: DB "?"
DB 0
...
string_tab_(len-1): DB "?"
DB 0
string_tab: DB string_tab_0
...
rb: DB "?"
rc: DB "?"