web-dev-qa-db-ja.com

RESB、RESW、RESD、RESQはNASMでどのくらいのバイトを割り当てますか?

DBは1バイトを割り当てます。

DWは2バイトを割り当てます。

DDは4バイトを割り当てます。

DQは8バイトを割り当てます。

だから私はそれを仮定する:

RESB 1は1バイトを割り当てます。

RESW 1は2バイトを割り当てます。

RESD 1は4バイトを割り当てます。

RESQ 1は8バイトを割り当てます。

私は正しいですか?


documentation はあまり言いません:

3.2.2 RESBとフレンド:初期化されていないデータの宣言

RESB、RESW、RESD、RESQ、REST、RESO、RESY、およびRESZは、モジュールのBSSセクションで使用するように設計されています。これらは、初期化されていないストレージスペースを宣言します。それぞれが単一のオペランドを取ります。オペランドは、バイト数、ワード数、ダブルワード数、または予約するものです。セクション2.2.7で述べたように、NASMはDW?または同様のもの:これは代わりに行うことです。 RESBタイプの疑似命令のオペランドは重要な式です。セクション3.8を参照してください。

例えば:

バッファー:resb 64; 64バイトを予約する

wordvar:resw 1;言葉を予約する

realarray resq 10; 10個の実数の配列

ymmval:resy 1; 1つのYMMレジスタ

zmmvals:resz 32; 32個のZMMレジスタ

7
user8240761

私は正しいですか?

はい。

d*およびres*の場合、サイズサフィックスはNASM全体で一貫しています。これらは、byte to qwordのx86命令ニーモニックサフィックスに一致します。 (例:psubdはパックされたdword要素で動作します)。

o(oct-Word)を使用する命令ニーモニックさえあります: cqo

aVX512マスキング粒度により、命令ニーモニックが VBROADCASTI32X8 のようなものになったとしても、yおよびzサイズのサフィックスは明らかにymmおよびzmmレジスタサイズと一致します。

5
Peter Cordes