あなたはSYS_WRITEシステムコールを呼び出しています。 sys_write()は3つの引数、出力デバイスのファイル記述子(stdoutの場合は1)、印刷する値を格納したバッファのアドレス、および印刷するデータのサイズをとります。したがって、ファイルディスクリプタを%ebxに格納し、バッファのアドレスを%ecxに格納し、データのサイズを%edxに格納する必要があります。ファイルディスクリプタを格納するには、次の命令を使用できます。
movl $1, %ebx // store 1 (stdout) in ebx)
使用できるデータのサイズストアに:今
movl $1, %edx // size is 1 byte
を、あなたはバッファのアドレスを格納する必要があり、あなたはメモリ内にいくつかの場所や必要性を、あなたのデータを配置する必要があります%ecxにメモリのアドレスを格納します。
subl $4, %esp // get 4 bytes of memory in the stack
movl $65, (%esp) // store data in the memory where esp points to
movl %esp, %ecx // store address of the data in the ecx
ここで、int 0x80を発行することができます。次のようにして、データをスタックに格納することができます。あなたは以下のコードを書くことができ、全体として
movl $04, %eax // store syscall number in eax
int $0x80 // issue the trap interrupt
:
movl $1, %ebx
subl $0x4, %esp
movl $64, (%esp)
start_loop:
movl (%esp), %eax
addl $1, %eax
movl %eax, (%esp)
movl %esp, %ecx
movl $1, %edx
movl $0x04, %eax
int $0x80
movl (%esp), %eax
cmpl $126, %eax
jle start_loop
addl $0x4, %esp
を参照してくださいLinuxのシステムは、レジスタの詳細については知っているhttp://www.rulingminds.com/syscallspart2でパート2を呼び出し、そのシステムは、使用を呼び出します。
問題が何ですか?あなたのプログラムが決して止まらないならば、あなたの 'jle'と' jmp'命令が両方ともループの先頭に行くからです。 – ughoavgfhw