だから私はこのプログラムを持っています:
[BITS 16]
[ORG 7C00h]
JMP 0:start
start:
MOV AX, 0
MOV DS, AX
MOV ES, AX
MOV SS, AX
MOV SP, 7C00h
MOV SI, Hello
CALL _puts16
MOV AL, LogLvl1
INT 21h
CALL .getinput
.getinput:
MOV AH, 2h
MOV AL, Success ;Echo was successful
INT 21h
MOV AH, 1h ;Set AH to 1h, which means character input
INT 21h
MOV INPUT, AL ;Store the character in INPUT
MOV AH, 2h ;Change AH back to 2h, which means character output
MOV DL, Message ;Move Message to DL, which will be echoed
INT 21h
MOV DL, INPUT ;Move the inputed key to DL to be echoed
INT 21h
RET
;input= es:si -> string
_puts16:
PUSHA
.BEGIN:
LODSB ;Load a single byte
CMP AL, 0 ;Calculate if that byte is 0, or null
JE .END ;Jump to end if it is not 0
MOV AH, 0Eh ;Otherwise, set 24 bit graphics modes
INT 10h
JMP .BEGIN
.END:
POPA
RET
.define:
Hello DB "Enter a string: ",0
Message DB " Grats! You said",0
INPUT DB " ",0
LogLvl1 DB "Calling .getinput...\n",0
Success DB "Successful.\n",0
times 510 - ($ - $$) db 0
DW 0xAA55
私はアセンブリに非常に慣れていないため、.define で定義されている文字列変数 "INPUT" に入力されたキーを移動する必要がありますが、ネットワイド アセンブラで次のエラーが表示されます。
1.asm:24: エラー: オペコードとオペランドの組み合わせが無効です
何らかの理由で AL を INPUT に移動できないことを意味すると思いますが、その理由はわかりません。私が言ったように、私は組み立てに慣れていないので、おそらく明らかな間違いです。どうすればこれを修正できますか? 後でプログラムでエコーするために、入力した文字またはキーをメモリに保存する必要があります。