首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编语言"CMP“

汇编语言"CMP“
EN

Stack Overflow用户
提问于 2015-02-27 07:19:45
回答 1查看 1.5K关注 0票数 0

我正在为我的Machine Organization课程做我的第一个项目。程序将屏幕从左向右翻转。这工作得很好,我对此没有问题。然而,除了翻转屏幕之外,我的教授还要求我们在灰色上显示所有大写的C。我曾尝试在loopRow循环中执行此操作。组装时没有错误,但是它不工作。我还尝试与ASCII代码值进行比较,但也不起作用。有什么建议吗?

代码语言:javascript
复制
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         
EN

回答 1

Stack Overflow用户

发布于 2015-02-27 07:34:03

通常的建议是:学会使用调试器。

也就是说,您的问题是您正在比较CXAX,它们也包含字符和属性。您确实希望只比较字符,因此请分别使用CMP CL, 'C'CMP AL, 'C'

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28754712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档