それで、私は機械編成クラスで最初のプロジェクトに取り組んでいます。プログラムが実行されると、画面が垂直方向に反転するはずです。たとえば、左側のすべての文字と数字は右側に反転され、その逆も同様です。これを実現するには、loop25
各行を 25 回ループし、ループごとに 1 行上に移動します。各ループはflipRow
PROC も呼び出します。この手順は、外側の 2 つの文字を取得して交換し、移動して、中央に到達するまで繰り返すことになっています。基本的には組み立てません。問題がloopRow
LOOP に関係していることはわかっていますが、修正方法を知るにはまだ十分な経験がありません。
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