[英]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
通常的建議適用:學習使用調試器。
就是說,您的問題是您正在比較CX
和AX
,它們也包含字符和屬性。 您確實只想比較字符,所以分別使用CMP CL, 'C'
和CMP AL, 'C'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.