私はいつもクラスでグループに遅れをとっているように見えます.アセンブリに関する私のクラスの次の章に向けて「練習」したかったのですが、それはループに関するものです.
1 から 10,000 までカウントするこの小さなループを作成しました (実行に 1 ミリ秒かかると考えました)。
.MODEL SMALL
.STACK 100h
.DATA
Finished DB 10, 13, 'Loop x 10,000 finished. Congratulations! $', 10, 13
.CODE
MAIN PROC
MOV AX, @data
MOV DS, AX
MOV CX, 10000
MOV BX, 0
StrtLoop:
INC BX
LOOP StrtLoop
CMP BX, 10000
JE DispMsg
JMP SkipMsg
DispMsg:
MOV AH, 09H
MOV DX, OFFSET Finished
INT 21H
SkipMsg:
MOV AL, 0h
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
数分前にゼロの数を間違えて、プログラムを壊してしまいました。なぜこうなったのか不思議に思っていました。
このエラーが発生しました:
アセンブルファイル:Loop.ASM
エラーloop.ASM(15) 値が範囲外です。
エラーloop.ASM(24) 値が範囲外です。
エラー メッセージ: 2
警告メッセージ: なし
パス:
残りのメモリ: 467k
.MODEL SMALL
.STACK 100h
.DATA
Finished DB 10, 13, 'Loop x 100000 finished. Congratulations! $', 10, 13
.CODE
MAIN PROC
MOV AX, @data
MOV DS, AX
MOV CX, 100000
MOV BX, 0
StrtLoop:
INC BX
LOOP StrtLoop
CMP BX, 100000
JE DispMsg
JMP SkipMsg
DispMsg:
MOV AH, 09H
MOV DX, OFFSET Finished
INT 21H
SkipMsg:
MOV AL, 0h
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
いくつかの Google 検索 (およびメモリ レジスタに関する本を読んでいる) の後、65,535 バイトのハード リミットがあることがわかりました。これは正しいです?誰かがこのメモリ制限を超えたいと思ったらどうしますか? それを行う方法はありますか?
私には奇妙に思えます...