2015-02-26 1 views
0

Je travaille sur mon premier projet pour ma classe d'organisation de machines. Le programme retourne l'écran de gauche à droite. Cela fonctionne très bien et je n'ai aucun problème avec cela. Cependant, en plus de retourner l'écran, mon professeur nous a également demandé d'afficher toutes les majuscules C en rouge sur fond gris. J'ai essayé de le faire dans la boucle loopRow. Il n'y a pas d'erreurs lors de l'assemblage, cependant, cela ne fonctionne pas. J'ai également essayé de comparer à la valeur du code ASCII, mais cela n'a pas fonctionné non plus. Aucune suggestion?Language d'assemblage "CMP"

MyCode SEGMENT 
     ASSUME CS:MyCode, DS:MyData 

MainProg PROC     

    MOV  AX, MyData    
    MOV  DS, AX     
    MOV  AX, 0B800h   
    MOV  ES, AX 

    MOV BX, (25 * 160) 


    loop25: 

     SUB BX, 160 
     CALL flipRow 

     CMP BX, 0 
    JNE loop25    ;if not equal to 0, numLoops - 1 and repeat 

    MOV  AH, 4Ch     
    INT  21h     

MainProg ENDP 

flipRow PROC 

    MOV DI, BX 
    ADD DI, 158 
    MOV SI, BX 

loopRow: 

    MOV AX, ES: [DI] 
    MOV CX, ES: [SI] 
    MOV ES: [DI], CX 
    CMP CX, 'C'         ;compare CX to 'C' 
    JNE next         ;if != C go to next 
    MOV ES: [DI + 1], BYTE PTR 01111100b 
    next: 
    MOV ES: [SI], AX 
    CMP AX, 'C'         ;compare AC to 'C' 
    JNE next2         ;if != C go to next2 
    MOV ES: [SI + 1], BYTE PTR 01111100b 
    next2: 
    DEC DI 
    DEC DI 
    INC SI 
    INC SI 

    CMP SI, DI 
    JL loopRow 
    RET 
flipRow ENDP     

MyCode ENDS   

Répondre

2

Les conseils habituels s'appliquent: apprendre à utiliser un débogueur. Cela dit, votre problème est que vous comparez CX et AX, qui contiennent également le caractère et l'attribut. Vous voulez vraiment comparer uniquement le caractère, alors utilisez CMP CL, 'C' et CMP AL, 'C' respectivement.