質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Q&A

解決済

2回答

864閲覧

[Windows 10] gcc で常に42が返されるプログラムをアセンブルしたい

skytomo

総合スコア35

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

0グッド

0クリップ

投稿2020/06/06 00:56

編集2020/06/06 08:20

前提・実現したいこと

gcc -o tmp tmp.sを実行して、
42を返すアセンブリのプログラムをexeファイルに変換したい

低レイヤを知りたい人のためのCコンパイラ作成入門のコンパイラ本体の作成の部分にて、Rubyでアセンブリを出力しました。

発生している問題・エラーメッセージ

アセンブルしようとすると、以下のエラーが表示されます。

tmp.s: Assembler messages: tmp.s:4: Error: ambiguous operand size for `mov'

該当のソースコード

s

1.intel_syntax noprefix 2.globl main 3main: 4 mov rax, 42 5 ret

試したこと

wsl (Ubuntu) で cc -o tmp tmp.sgcc -o tmp tmp.sを実行した場合はエラーは吐きませんでした。

なお、Windowsにはccコマンドはありません。
WindowsとUbuntuで何か違うのかもしれませんが、よく分かりません。

補足情報(FW/ツールのバージョンなど)

OS: Windows 10
gcc version 8.2.0 (MinGW.org GCC-8.2.0-5)

(なおUbuntuの方では)
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

手元のWindows 10 64bitにて、MSYS2環境のmingw-w64-x86_64-gcc 10.1.0-2でアセンブルおよび実行出来ました。MinGWではなくMSYS2環境のMingw-w64を試して見てください。(MSYS2のインストーラーは先程のリンク先にあります。)

なお、GCCだけ入れてもうまくいかない(アセンブルするのに必要なファイルが入らない)場合があるので、mingw-w64-x86_64-toolchainでGCCを含む開発環境一式を入れてみてください。

環境GCCアーキテクチャ
MSYSMinGWx86
MSYS2Mingw-w64x86, x86_64

※二つは異なるプロジェクトで別のソフトウェアです。MSYSをバージョンアップするとMSYS2になるというのではありません。

※MinGWは64bit(x86_64)未対応で、開発が停滞していることもあり、新たにGCC環境を使用したい場合はお勧めしません。

投稿2020/06/06 01:54

編集2020/06/06 01:59
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skytomo

2020/06/06 08:16

MSYS2環境のMingw-w64を試してみたところ、うまくいきました。 ありがとうございます。
guest

0

WindowsでCをコンパイルしたいのなら、MinGWをインストールするのが一般的です。

Windows 開発環境 (MinGW)などの記事を参考にすると良いと思います。

投稿2020/06/06 01:09

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skytomo

2020/06/06 01:17

はい、MinGWを使って環境構築をしています。 WindowsでC言語をコンパイルすることはできます。 私はWindowsでアセンブリを`gcc`コマンドを使用してアセンブルしたいのです。
coco_bauer

2020/06/06 02:15

質問に書かれているエラーは、gccでアセンブルしようとした際に出されたものです。 うまくいかなかったのは、ソースコードの" mov rax, 42"が、gccの想定しているアセンブリ言語の仕様に合わなかったからだと思われます。 アセンブリ言語は、Intel記法のものと、AT&T記法のものがあるなど、バリエーション(変種)があります。
coco_bauer

2020/06/06 02:18

raccyさんの回答にあるように、お使いのWindowsが32bitなのか64bitなのかが関係しているかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問