2015-02-26 4 views
0

Я работаю над своим первым проектом для моего класса Machine Organization. Программа переворачивает экран слева направо. Это прекрасно работает, и у меня нет проблем с этим. Однако в дополнение к перевороту экрана мой профессор также попросил нас отобразить все верхние буквы C в красном на сером. Я попытался сделать это в пределах loopRow LOOP. При сборке ошибок нет, однако это не сработает. Я также попытался сравнить с кодовым значением ASCII, но это тоже не сработало. Какие-либо предложения?Сборочный язык «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   

ответ

2

Обычные рекомендации: научиться использовать отладчик.

Сказали, что ваша проблема в том, что вы сравниваете CX и AX, которые содержат характер и атрибут. Вы действительно хотите сравнить только персонажа, поэтому используйте CMP CL, 'C' и CMP AL, 'C' соответственно.

Смежные вопросы