我正在为我的Machine Organization课程做我的第一个项目。程序将屏幕从左向右翻转。这工作得很好,我对此没有问题。然而,除了翻转屏幕之外,我的教授还要求我们在灰色上显示所有大写的C。我曾尝试在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 发布于 2015-02-27 07:34:03
通常的建议是:学会使用调试器。
也就是说,您的问题是您正在比较CX和AX,它们也包含字符和属性。您确实希望只比较字符,因此请分别使用CMP CL, 'C'和CMP AL, 'C'。
https://stackoverflow.com/questions/28754712
复制相似问题