Je suis en train d'imprimer les numéros simplement dans la séquence soitConversion hexadécimaux/nombres décimaux (assemly-TASM)
1,2,3,4,5,6,7,8,9,10,11 En utilisant Loop, D'abord, j'ai converti chaque nombre en Hexa imprimé, le réinitialise à l'incrément décimal de 1, puis j'imprime le suivant jusqu'à ce que le nombre est égal à 9, Lorsque le nombre est égal à 9, j'ai utilisé DAA simplement le nombre et après avoir fait tourner et déplacer le nombre j'ai finalement stocké le résultat dans la chaîne.
La sortie est très bien jusqu'à ce que le 16, mais après 16 la séquence ne se répète,
sortie désiré:
1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15,16,17,18,19,20
courant de sortie 1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,11,12,13,14,15
Pourquoi cela arrive-t-il ???
Voici mon code,
MOV CX,20 ;Number of Iterations
MOV DX,1
L1:
PUSH DX
ADD DX,30H
MOV AH,02H ;PRINT Content of DX
INT 21H
POP DX
ADD DX,1
CMP DX,09d ;If number is Greater than 9 jump to L2
JA L2
LOOP L1
L2:
PUSH DX
MOV AX,DX
DAA ;Convert to the Decimal
XOR AH,AH ;SET AH to 0000
ROR AX,1
ROR AX,1
ROR AX,1
ROR AX,1
SHR AH,1
SHR AH,1
SHR AH,1
SHR AH,1
ADC AX,3030h
MOV BX,OFFSET Result
MOV byte ptr[BX],5 ; Length of the String
MOV byte ptr[BX+4],'$' ;5th position of string , $=Terminator
MOV byte ptr[BX+3],AH ;2nd Number onto 4th position
MOV byte ptr[BX+2],AL ;3rd number onto 3rd Position
MOV DX,BX
ADD DX,02 ;1st 2 positions of String are type of string and
length respectively
MOV AH,09H ;to print the string
INT 21H
POP DX
ADD DX,1
LOOP L2
MOV AH,4CH ;Return control to the DOS
INT 21H
P.S: J'ai pris l'aide de ce tableau pour comprendre les chiffres.
http://www.cheat-sheets.org/saved-copy/ascii.png
vous devez compactify votre code, e. g. utiliser 'ror ax, 4' une fois au lieu de quatre fois' ror ax, 1'. De plus, tout le monde ne sait pas ce que font les appels d'interruption (je n'ai jamais assemblé sous DOS), il serait plus facile de savoir ce que fait le code si vous écrivez de courts commentaires dans ces lignes. - et s'il vous plaît supprimer autant de lignes vides que possible. Les lignes vides sont idéales pour la lisibilité, pour séparer les blocs logiques de code, mais plusieurs lignes vides conséquentes étirent trop la liste. – IdiotFromOutOfNowhere
J'utilise DosBox en x64 pour je pense que c'est pourquoi je ne pouvais pas être en mesure d'utiliser directement ROR, 4 ou SHR, 4, je dois les utiliser séparément. et Commentaires ont été ajoutés – micheller
IIRC, vous utilisez TASM, non? Peut-être une faille dans cet assembleur, puisque mes manuels Intel disent, que tourner/décaler par immédiat fonctionne également en mode 16 bits. Quoi qu'il en soit, qu'en est-il 'mov mot ptr [BX + 2], AX' - cela fonctionnerait-il? ;-) – IdiotFromOutOfNowhere