- ベストアンサー
機械語に直すことについて。
imm32を0x00000004にしてるものもあれば、 0x4にするものもあります。 しかし、値としては同じ物なんです。 なぜなら、オペが32ビットだと指定したからです。 以下のURL: https://sp.okwave.jp/qa/q9895187.html とは、4の前の0を省略する書き方もあるという事でしょうか?オペが32ビットだと指定したからです。とはどういう事でしょうか?教えていただけないでしょうか?すみません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>4の前の0を省略する書き方もあるという事でしょうか?これについても教えていただけないでしょうか?すみません。 あるもなにも・・・ あなたが書いてるソースがすでに、省略されてると思いますが。 なので、ご自身で省略して書いているのですから、 答えは「ある」 省略できるかどうかは、 何度も言う通り、オペが32ビットなので、 書いても書かなくても、4バイトに拡張されるから。 が理由。 もし、代入命令が、eaxではなく、axなら、 0x4は0x0004に拡張される。なぜなら、16ビットだから。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>オペが32ビットだと指定したからです。とはどういう事でしょうか? https://okwave.jp/qa/q9894729.html 自分で、eaxってかいてるわけですが。 eaxは32ビットですよ。 axなら、16ビット(x86) ah,alはaxを上位下位に分解した8ビット(x86) b8 57 61 6b 61 mov $0x616b6157,%eax なので、B8が、32ビットのMOV命令だと、わかるかと。 それに続く4バイトが、そのままMOVにリトルで 入ってるでしょ? B8が何なのかも、この時の板で説明済みで B8+32ビットレジスタ番号がオペコード 続く4バイトがパラメーターです。 ひとまず、以前も紹介してますが。 https://www.intel.co.jp/content/dam/www/public/ijkk/jp/ja/documents/developer/IA32_Arh_Dev_Man_Vol2A_i.pdf こちらに、全仕様は書かれてます。 なんか、以前いたTさんとかぶる所があるけど、 いろんな人がいるので、暇つぶしにはいいので、 また、何か投稿を!
補足
4の前の0を省略する書き方もあるという事でしょうか?これについても教えていただけないでしょうか?すみません。