;Le probleme du hamburger :) ;Pour preparer un hamburger, on encode 6 bits de la maniere suivante: ;bit0: salade ;bit1: champignons ;bits2&3: nombre de tranches de tomates ;bit4: piments ;bit5: oignons ;note: les numeros de bits se lisent de droite a gauche. le bit0 est donc ;le bit le plus faible. ;Ces bits nous donnent la composition du hamburger, c'est a dire que si ;le bit4 est a 1, on veut des piments dans le hamburger, si il est a 0, ;on ne veut pas de piments. ;Une exception est faite pour les tomates; deux bits sont utilises pour ;donner la quantite de tranches de tomates a mettre (0,1,2,3) ;On veut faire un programme qui prend en entree un nombre et qui imprime ;a l'ecran la composition du hamburger. ;Exemples: ;Le nombre entre est 19 (010011). ;0 1 00 1 1 ;bit5 bit4 bit3&2 bit1 bit0 ;Le hamburger sera compose de: ;piments, champignons et salade. ;Ce que l'on verra a l'ecran: SALADE CHAMPIGNONS PIMENTS ;Le nombre entre est 24 (011000). Le hamburger sera compose de: ;piments et deux tranches de tomate. ;Ce que l'on verra a l'ecran: 2TOMATE(S) PIMENTS deci nb,d loada nb,d anda d#1,i ;A AND 000001 =>A=000001 (bin) -> salade ;A=000000 (bin) -> pas de salade compa d#1,i ;est ce que A=1 ? brne psalade ;pas de salade? charo c#/S/,i charo c#/A/,i charo c#/L/,i charo c#/A/,i charo c#/D/,i charo c#/E/,i charo c#/ /,i psalade: loada nb,d ;le nombre a ete modifie, alors on le recharge anda d#2,i ;A AND 000010 =>A=000010 -> champignons, ;A=000000 -> pas de champignons compa d#2,i ;est ce que A=10 ? brne pchamp ;pas de champignons? charo c#/C/,i charo c#/H/,i charo c#/A/,i charo c#/M/,i charo c#/P/,i charo c#/I/,i charo c#/G/,i charo c#/N/,i charo c#/O/,i charo c#/N/,i charo c#/S/,i charo c#/ /,i pchamp: loada nb,d anda d#12,i ;A AND 001100 =>A=000000 -> pas de tomates, ;A=000100 -> 1 tomate, ;A=001000 -> 2 tomates, ;A=001100 -> 3 tomates, asra ;decalage de A a droite deux fois, pour que asra ;le nombre de tomates arrive dans les ;premiers bits ; compa d#0,i ;on veut des tomates? (instruction pas nécessaire) breq ptomates ;non? ->branchement, oui? -> on continue storea tom,d ;stocker pour imprimer deco tom,d charo c#/T/,i charo c#/O/,i charo c#/M/,i charo c#/A/,i charo c#/T/,i charo c#/E/,i charo c#/(/,i charo c#/S/,i charo c#/)/,i charo c#/ /,i ptomates: loada nb,d anda d#16,i ;A AND 010000 =>A=010000 -> piments, ;A=000000 -> pas de piments ;PAS DE COMPARAISON. On aurait pu suivre le ;meme schema que pour la salade et les champignons ;mais il existe une maniere plus efficace de le ;faire: apres avoir fait le AND, si A vaut zero, ;le flag Z (zero) sera leve (c-a-d que Z vaudra 1). ;On peut donc determiner le resultat de ;l'operation sans faire de comparaison. ;Mais il faut utiliser l'instruction BREQ ;au lieu de BRNE. ;BRNE fait un branchement si Z=0 (nombre non-nul) ;BREQ fait un branchement si Z=1 (zero) breq ppiments ;pas de piments? charo c#/P/,i charo c#/I/,i charo c#/M/,i charo c#/E/,i charo c#/N/,i charo c#/T/,i charo c#/S/,i charo c#/ /,i ppiments: loada nb,d anda d#32,i ;A AND 100000 =>A=100000 -> oignons, ;A=000000 -> pas d'oignons breq poignons ;pas d'oignons? charo c#/O/,i charo c#/I/,i charo c#/G/,i charo c#/N/,i charo c#/O/,i charo c#/N/,i charo c#/S/,i charo c#/ /,i poignons: stop nb: .WORD d#0 tom: .WORD d#0 .END