1
ユーザー名をとり、 "Hello [userName]"を印刷するアセンブリx86を使用して単純な挨拶プログラムを作成しようとしました 挨拶メッセージを印刷するときにユーザー名の最初の文字が2倍になります例:アセンブリx86、挨拶プログラム
入力:
Black Knight
出力:
Hello BBlack Knight
、ここでは私のコード
ですglobal _start
section .data
msg1 db "Hello "
user_input times 20 db 0
section .bss
section .text
_start :
; read
mov eax , 3
mov ebx , 0
mov ecx , user_input
mov edx , 20
int 0x80
; write
mov eax , 4
mov ebx , 1
mov ecx , msg1
mov edx , 7
int 0x80
mov eax , 4
mov ebx , 1
mov ecx , user_input
mov edx , 20
int 0x80
; exit
mov eax , 1
mov ebx , 0
int 0x80
user_inputバッファがmsg1をメモリに直接(上記と同様に)続けている場合、1回の呼び出しで大きな文字列として出力することもできます。 ecx = msg1、edx = 6 + 20。 (生徒のための素晴らしい例のように見えるが、アセンブリでは変数はないが、連続したバイトからなるコンピュータメモリであり、コードは高水準言語から知られている "構造的"意味をすべて与える責任がある。メモリアドレスの、それ以上のもの)。あなたが定義したメモリレイアウトによって、メモリ内のmsg1に追加するユーザ入力を作成しました。これは書き込み中に悪用される可能性があります。 – Ped7g