所以我正在我的机器组织课程中做我的第一个项目。当程序运行时,它应该垂直翻转屏幕。例如,左侧的所有字符和数字将被翻转到右侧,反之亦然。为此,loop25
每行循环 25 次,每次循环向上移动一行。每个循环还调用flipRow
PROC。这个过程应该取两个外部字符并交换它们,移动并重复直到它到达中心。基本上它只是不会组装。我知道问题与loopRow
循环有关,但我还没有足够的经验知道如何解决它。
MyData SEGMENT
row DB 80
MyData ENDS
;------------------------------------------------------------------------ CODE SEGMENT
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:
CALL flipRow
SUB BX, 160
CMP BX, 0
JNE loop25 ;if not equal to 0, numLoops - 1 and repeat
MOV AH, 4Ch
INT 21h
MainProg ENDP
flipRow PROC
MOV AX, 158
loopRow:
MOV DX, ES: [ (BX - 160) + ((AX - 158) * -1) ]
MOV CX, ES: [ (BX - 160) + AX ]
MOV ES: [ (BX - 160) + ((AX - 158) * -1) ], CX
MOV ES: [ (BX - 160) + AX ], DX
DEX AX
DEC AX
DEC row
DEC row
CMP row, 80
JNE loopRow
RET
flipRow ENDP
MyCode ENDS
;-------------------------------------------------------------------------------------
END MainProg