北上川の河川整備は戦後、流域を襲ったカスリーン台風・アイオン台風の後に本格的に行われた。建設省・岩手県・宮城県により北上川の本・支流に多目的ダムを建設し洪水調節を図ろうとした。その代表的なものが北上川5大ダムである。宮城県では江合川・迫川を中心に総合開発が実施された。一方、北上川流域の農業において最大の問題が灌漑用水の確保である。かつて北上川は強酸性の水質であったことから支流に頼らざるを得ない状況だったが、農地面積に対する流域面積の不釣合いや少雨が度々水不足を招き、北上川流域各地において抗争が勃発した。このような状態に終止符を打つべく、農林省は北上川水系に大小の灌漑用ダムを建設し、安定した農業用水供給を行った。この様に、北上川水系の治水・利水は国土交通省・農林水産省主体で行われた治水と灌漑が主であり、水力発電に関しては需要が少なかった事もあり、包蔵水力の割には電源開発は小規模に留まっている。
北上川水系では比較的早い段階で総合開発が進められ、北上川5大ダム建設計画も1981年（昭和56年）に御所ダムが完成し1938年の「北上川上流改修計画」によって始まった北上川5大ダム事業は43年目にして完了した。宮城県内でも江合川総合開発は完了し、県営の「第2次迫川総合開発事業」も長沼ダムを除き完成。農林水産省による「国営土地改良事業」も殆どの地域で終了し、豊沢ダムは岩手県に管理が移管されている。国土交通省東北地方整備局は石淵ダム再開発事業として胆沢ダム（胆沢川）を2013年竣工で建設した。これは貯水容量が小さい石淵ダムの直下流に高さ132.0 mのロックフィルダムを建設し、胆沢川流域の治水と利水を更に強化する事を目的としている。2013年（平成25年）の竣工で、日本のダムの歴史に1ページを築いた石淵ダムは完全に水没し、その役割を終えた。一方、1990年代に旋風を巻き起こした公共事業見直しの風潮は、北上川水系にも影響した。現在、岩手県が建設を計画している簗川ダム（簗川）については、建設を巡る賛否が議論されており、本体工事には着手されていない。又、和賀川支流の北本内川に建設が計画されていた「北本内ダム」（重力式コンクリートダム・86.0 m）が水需要の減少を理由に建設計画が中止されている。しかし、北上川水系は治水・利水を含め河川開発は極めて早期から行われており、事業はほとんどが完成又は工事に着手していた状態で、利根川水系や淀川水系などに比べればその影響は小さいものであった。
マクロの使用はアセンブリ言語に限らず（さらには、プログラミングに限らず）一般的な技法だが、アセンブリ言語でのプログラミングでは特に有用である。m4のような汎用のマクロプロセッサが使われることもあれば、アセンブラに組み込まれたマクロもある。以下ではアセンブラに組み込まれたマクロについて述べる。多くのアセンブラは事前定義されたマクロをサポートしており、中にはユーザーが定義可能なマクロをサポートしているものもある。マクロは命令列と変数や定数の定義を埋め込むことができ、その中にオペコードやディレクティブの列が含まれる。マクロが定義されると、その名前をニーモニックとして使用できる。アセンブラはソース内にマクロを発見すると、対応するコード列に置き換え、元からソースにそのコード列が存在したかのように処理をする（アセンブラによっては、マクロを展開した中にマクロがあれば、それも展開することができる）。マクロは短い名前だが、数行からかなり長い行数のコードに展開されるので、アセンブリ言語のプログラムの見た目を短くすることができる。また、マクロによってアセンブリ言語プログラムに高水準の構造を追加でき、パラメータ付きのデバッグ用コードを埋め込むなどの利用法がある。引数が使えるマクロを持つものもある。中には洗練されたマクロ言語を備えたアセンブラもあり、オプションパラメータ、記号変数、条件文、文字列操作、算術演算などの高水準言語要素を持ち、マクロ実行中にそれらを使用でき、またマクロがコンテキストをセーブしたり情報を交換したりすることも可能である。そういったアセンブラでは、マクロの引数に基づいて大量のアセンブリ言語命令またはデータ定義を生成できる。例えば、レコード風のデータ構造や展開されたループを生成するのに使え、複雑なパラメータに基づいてアルゴリズム全体を生成することもできる。そのようなマクロで大いに拡張されたアセンブリ言語を使用すると、あたかも一種の高水準言語であるかのようにプログラムを書くことができることもある。メインフレームの時代には、マクロは特定顧客の大規模ソフトウェアシステムのカスタマイズや、メーカーのオペレーティングシステムを顧客の要望に合わせた特注版にするのに使われていた。例えば、IBMの VM/CMS、リアルタイムトランザクション処理用アドオン、CICS、ACP/TPF（コンピュータ予約システム (CRS) やクレジットカード会社で使われているトランザクションOS）などで使われてきた。一方で、（やはりアセンブリ言語に限られないが）マクロには「落とし穴」も多い。最も単純なものとしては、式としての意味に従って変換されるのではなく、文字列から対応する文字列に変換されるためによるバグがある。例えば、次のようなマクロがあるとする。foo: macro aload a*bこのマクロは foo という名前で仮引数 a をとる。呼出・展開時にaに渡された実引数と、（グローバル変数または定数である）bとを掛け、loadする。しかし実引数が、a-cというような式であった場合、マクロとしては、load a-c*bと展開され、（おそらく）意図されていない結果を招く。これを防ぐにはマクロ定義内で仮引数は常に括弧で囲むようにするか、呼び出し時に実引数が問題を起こしそうな式の場合は括弧で囲むようにする。このような問題は括弧で解決するが、マクロにおいて発生する問題として、一般に容易に解決できないことが知られている「名前の捕捉」という問題がある。たとえば直前の例のマクロの場合、実引数がbという名前であったとするとload b*bとなって、実引数の自乗を計算する、という、（おそらく）前述の例よりももっと意図されていない結果を招く。このようなマクロの性質を一般にこの分野の専門用語で「不健全」と言う。詳細は「健全なマクロ」の記事を参照のこと。