現在、(a?) ユーザーが入力した文字列にヌル ターミネータを追加しようとしています。
.386
.model flat, stdcall
WriteFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED
ReadFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED
GetStdHandle PROTO STDCALL:DWORD
.data
buff DB 100h DUP(?)
stdInHandle DWORD 0
bytesRead DWORD ?
.code
start:
;read string from stdin
INVOKE GetStdHandle, -10
MOV stdInHandle, eax
INVOKE ReadFile, stdInHandle, BYTE PTR[buff], 100, ADDR bytesRead, 0
;append null terminator on CR,LF
MOV eax, bytesRead
MOV edx, BYTE PTR[buff]
SUB eax, 2
AND BYTE PTR [eax+edx], 0
RET
END start
でのアセンブルを拒否しMOV edx, BYTE PTR[buff]
、エラーが発生します。
error: Invalid combination of opcode and operands (or wrong CPU setting).
したがって、レジスタedxMOV
に値を入れることができないと仮定しています。したがって、ターミネータを文字列BYTE PTR[buff]
に適用しようとするこの方法が機能するかどうかをテストすることさえできません。NULL
私の質問は、上記のコードの何が問題なのかということです (edx の代わりに別のレジスタを使用する必要がありますか?)
NULL
ターミネータを文字列 に適用する最良の方法は何ですか?