0

最近、アセンブリでstdoutに書き込む方法を理解しましたが、stdinからの読み取り、および読み取ったものをstdoutに出力するのに問題があります。これは私がこれまでに持っているコードです:

.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


.data?
input DW ?
input_size DD ?
read DD ?

.code
main:
    INVOKE GetStdHandle, -10
    INVOKE ReadFile, eax, OFFSET input, input_size, read, 0
    INVOKE GetStdHandle, -11
    INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0
    RET 
END main

私はそれを間違って読んでいるとかなり確信しています。私はかなり確信してinput_sizeおりread、期待どおりに動作していません(これに置き換えるinput_sizenumber時空が表示されますnumber)。これが問題の原因になっています(入力を入力してreturnキーを押すと、何も表示されません)。

私はかなり長い間これをいじくり回してきました、そしてどんな助けでもありがたいです。(私はこれが宿題ではないことを学ぶためだけにこれを行っています)。

私の質問は本質的に私が間違っていることは何ですか?

4

1 に答える 1

2

入力バッファに割り当てるのは2バイトだけです。

input DW ?

入力サイズがゼロであるため、ReadFileは最大0バイトを読み取ります。

input_size DD ?

nNumberOfBytesToReadは、ポインターではなく値として渡す必要があります。そして、Readfileに入力されたのと同じ数のバイトを書き込みたいと思います。

INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0
INVOKE WriteFile, eax, OFFSET input, read, read, 0
于 2012-10-04T14:47:53.290 に答える