2013-05-04 2 views
2

ce que je veux savoir est évidemment dit sur le sujet. J'ai un problème à déplacer un registre de 8 bits vers un registre de 16 bits. ce que j'essaie de faire est de diviser un nombre de 10 en permanence jusqu'à ce qu'il soit inférieur à 10, et, dans chaque temps de division, j'essaie de sortir la partie restante de la division de ah registre, ajouter 48 pour cela, alors je pourrais avoir son code Ascii, alors j'essaie de montrer le chiffre que j'ai, à l'écran. voici le code:Assemblage, Déplacer un registre 8 bits vers un registre 16 bits, comment?

Num1 DW 255 
DIVISION : 
     CMP NUM1,10 
      Jl DIVEND 

     MOV AX,10 
     DIV NUM1 
     MOV NUM1,AL ;* 


     ADD AH,48 
     MOV DL,AH; 
     MOV AH,02H 
     INT 21H 

    JMP DIVISION 

mais, quand je suis en essayant de le monter, il est dit, les types Opérande ne correspondent pas à la ligne indiquée par *. im utilisant turbo assembleur V4.1 ... que dois-je faire?

+0

Vous ne vous souvenez pas beaucoup de Turbo Assembler, mais avez-vous essayé 'MOV BYTE NUM1, AL'? –

+1

Je ne comprends pas ce que vous faites MOV NUM1, AL déplace le contenu de AL en NUM1? cela ne peut pas arriver, peut-il? –

+0

@PreetSangha À droite, j'ai raté cela en regardant simplement la syntaxe :) –

Répondre

0

Voulez-vous dire cela? L'erreur que vous obtenez est parce que vous déclarez un mot mais l'adressez comme un byte. Si vous avez fait Num1 db cela fonctionne aussi.

Testé avec TASM 4.1

+0

merci, cela a fonctionné ... – user1547062

2

Quant à la question plus générale dans le titre: vous utilisez movzx (déplacer étendent zéro) pour les valeurs non signées et movsx (signe de déplacement extension) pour les valeurs signées.

Questions connexes