簡體   English   中英

匯編語言“ CMP”

[英]Assembly Language “CMP”

我正在為我的機器組織課程從事第一個項目。 該程序從左向右翻轉屏幕。 這工作正常,我對此沒有任何問題。 但是,除了翻轉屏幕之外,我的教授還要求我們將所有大寫的C顯示為灰色的紅色。 我試圖在loopRow LOOP中執行此loopRow 組裝時沒有錯誤,但是不起作用。 我也嘗試過與ASCII碼值進行比較,但這也不起作用。 有什么建議么?

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         

通常的建議適用:學習使用調試器。

就是說,您的問題是您正在比較CXAX ,它們也包含字符和屬性。 您確實只想比較字符,所以分別使用CMP CL, 'C'CMP AL, 'C'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM