[解決済み] NASMでscanfを使うには?
2022-02-04 18:59:59
質問内容
をどのように使うか考えています。
scanf
を使用してユーザーの入力を取得します。私は
printf
というように、画面に書きたいデータをスタックにプッシュするだけです。
global _main
extern _printf
extern _scanf
section .data
msg db "Hi", 0
section .text
_main:
push ebp
mov ebp, esp
push msg
call _printf
mov esp, ebp
pop ebp
ret
しかし、どのようにしたら
scanf
. どなたか、できるだけ簡単なソースコードで
scanf
? 私は本当にユーザーが入力したものを置きたいだけです。
32bitのAssemblyに慣れていない。16bitしか使ったことがないのですが、16bit(DOS)ではこうすればいいんですね。
mov ah, 3fh
mov dx, input
int 21h
input rb 100d
そして、あなたが入力したものはすべて、"input."のアドレスに置かれます。
解決方法は?
私はこれを見つけた 'NASM.PDFでプログラミング'
; add1.asm
SECTION .data
message1: db "Enter the first number: ", 0
message2: db "Enter the second number: ", 0
formatin: db "%d", 0
formatout: db "%d", 10, 0 ; newline, nul terminator
integer1: times 4 db 0 ; 32-bits integer = 4 bytes
integer2: times 4 db 0 ;
SECTION .text
global _main
extern _scanf
extern _printf
_main:
push ebx ; save registers
push ecx
push message1
call printf
add esp, 4 ; remove parameters
push integer1 ; address of integer1 (second parameter)
push formatin ; arguments are right to left (first parameter)
call scanf
add esp, 8 ; remove parameters
push message2
call printf
add esp, 4 ; remove parameters
push integer2 ; address of integer2
push formatin ; arguments are right to left
call scanf
add esp, 8 ; remove parameters
mov ebx, dword [integer1]
mov ecx, dword [integer2]
add ebx, ecx ; add the values ; the addition
push ebx
push formatout
call printf ; call printf to display the sum
add esp, 8 ; remove parameters
pop ecx
pop ebx ; restore registers in reverse order
mov eax, 0 ; no error
ret
これはこのC関数のasm版です。
#include <stdio.h>
int main(int argc, char *argv[])
{
int integer1, integer2;
printf("Enter the first number: ");
scanf("%d", &integer1);
printf("Enter the second number: ");
scanf("%d", &integer2);
printf("%d\n", integer1+integer2);
return 0;
}
関連
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] MIPSのコードのこの部分で、oriはどのように使われているのですか?
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] アセンブリのNEG
-
[解決済み] アセンブリ言語 新規ライン
-
[解決済み] ベースレジスタを持たないqword ptr [hexvalue]の意味するところ
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] ワードptrとは何ですか?
-
[解決済み] CS:IPの組み立ての意味と仕組みについて教えてください。
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン