2016-04-10 25 views
-2

stdinから整数を読み込み、stdoutに書き込んだりしようとしていますが、私が達成する唯一のことは単純にこんにちはの世界を書くことです。これは私が持っているコードです:アセンブリ内の読み込みと書き込みと整数ATT

.global _start 
_start: 
push %ebp 
movl %esp,%ebp 
subl $4,%esp 


#Read 
mov $3,%eax #READ 
mov $0,%ebx #STDIN 
mov -4(%ebp),%ecx 
mov $1,%edx 
int $0x80 

#Write call 
mov $4,%eax #WRITE 
mov $1,%ebx #STDOUT 
mov -4(%ebp),%ecx 
mov $1,%edx 
int $0x80 

mov $1,%eax #exit 
mov $0,%ebx # exit code 
int $0x80 

事前に感謝し、これらはアセンブリ内の私の最初のステップであるため、私にはあまりにも難しいことはありません:)

+0

'int 0x80'経由で**は数値を表す** ASCII文字を変換せず、その整数を宛先に格納します。文字通り-4(%ebp)に格納されているものは、整数値ではなく数値を構成するASCII文字になります。整数に変換する必要がある場合は、演算と計算を行い、それを書くことができます読み込み時にASCIIから整数にASCIIを変換するコードが必要です –

+0

効果的に 'sys_read'はASCII文字だけをバッファに読み込みます。 'sys_write'はASCII文字を含むバッファのみを書き込みます。 –

+0

追加情報をありがとう。 – Miguel

答えて

0
mov -4(%ebp),%ecx 

readシステムコールを作ります、%ecxには、データを保存するアドレスが含まれています。つまり、%ecx%ebpマイナス4になりますが、このmov命令では%ecxをロードし、メモリの内容は%ebp - 4になります。

は、私はあなたがある(両方の場所で)何をしたいと思います

lea -4(%ebp), %ecx 
1つの問題とネイトの答えのお得な情報が、他のは本当にあなたがその `sys_read`システムコールを認識する必要がありますdo.Youするつもり何に降りてくる
+0

ありがとうございました。それは本当に私を助ける! – Miguel

関連する問題