<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://haypo.alwaysdata.net:443/wiki/skins/common/feed.css?63"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Exemples en assembleur Intel x86 - Historique des versions</title>
		<link>http://haypo.alwaysdata.net:443/wiki/index.php?title=Exemples_en_assembleur_Intel_x86&amp;action=history</link>
		<description>Historique pour cette page sur le wiki</description>
		<language>fr</language>
		<generator>MediaWiki 1.10.1</generator>
		<lastBuildDate>Tue, 16 Jun 2026 10:00:14 GMT</lastBuildDate>
		<item>
			<title>Haypo: /* Solution Assembleur (2) */</title>
			<link>http://haypo.alwaysdata.net:443/wiki/index.php?title=Exemples_en_assembleur_Intel_x86&amp;diff=7671&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Solution Assembleur (2)&lt;/span&gt;&lt;/p&gt;

			&lt;table border='0' width='98%' cellpadding='0' cellspacing='4' style=&quot;background-color: white;&quot;&gt;
			&lt;tr&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;Version du 19 novembre 2012 à 20:28&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Ligne 151&amp;nbsp;:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Ligne 151&amp;nbsp;:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;* (2) - Pour mettre un registre Ã  zÃ©ro, la mÃ©thode la plus rapide est &amp;quot;xor reg,reg&amp;quot;, car XOR est une fonction de base du processeur.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;* (2) - Pour mettre un registre Ã  zÃ©ro, la mÃ©thode la plus rapide est &amp;quot;xor reg,reg&amp;quot;, car XOR est une fonction de base du processeur.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; font-size: smaller;&quot;&gt;* (3) - Turbo Pascal 7 ne connaissant pas les instructions 32 bits, on peut toujours les Ã©crire en langage machine. Pour avoir le code machine d'une instruction, on peut compiler un programme en assembleur ne contenant que cette instruction en demandant au compileur de crÃ©er un listing (avec le paramÃ¨tre &amp;quot;/Z&amp;quot; pour TASM 1.0 et 2.0), c'est Ã  dire un fichier contenant le code assembleur dÃ©composÃ©e, interprÃ©tÃ© et traduit en code machine. Sinon, il existe aussi des programmes effectuant la convertion, mais je n'en connais pas directement. Pour revenir Ã  notre &amp;quot;xor edi, edi&amp;quot;, l'&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Ã©quivalant &lt;/del&gt;en code machine est &amp;quot;66 33 FF&amp;quot;, or &amp;quot;xor di,di&amp;quot; est Ã©quivaut Ã  &amp;quot;33 FF&amp;quot;, il suffit donc de rajouter le code &amp;quot;66h&amp;quot; en prÃ©fixe, prÃ©fixe de nombreuses instructions 32 bits en fait.&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; font-size: smaller;&quot;&gt;* (3) - Turbo Pascal 7 ne connaissant pas les instructions 32 bits, on peut toujours les Ã©crire en langage machine. Pour avoir le code machine d'une instruction, on peut compiler un programme en assembleur ne contenant que cette instruction en demandant au compileur de crÃ©er un listing (avec le paramÃ¨tre &amp;quot;/Z&amp;quot; pour TASM 1.0 et 2.0), c'est Ã  dire un fichier contenant le code assembleur dÃ©composÃ©e, interprÃ©tÃ© et traduit en code machine. Sinon, il existe aussi des programmes effectuant la convertion, mais je n'en connais pas directement. Pour revenir Ã  notre &amp;quot;xor edi, edi&amp;quot;, l'&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Ã©quivalent &lt;/ins&gt;en code machine est &amp;quot;66 33 FF&amp;quot;, or &amp;quot;xor di,di&amp;quot; est Ã©quivaut Ã  &amp;quot;33 FF&amp;quot;, il suffit donc de rajouter le code &amp;quot;66h&amp;quot; en prÃ©fixe, prÃ©fixe de nombreuses instructions 32 bits en fait.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;* (4) - En 32 bits, l'instruction &amp;quot;STOSD&amp;quot; Ã©crira EAX et non AL, il faut donc rÃ©pÃ©ter &amp;quot;Coul&amp;quot; quatre fois dans EAX. On commence par l'Ã©crire dans AL, puis le copier dans AH, et enfin un &amp;quot;truc&amp;quot; pour le copier dans EAX. Le truc est en fait de dÃ©caler les octets de EAX de 16 bits vers la gauche Ã  l'aide de l'instruction SHL, puis recopier l'ancienne valeur de AX dans AX (qui est la partie basse de EAX pour souvenir !). Remarque : l'instruction &amp;quot;SHL&amp;quot; nÃ©cessite de compiler en mode 286/287, on peut rajouter &amp;quot;{$G+}&amp;quot; au dÃ©but du programme pour ce fait.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;* (4) - En 32 bits, l'instruction &amp;quot;STOSD&amp;quot; Ã©crira EAX et non AL, il faut donc rÃ©pÃ©ter &amp;quot;Coul&amp;quot; quatre fois dans EAX. On commence par l'Ã©crire dans AL, puis le copier dans AH, et enfin un &amp;quot;truc&amp;quot; pour le copier dans EAX. Le truc est en fait de dÃ©caler les octets de EAX de 16 bits vers la gauche Ã  l'aide de l'instruction SHL, puis recopier l'ancienne valeur de AX dans AX (qui est la partie basse de EAX pour souvenir !). Remarque : l'instruction &amp;quot;SHL&amp;quot; nÃ©cessite de compiler en mode 286/287, on peut rajouter &amp;quot;{$G+}&amp;quot; au dÃ©but du programme pour ce fait.&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 19 Nov 2012 20:28:00 GMT</pubDate>			<dc:creator>Haypo</dc:creator>			<comments>http://haypo.alwaysdata.net:443/wiki/Discuter:Exemples_en_assembleur_Intel_x86</comments>		</item>
		<item>
			<title>Haypo le 18 octobre 2005 à 03:11</title>
			<link>http://haypo.alwaysdata.net:443/wiki/index.php?title=Exemples_en_assembleur_Intel_x86&amp;diff=3833&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[CatÃ©gorie:Assembleur]]&lt;br /&gt;
{{Retour|Assembleur Intel x86|Retour Ã  l'assembleur}}&lt;br /&gt;
&lt;br /&gt;
== Lecture d'une touche au clavier ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&lt;br /&gt;
L'interruption matÃ©rielle 16h gÃ¨re le clavier. Elle possÃ¨de deux fonctions intÃ©ressantes :&lt;br /&gt;
* 00h : Lecture d'une touche;&lt;br /&gt;
* 01h : VÃ©rification de la prÃ©sence d'une touche dans le tampon clavier.&lt;br /&gt;
&lt;br /&gt;
Mais si une touche est Ã©tendue (touches flÃ©chÃ©es, Â« page haut Â», etc.), il faudrait appeler deux fois la fonction 00h pour obtenir le code de la touche : la premiÃ¨re fois, un code null (00h) est renvoyÃ©, la seconde fois le code Ã©tendu de la touche. Sachant que le code ASCII est toujours infÃ©rieur Ã  128, on pourra ajouter 128 aux codes Ã©tendus pour, au final, n'avoir Ã  appeler notre nouvelle fonction qu'une seule fois.&lt;br /&gt;
&lt;br /&gt;
=== Solution Turbo Pascal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(uses Dos;)&lt;br /&gt;
const MasqueFlagsCF = 1; { Masque pour isoler le bit CF des flags } (1)&lt;br /&gt;
&lt;br /&gt;
function TouchPresse : Boolean;&lt;br /&gt;
var Regs: Registers; (2)&lt;br /&gt;
begin&lt;br /&gt;
   with Regs do begin&lt;br /&gt;
      AH := $01; { Fonction 01h: VÃ©rification de la prÃ©sence d'une touche }&lt;br /&gt;
      Intr ($16,Regs); (3)&lt;br /&gt;
      TouchPresse := (Flags and MasqueFlagsCF = MasqueFlagsCF); (1)&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function LitTouche : Char;&lt;br /&gt;
var Regs: Registers; &lt;br /&gt;
begin&lt;br /&gt;
   with Regs do begin&lt;br /&gt;
      AH := $00; { Fonction 00h : Lecture d'une touche }&lt;br /&gt;
      Intr ($16,Regs);&lt;br /&gt;
 &lt;br /&gt;
      if AL=0 then (4)&lt;br /&gt;
         LitTouche := Char(AH or 128) (5)&lt;br /&gt;
      else&lt;br /&gt;
         LitTouche := Char(AL);&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analyse :&lt;br /&gt;
* (1) - Le type Registre&lt;br /&gt;
* (2) nous met Ã  disposition les [#Flags Flags], met dans un mot d'ensemble (Word). Pour isoler le flag [#ListeFlag CF] (bit #0), on utilisera le truc : &amp;quot;if Flags and MASQUE = MASQUE&amp;quot; oÃ¹ MASQUE est une puissance de 2, la puissance est la position du bit (en partant de zÃ©ro). CF Ã©tant Ã  la position 0 (bit #0), le MASQUE est donc 1 (2^0).(2) - Pour appeler une interruption, Turbo Pascal nous met Ã  disposition (par l'unitÃ© DOS) le type &amp;quot;Registers&amp;quot; qui permet d'accÃ©der de faÃ§on virtuelle aux registres. Virtuelle car celÃ  ne modifie par directement les registres, les registres sont tous envoyÃ©s comme &amp;quot;paramÃ¨tre&amp;quot;, puis sont lus aprÃ¨s l'appel de &amp;quot;Intr&amp;quot; (3) (appelle d'une l'interruption).&lt;br /&gt;
* (3) - Enfin pour appeler une interruption, on utilise la fonction &amp;quot;Intr&amp;quot; avec comme paramÃ¨tre le numÃ©ro de l'interruption et les registres. Ici on utilise la fonction 00h de l'interruption 16h. Celle-ci retourne dans AL le code ASCII de la touche et AH contient le code Ã©tendu de la touche (si AL=0).&lt;br /&gt;
* (4) - Pour savoir si une touche est Ã©tendue, on vÃ©rifie que AL = #0.&lt;br /&gt;
* (5) - Pour ajouter 128 Ã  la valeur de la touche Ã©tendue, on peut Ã©galement faire &amp;quot;OR 128&amp;quot;, celÃ  pose dans tous les cas le bit #7 de AH. Ca ne fonctionne que pour les puissances de 2 (1, 2, 4, 8, 16, 32, 64, 128, 256, ...).&lt;br /&gt;
&lt;br /&gt;
=== Solution Assembleur ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function TouchPresse : boolean; assembler; &lt;br /&gt;
asm&lt;br /&gt;
 mov ah,01h { Fonction 01h : VÃ©rifie qu'une touche soit disponnible }&lt;br /&gt;
 int 16h { Appel l'interruption clavier }&lt;br /&gt;
&lt;br /&gt;
 mov al,1 { Une touche est prÃ©sente (TRUE) }&lt;br /&gt;
 jnz @PasVide (1)&lt;br /&gt;
 xor al,al { Pas de touche touche (FALSE) }&lt;br /&gt;
&lt;br /&gt;
@PasVide:&lt;br /&gt;
end; &lt;br /&gt;
&lt;br /&gt;
function LitTouche : char; assembler;&lt;br /&gt;
asm&lt;br /&gt;
  xor ah,ah { Fonction 00h = Lit une touche du clavier }&lt;br /&gt;
  int 16h { Appel l'interruption clavier }&lt;br /&gt;
&lt;br /&gt;
  or al,al { Est-ce une touche Ã©tendue? (AL=0) } (2)&lt;br /&gt;
  jz @Etendue { Ouais -&amp;gt; AL = code Ã©tendu (AH) + 128 } (2)&lt;br /&gt;
&lt;br /&gt;
  ret { Touche standard -&amp;gt; on se tire }&lt;br /&gt;
&lt;br /&gt;
@Etendue:&lt;br /&gt;
  mov al,ah { AL = Code ASCII Ã©tendu }&lt;br /&gt;
  or al,128 { Ajoute 128 Ã  celui-ci pour le distinguer }&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analyse :&lt;br /&gt;
* (1) - La fonction 01h de l'interruption 16h renvoi la prÃ©sence d'une touche par le flag ZF. Pour le tester on utilise JNZ : ZF=0, ne fait rien; ZF=1 : Saute !&lt;br /&gt;
* (2) - La fonction 00h de l'interruption 16h renvoi le code ASCII de la touche dans le registre AL. Si celui-ci vaut 0, alors la touche est Ã©tendue, et le code est stockÃ© dans AH. Pour savoir si AL=0, on peut faire &amp;quot;cmp al,0; jz @Saut&amp;quot;, mais il est plus rapide de faire le test par &amp;quot;or&amp;quot;. Celui-ci modifie le flag ZF : Si AL=0, ZF=1 (ZF = Zero Flag !); si AL&amp;lt;&amp;gt;0, ZF=0.&lt;br /&gt;
&lt;br /&gt;
== Effacement de l'Ã©cran dans le mode VGA ==&lt;br /&gt;
&lt;br /&gt;
Mode VGA : 320x200 pixels en 256 couleurs.&lt;br /&gt;
&lt;br /&gt;
Dans le mode VGA, la mÃ©moire vidÃ©o est placÃ©e Ã  l'adresse $A000:$0000, et prend 320*200=64 000 octets. Le but du jeu est de remplir ces 64 000 octets avec une couleur prÃ©cise, c'est Ã  dire un valeur codÃ©e sur un octet.&lt;br /&gt;
			&lt;br /&gt;
=== Solution en Turbo Pascal ===&lt;br /&gt;
&lt;br /&gt;
 fillchar (Mem[$A000:0],64000,Couleur); { Couleur Ã©tant un &amp;quot;Byte&amp;quot;, un octet }&lt;br /&gt;
&lt;br /&gt;
CelÃ  fonctionne trÃ¨s bien, mais Turbo Pascal Ã©tant dÃ©veloppÃ© pour fonctionner avec les 286, processeur en 16 bits, fillchar fonctionnera donc en 16 bits (voir en 8 bits, je ne sais pas trop). On va donc l'optimiser en passant Ã©crivant dans la mÃ©moire avec les instructions 32 bits.&lt;br /&gt;
&lt;br /&gt;
=== Solution Assembleur (1) ===&lt;br /&gt;
&lt;br /&gt;
(intÃ©grÃ©e dans un programme Turbo Pascal, premiÃ¨re version, dite &amp;quot;Ã©ductive&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Procedure EffaceEcran (Coul: byte);&lt;br /&gt;
begin&lt;br /&gt;
   asm (1)&lt;br /&gt;
      mov ax,0A000h(2)&lt;br /&gt;
      mov es,ax { ES = A000h }&lt;br /&gt;
 &lt;br /&gt;
      mov di,0 { Maintenant ES:DI pointe sur l'adresse A000:0000 } &lt;br /&gt;
      mov al,[coul] { On lit la couleur passÃ©e en paramÃ¨tre } (3)&lt;br /&gt;
      mov cx,64000 { 64 000 octets Ã  remplir}&lt;br /&gt;
      rep stosb { Ecrit CX fois l'octet AL Ã  l'adresse ES:DI }&lt;br /&gt;
   end; (1)&lt;br /&gt;
end; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analyse :&lt;br /&gt;
* (1) - En turbo Pascal, on peut intÃ©grer de l'assembleur n'importe oÃ¹ en tapant &amp;quot;asm { les instructions } end;&amp;quot;.&lt;br /&gt;
* (2) - Les nombres hexadÃ©cimaux dÃ©butants par des lettres peuvent Ãªtre confondus avec des noms de variables, il faut alors rajouter un zÃ©ro en prÃ©fixe.&lt;br /&gt;
* (3) - Pour lire les paramÃ¨tres, rien de plus simple : taper son nom (les crochets ne sont pas obligatoires).&lt;br /&gt;
&lt;br /&gt;
=== Solution Assembleur (2) ===&lt;br /&gt;
&lt;br /&gt;
(version optimisÃ©e 32 bits)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Procedure EffaceEcran (Coul: byte);&lt;br /&gt;
assembler; asm (1)&lt;br /&gt;
   mov ax,0A000h&lt;br /&gt;
   mov es,ax&lt;br /&gt;
 &lt;br /&gt;
   { xor edi, edi } (2)db 66h; xor di,di (3) { ES:DI pointe &lt;br /&gt;
   sur l'adresse A000:0000 }&lt;br /&gt;
   mov al,[coul] { On lit la couleur passÃ©e en paramÃ¨tre }&lt;br /&gt;
   mov ah, al { Copie AL dans AH, donc AX = deux fois la couleur } (4)&lt;br /&gt;
 &lt;br /&gt;
   mov bx, ax { Sauve AX dans le registre BX } (4)&lt;br /&gt;
   { shl eax,16 } db 66h; shl ax,16 { DÃ©place les deux octets de poids faible }&lt;br /&gt;
                                    { de EAX dans les octets de poids fort } (4)&lt;br /&gt;
   mov ax, bx { Relit AX du registre BX } (4)&lt;br /&gt;
   mov cx,64000/4 { 16 000 double-mots Ã  remplir } (5)&lt;br /&gt;
   {rep stosd } db 66h; rep stosw { Ecrit ECX fois le double-mot EAX Ã  l'adresse ES:EDI } (6)&lt;br /&gt;
end; (1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analyse :&lt;br /&gt;
&lt;br /&gt;
* (1) Encore mieux, en turbo Pascal on peut dÃ©clarer une procÃ©dure qui n'utilise que l'assembleur, ce qui Ã©vite d'avoir Ã  taper &amp;quot;begin&amp;quot; et &amp;quot;end;&amp;quot; inutiles.&lt;br /&gt;
&lt;br /&gt;
* (2) - Pour mettre un registre Ã  zÃ©ro, la mÃ©thode la plus rapide est &amp;quot;xor reg,reg&amp;quot;, car XOR est une fonction de base du processeur.&lt;br /&gt;
&lt;br /&gt;
* (3) - Turbo Pascal 7 ne connaissant pas les instructions 32 bits, on peut toujours les Ã©crire en langage machine. Pour avoir le code machine d'une instruction, on peut compiler un programme en assembleur ne contenant que cette instruction en demandant au compileur de crÃ©er un listing (avec le paramÃ¨tre &amp;quot;/Z&amp;quot; pour TASM 1.0 et 2.0), c'est Ã  dire un fichier contenant le code assembleur dÃ©composÃ©e, interprÃ©tÃ© et traduit en code machine. Sinon, il existe aussi des programmes effectuant la convertion, mais je n'en connais pas directement. Pour revenir Ã  notre &amp;quot;xor edi, edi&amp;quot;, l'Ã©quivalant en code machine est &amp;quot;66 33 FF&amp;quot;, or &amp;quot;xor di,di&amp;quot; est Ã©quivaut Ã  &amp;quot;33 FF&amp;quot;, il suffit donc de rajouter le code &amp;quot;66h&amp;quot; en prÃ©fixe, prÃ©fixe de nombreuses instructions 32 bits en fait.&lt;br /&gt;
&lt;br /&gt;
* (4) - En 32 bits, l'instruction &amp;quot;STOSD&amp;quot; Ã©crira EAX et non AL, il faut donc rÃ©pÃ©ter &amp;quot;Coul&amp;quot; quatre fois dans EAX. On commence par l'Ã©crire dans AL, puis le copier dans AH, et enfin un &amp;quot;truc&amp;quot; pour le copier dans EAX. Le truc est en fait de dÃ©caler les octets de EAX de 16 bits vers la gauche Ã  l'aide de l'instruction SHL, puis recopier l'ancienne valeur de AX dans AX (qui est la partie basse de EAX pour souvenir !). Remarque : l'instruction &amp;quot;SHL&amp;quot; nÃ©cessite de compiler en mode 286/287, on peut rajouter &amp;quot;{$G+}&amp;quot; au dÃ©but du programme pour ce fait.&lt;br /&gt;
&lt;br /&gt;
* (5) - STOSD Ã©crit des double-mots (4 octets), or nous voulons remplir 64 000 octets. Il nous faudra donc Ã©crire 64 000/4 fois EAX. Remarque : pour STOSW, on divisera par 2 tout simplement :-)&lt;br /&gt;
&lt;br /&gt;
* (6) - Une fois de plus, on peut Ã©tendre une instruction 16 bits Ã  son Ã©quivalant en 32 bits en rajoutant le prÃ©fixe &amp;quot;66h&amp;quot;. En rÃ©alitÃ© &amp;quot;REP STOSW&amp;quot; est &amp;quot;F3 AB&amp;quot; (F3 = &amp;quot;REP&amp;quot;), et &amp;quot;REP STOSD&amp;quot; est &amp;quot;F3 66 AB&amp;quot;. Mais le processeur est tolÃ©rant, et le code est d'autant plus clair avec &amp;quot;db 66h; stosw&amp;quot;, alors pourquoi s'en priver.&lt;/div&gt;</description>
			<pubDate>Tue, 18 Oct 2005 03:11:40 GMT</pubDate>			<dc:creator>Haypo</dc:creator>			<comments>http://haypo.alwaysdata.net:443/wiki/Discuter:Exemples_en_assembleur_Intel_x86</comments>		</item>
	</channel>
</rss>