我目前正在尝试将空终止符附加到(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).
所以我假设我不能MOV
将值BYTE PTR[buff]
放入寄存器 edx。所以我什至无法开始测试这种尝试将NULL
终止符应用于字符串的方法是否有效。
我的问题是,上面的代码有什么问题(我应该使用不同的寄存器而不是 edx 吗?)
NULL
将终止符应用于字符串 的最佳方法是什么?