# strcpy en assembleur Risc-V, d’après Patterson et Hennessy # .globl start # adresse de démarrage du programme pour l’éditeur de liens start: # Afficher avant addi a0, x0, 1 # 1 = StdOut la a1, destination # charger l’adresse addi a2, x0, 12 # longueur de la chaîne addi a7, x0, 64 # appel système Linux write ecall # appel Linux écriture de la chaîne la x10, origine la x11, destination jal ra, strcpy_fun # Afficher après addi a0, x0, 1 # 1 = StdOut la a1, destination # charger l’adresse addi a2, x0, 12 # longueur de la chaîne addi a7, x0, 64 # appel système Linux write ecall # appel Linux écriture de la chaîne addi a0, x0, 0 # code de retour 0 addi a7, x0, 93 # le code de commande 93 ecall # Appel Linux pour finir ###### strcpy_fun: add x28, x0, x0 # i <- 0+0 mv x12, x10 # p2 = adresse de origine[0] mv x13, x11 # p1 = adresse de destination[0] L1: lbu x28, 0(x12) # x28 <- origine[i] sb x28, 0(x13) # destination[i] <- x28 beq x28, x0, L2 # si NULL -> fin addi x12, x12, 1 addi x13, x13, 1 jal x0, L1 L2: jalr zero, ra, 0 ###### .data destination: .string "destination\n" origine: .string "initiations\n"