1

Dans le code que je propose, mon but est de récuperer l'adresse où est implémenté ngetchx en mémoire (je sais que ça sert à rien mais c'est juste pour tester).

#include <tigcclib.h>

void _main(void)
{
	ulint buffer=0;

	asm volatile("
	.set ngetchx,0x51           |une constante : le n° de la RomCall
	move.l #0xC8,%%a0           |la jumpTable
	move.l ngetchx*4(%%a0),%%a0 |j'obtiens le même résultat en faisant : move.l 324(%%a0),%%a0
	move.l %%a0,%[buffer]       |on copie a0 dans la variable C buffer
	"
	:[buffer] "=g" (buffer)::"a0"); |on déclare [buffer] et le registre a0 comme étant détruit

	clrscr();
	printf("0x%lX",buffer); // un printf pour voir le contenu de buffer
	ngetchx();
}

Bon le problème c'est que buffer reste à 0, j'en déduis donc que a0 reste à 0 mais pourquoi?
sachant que ce code fonctionne
	move.l #0x123456,%%a0 
	move.l %%a0,%[buffer]


Comment ce fait-il que ce truc ne marche pas?

Le code assembleur généré par TIGCC (qui me semble correct) donne (en coupant le début):
.LC0:
	.ascii "0x%lX\0"
#NO_APP
	.section	.text.__main,"x"
	.even
	.globl	__main
__main:
	move.l %d3,-(%sp)
#APP
	
	.set ngetchx,0x51
	move.l #0xC8,%a0 
	move.l ngetchx*4(%a0),%a0
	move.l %a0,%d3
	
#NO_APP
	jbsr clrscr
	move.l %d3,-(%sp)
	pea .LC0
	jbsr printf
#APP
	.xdef __ref_all___set_file_in_use_bit
#NO_APP
	move.l 324(%a5),%a0
	jbsr (%a0)
	addq.l #8,%sp
	move.l (%sp)+,%d3
	rts

avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

2

Post erreur, j'ai appuyé sur citer au lieu de editer sorry
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

3

move.l #0xC8,%%a0

->

move.l 0xC8,%%a0

^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

ah ok c'est le long à l'addresse 0xC8 tritop
merci
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?