[NASM x64 Windows] scanf_s(またはscanf)で全角文字を入力したとき、のちのprintfで表示されない

実現したいこと

質問を投稿するのが初めてなので、ご指摘等あればお願いします。

アセンブリ言語初学者です。
printf、scanfを使ったコードを書いてみたく、チュートリアルサイトとc++コードの逆アセンブリ結果を参考にしました。

期待する結果は以下の通りです。

何か入力してね~。: abc123 abc123 だね~。
何か入力してね~。: あいうえお あいうえお だね~。

発生している問題・分からないこと

半角だと動作するのですが、

何か入力してね~。: abc123 abc123 だね~。

全角だと出力されません。

何か入力してね~。: abc123 だね~。

あるいは文字化けします。

何か入力してね~。: あいうえお だね~。

該当のソースコード

nasm

1bits 642default rel 3 4segment .data 5 msg db "何か入力してね~。: ", 06 fmt db "%s", 07 otp db "%s だね~。", 0xd, 0xa, 08 9segment .bss 10 arg resb 25611 12segment .text 13global main14extern ExitProcess15extern _CRT_INIT16 17extern printf18extern scanf_s19 20main:21 push rbp22 mov rbp, rsp23 sub rsp, 3224 25 call _CRT_INIT 26 27 lea rcx, [msg]28 call printf 29 30 mov r8d, 100h31 lea rdx, [arg]32 lea rcx, [fmt]33 call scanf_s 34 35 lea rdx, [arg]36 lea rcx, [otp]37 call printf 38 39 xor rax, rax40 call ExitProcess

c++(逆アセンブリ)

1#include <stdio.h>2 3int main()4{500007FF6420410E0 sub rsp,138h 600007FF6420410E7 mov rax,qword ptr [__security_cookie (07FF642043000h)] 700007FF6420410EE xor rax,rsp 800007FF6420410F1 mov qword ptr [rsp+120h],rax 9 printf("何か入力してね~。: ");1000007FF6420410F9 lea rcx,[string "\x89\xbd\x82\xa9\x93\xfc\x97\xcd\x82\xb5\x82\xc4\x82\xcb\x81`\x81B: " (07FF642042260h)] 1100007FF642041100 call printf (07FF642041020h) 12 13 char arg[256];14 scanf_s("%s", arg, 256);1500007FF642041105 mov r8d,100h 1600007FF64204110B lea rdx,[arg] 1700007FF642041110 lea rcx,[string "%s" (07FF642042278h)] 1800007FF642041117 call scanf_s (07FF642041080h) 19 printf("%s だね~。", arg);2000007FF64204111C lea rdx,[arg] 2100007FF642041121 lea rcx,[string "%s \x82\xbe\x82\xcb\x81`\x81B" (07FF642042280h)] 2200007FF642041128 call printf (07FF642041020h) 23 24 return 0;2500007FF64204112D xor eax,eax 26}2700007FF64204112F mov rcx,qword ptr [rsp+120h] 2800007FF642041137 xor rcx,rsp 2900007FF64204113A call __security_check_cookie (07FF642041160h) 3000007FF64204113F add rsp,138h 3100007FF642041146 ret

試したこと・調べたこと

上記の詳細・結果

コードの基本的な記述はUnderstanding Windows x64 Assemblyを参考にしました。

「nasm x64 windows」「nasm multibyte scanf」「nasm multibyte printf」「nasm 日本語」「nasm 日本語 scanf」「nasm 日本語 printf」でGoogle検索しましたが、当てはまりそうな検索結果は見つかりませんでした。

おそらく、かなり基本的なことでつまづいているのだと思います。
お教えいただければ幸いです。

補足

特になし

コメントを投稿

0 コメント