学校でアセンブラの授業を取る予定なのですが、どなたかアセンブラの参考書(日本語)でお勧めの本を教えてもらえないでしょうか?また、アセンブラについてのお勧めのウェブサイトがありましたら教えてください!

プログラムはJavaを約1年学校で勉強した程度で、C言語の知識は全くありません。アセンブラも初めてなので、出来れば図などがあり初心者にも分かりやすく、ページ数も多いものを探しています。

ちなみに学校で使う予定の本は「Computer Organization and Design(Morgan K 3rd Edition)」で、内容は
1 Computer Abstractions and Technology
2 Instructions: Language of the Computer
3 Arithmetic for Computers
4 Assessing and Understanding Performance
5 The Processor: Datapath and Control
6 Enhancing Performance with Pipelining
7 Large and Fast: Exploiting Memory Hierarchy
8 Storage, Networks, and Other Peripherals
On the CD:
9 Multiprocessorsです。
留学中ですので、この本と同時に日本語の参考書を使おうと思っています。内容はこの本の内容とかぶっているほどいいのですが(^^;)。

長くなってしまいましたが宜しくお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (3件)

かぶっているほどいいのであれば、その本の邦訳「コンピュータの構成と設計―ハードウエアとソフトウエアのインタフェース〈上〉」「同〈下〉」がいいかもしれませんね(笑)


オリジナルは読んでいませんが、邦訳は第2版なので、若干違うかもしれません。

MIPS以外を勉強する場合でも、これは読んでおきたいと思わせる本です。
    • good
    • 0
この回答へのお礼

すばらしいです!!訳書があったんですね。
アマゾンで見てみたのですが、購入者の書評もかなり高いようなので、早く中身を読んでみたいです^^。本当は原書を読まないといけないとはわかってるんですが、課題と試験の多さで時間がないうえに、何度も読み直さないと理解出来ないので、その点日本語だと速読も可能かも!?と期待してみたり。。
本当にありがとうございました。

お礼日時:2005/04/21 06:57

アセンブラーと言うのは機種依存で、世の中には嫌になるほど沢山の種類があります。


ですから、機種をはっきりさせないとアドバイス不可能です。

ご提示の本では第2章でチョコッと出てくるだけの感じのようですが。
    • good
    • 0
この回答へのお礼

機種…ですね(涙)。今見てみたところ、MIPSアセンブラとという事しか載ってなかったのですが、関係ありますか??授業開始前に関係書を早めに入手して予習しようと思ってたのですが、始まってから再度詳しく質問した方がいいかもしれませんね。教えて頂いてありがとうございます。

お礼日時:2005/04/19 17:17

アセンブラなら以下の2冊でどうでしょうか。



・はじめて読む8086
・はじめて読む486

記載されている洋書の内容はまったくわかりませんが・・・

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4871482 …
    • good
    • 0
この回答へのお礼

ありがとうございます!
早速見てみようと思います。

お礼日時:2005/04/19 17:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCASL アセンブラ命令 アプリ機能

例えば、CASLのアセンブラ命令にDCがある。
LABER DC 100 とすると。
これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。

CASLには機械語命令・マクロ命令・アセンブラ命令がある。

機械語命令は人に分かりやすいようにニーモニックが付けられているだけだが、
アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。

アセンブリ言語は色々ありますが、アセンブラ言語は人に見やすいようにニーモニックが付けられているだけでなく、CASLのDC命令のように、ハンドアセンブリではできないアドレスの自動変更のようなアプリケーションとしての機能(OS的機能)も一般にふくまれているとかんがえてよいのでしょうか?

よろしく願います。

Aベストアンサー

No1です。

>プログラムの変更==>DCでアドレスの自動変更

DC命令に限らず、命令につけられたアドレスが何番地であるかを計算(カウントアップ)するのは、アセンブラの基本機能です。これがないと、生成した機械語命令を何番地に格納したらいいのかわからない。

>という、アセンブラ言語が単にニーモニックの記述だけでない、アプリとしての機能(OS的機能)が含まれているかという質問です。

アセンブラはアプリなので、ニーモニックを解釈したり、上記のアドレスの計算をしたりするのは、アセンブラというアプリの機能です。OSは関係ありません。OSの上でアセンブラというアプリが動いているだけ。

>LABER DC 100 とすると。
>これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。

もしかして勘違いがあるかもしれませんが、
LABER DC 100
というのは、
「LABERという名前のラベルを現在の命令格納アドレスポインタの値で定義して、そのアドレスの1ワードに100を入れて、命令格納アドレスポインタを+1する」
で、
LABEL NOP
という機械語命令は、
「LABELという名前のラベルを現在の命令格納アドレスポインタの値で定義して、そのアドレスの2ワードにNOPの命令コードを入れて、命令格納アドレスポインタを+2する」

と、いうことで、DC命令と機械語命令はアセンブラの動作(ソースファイルをアセンブルして命令コードファイルを作る際の動作)としては格納するデータがちょっと違うだけです。DS命令も、データの長さが1とか2でなく可変であることと、データに何が入るか分からないというくらいの違いだけです。

No1です。

>プログラムの変更==>DCでアドレスの自動変更

DC命令に限らず、命令につけられたアドレスが何番地であるかを計算(カウントアップ)するのは、アセンブラの基本機能です。これがないと、生成した機械語命令を何番地に格納したらいいのかわからない。

>という、アセンブラ言語が単にニーモニックの記述だけでない、アプリとしての機能(OS的機能)が含まれているかという質問です。

アセンブラはアプリなので、ニーモニックを解釈したり、上記のアドレスの計算をしたりするのは、アセンブラとい...続きを読む

Q86系 64ビットのアセンブラの日本語の本はありませんか?

Opteronまたはathlon 64をアセンブラで使いたいのですが、アセンブラの命令の日本語の解説書はないでしょうか? あるいは参考になるwebのページでもけっこうです。

Aベストアンサー

ANo.1です。
参考URLをちゃんと参照しましたか。
「インテル? エクステンデッド・メモリー 64 テクノロジー・ソフトウェア・デベロッパーズ・ガイド」なんかは64ビット拡張を扱っていますけど。

Qアセンブラの擬似命令について

kigin と申します。
アセンブラの擬似命令に「align」というものがありますがこれは一体どういう意味なのでしょうか?
また、アセンブラの擬似命令やアセンブラプログラミングに関して詳しいガイダンス的な紹介がなされているホームページ等がありましたら、教えていただきたいのですが。
よろしくお願いいたします。

Aベストアンサー

CPUによっては2バイト分を読み書きしたりする(ワードアクセス)のときは
アドレスは偶数アドレスでなければならないとかあるCPUがあってそのときに
align 2としてもしそのデータがそのまま奇数アドレスにおくこと
になりそうなときにちゃんとダミーデータをおいて偶数アドレスから
はじめてくれるものです。

良く使うのはIntel系CPUは2バイト境界がいいとか4バイト境界が早いとかで
やります

Q論理ANDとビットAND

MSDNを見ていたら
「Visual Basic 6.0 では、And キーワードは、オペランドの型に応じて論理 AND かビット AND を実行していました 。Visual Basic .NET では、AND は論理 AND しか実行しません。」
と書いてあったのですが両者の違いがわかりません。
また、.NETでビットANDが使えなくなって困ることはないのでしょうか?

Aベストアンサー

 
> 両者の違いがわかりません。

論理値には通常、真/偽の2値しか存在しません。(PL/SQLにはTRUE/FALSE/NULLの
3値があるが、これは例外的)
数値を論理値に変換すると非ゼロはすべてTrueとなります。

ビット演算については、情報処理資格試験やC言語、TCP/IPの入門書などに解説があります。
簡単な例を示すと、

11 And 17 And 23 → 1

2進数表現では

11 → 01011
17 → 10001
23 → 10111

となり、ビット毎の積は00001となります。
ビット和も同様で、

13 Or 19 Or 23 → 31

13 → 01101
19 → 10011
23 → 10111

13 Or 19 Or 23 → 11111となります。

> Visual Basic .NET では、AND は論理 AND しか実行しません。
> (中略)
> また、.NETでビットANDが使えなくなって困ることはないのでしょうか?

β版段階で仕様変更の話もありましたが、現在のところ、元の仕様(VB6.0と同等)に
戻っています。
VB.NETでは短絡評価用にAndAlso / OrElse 演算子が追加されましたが、And / Or
演算子は短絡評価しないので、注意が必要です。
(他の高級言語では、一般に論理演算は短絡評価)

他言語ですが、類似の質問がありましたので、こちら↓も参考にしてみてください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=489427

 
> 両者の違いがわかりません。

論理値には通常、真/偽の2値しか存在しません。(PL/SQLにはTRUE/FALSE/NULLの
3値があるが、これは例外的)
数値を論理値に変換すると非ゼロはすべてTrueとなります。

ビット演算については、情報処理資格試験やC言語、TCP/IPの入門書などに解説があります。
簡単な例を示すと、

11 And 17 And 23 → 1

2進数表現では

11 → 01011
17 → 10001
23 → 10111

となり、ビット毎の積は00001となります。
ビット和も同様で、

13 Or 19 Or 23 → 31

13 → 011...続きを読む

Q[GNUインラインアセンブラ] SIMD命令

下記のようなGNUインラインアセンブラを含むプログラムをMac Book Airにてgccでコンパイルして実行するとPSUBSW命令は、mm0 - mm1の結果がmm0に入りますが、IntelのDevelopper's manualのPSUBSW命令の説明においては、mm1-mm0の結果がmm1に入るとなっています。

これは、なぜなのでしょうか。

---- Begin source code -----
1 #include <stdio.h>

2

3 int

4 main()

5 {

6 short int a[4] = {1111,1112,1113,1114};

7 short int b[4] = {1111,2112,3113,4114};

8 short int c[4];

9

10 asm volatile (

11 "movq (%1),%%mm0\n\t"

12 "movq (%2),%%mm1\n\t"

13 "psubsw %%mm1,%%mm0\n\t"

14 "movq %%mm0,%0\n\t"

15 "emms"

16 : "=g"(c): "r"(&a),"r"(&b));

17

18 printf("%d %d %d %d\n", c[0], c[1], c[2], c[3]);

19

20 return 0;

21 }
---- End source code -----

Intel developper's manual (http://www.intel.co.jp/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf)

PSUBSW mm, mm/m64
Subtract signed packed words in mm/m64 from signed packed words in mm and saturate results.

下記のようなGNUインラインアセンブラを含むプログラムをMac Book Airにてgccでコンパイルして実行するとPSUBSW命令は、mm0 - mm1の結果がmm0に入りますが、IntelのDevelopper's manualのPSUBSW命令の説明においては、mm1-mm0の結果がmm1に入るとなっています。

これは、なぜなのでしょうか。

---- Begin source code -----
1 #include <stdio.h>

2

3 int

4 main()

5 {

6 short int a[4] = {1111,1112,1113,1114};

7 short int b[4] = {1111,2112,3113,4114};

8 short int c[4];

...続きを読む

Aベストアンサー

詳しくないのですが、アセンブラの書式にはAT&T式とIntel式があり、オペランドのソースとデスティネーションが逆のようです。

QCOMETII上で動作するアセンブラ言語によるプログラム

このまえ投稿したのですがやり方が悪く削除されてしまいました。

答えてくださった方々、申し訳ありません。

学校で下に示すプログラムを1行づつ解析し行っている処理を見出せというものでした。

EX307 START
LD GR0,A
LEA GR1,0
LOOP SUB GR0,B
JMI ENDDV
LEA GR1,1,GRI
JMP LOOP
ENDDV ADD GR0,B
ST GR1,ANS
ST GR0,B
EXIT
A DC 50
B DC 8
ANS DC 1
REM DC 1
END

2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。

よろしくお願いします。

Aベストアンサー

この前回答したzwiです。
どんな答えをしたか忘れたのですが、もう一度書いてみます。
COMETIIは詳しくありませんが、アセンブラなら色んなCPUを渡り歩いているので大体わかります。

>2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。
LEAやSUBはCOMET(CASL)の古い命令みたいですね。いくつか間違いがあります。
LEA→LAD 実行アドレスをロードする(あるいは値をロードする)
SUB→SUBA 符号付引き算をする命令。
ADD→ADDA 符号付足し算をする命令。
EXIT→RET 呼び出しもとに帰ります。メインなら終了です。
と読み替えてください。
COMETとCOMETIIの対応表です。googleのキャッシュです。
http://72.14.235.104/search?q=cache:0sgq6upY1kAJ:www.ced.is.utsunomiya-u.ac.jp/lecture/2006/jikken1/casl/spec.htm+%EF%BC%A3%EF%BC%A1%EF%BC%B3%EF%BC%ACII%E3%80%80SUB&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja

EX307は単なるラベルで,START擬似命令でここからプログラムを開始しますよ~って意味です。
http://www.officedaytime.com/dcasl2/pguide/chapter1f.html

[参考サイト]
もう一度入門サイトを紹介しておきます。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267378/?ST=techskill
シミュレータで動かして実際に確認してみてください。
http://www.vector.co.jp/soft/win95/prog/se184950.html

この前回答したzwiです。
どんな答えをしたか忘れたのですが、もう一度書いてみます。
COMETIIは詳しくありませんが、アセンブラなら色んなCPUを渡り歩いているので大体わかります。

>2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。
LEAやSUBはCOMET(CASL)の古い命令みたいですね。いくつか間違いがあります。
LEA→LAD 実行アドレスをロードする(あるいは値をロードする)
SUB→SUBA 符号付引き算をする命令。
...続きを読む

Q8086アセンブラで、メモリ間のデータをストリング命令でブロック転送したい

ソースが長めなので、簡潔に書きます。ご無礼の段、ご容赦ください。
【目的】PC-9801本体のCバス(汎用拡張スロット)に挿したサウンドボード上の
ROM BIOSを読み出し、バイナリファイルに落としたい。既にエミュレータ用に実機からの
吸出しツールは存在するが、ソースが無いので、自作することにした。
その前段階としてアセンブラの修行も兼ねて、ROM BIOSの先頭3ワード(6バイト)を
メモリ上のバッファにコピーし、比較して値の合致を確認したい。
将来的にはSCSI ROM BIOSの解析等を試みたい。

【方針】8086のストリング命令でダイレクトにメモリtoメモリでブロック転送を
する。具体的にはrep movsbを用い、6バイトを転送する。

【備考】PC-9801-26K互換音源のROM BIOS(少なくとも先頭8バイト)は一意であり、
その並びは、0001h, 0000h, 00d2h である。例外はありません。
86音源でも同様で、下位互換性があることは、拙作ツール(OPNCHK.COM)にて確認済み。
なお、上記バイト列は、セグメントCC000h:オフセット2E00hから読み出し
可能である。
なお実行にあたり、所謂メモリマネージャの類(MELEMM.386等)は一切
組み込まない状態で行なう(EMSメモリマネージャ等との同居対応は将来の課題とします)。

【開発環境】PC-9801DA2(Cyrix Cx486DLC-25MHzに載せ換え; 13.6MB RAM; HA-55BS4 SCSIボード
+ 240MB SCSI HDD + SONY CPD-17SF9 CRT
+ NASM 2.06rc10 on NEC DOS 5.0A-H + Turbo Debugger v3.2 と、
秋葉で買ったジャンクFDに入ってたMASM ver 3.00;
予備機 VX41/RS21/EPSON 286VF/EPSON 486HX2/Xv13R16[K6-2 400MHz]/
AT互換機上のNekoIIエミュ/Cygwin上のnasmw.exe)

【参考書】PC-98、8086アセンブラ、テクニカルデータ、古雑誌等 定番本100冊ほど

【拙作コードの失敗点をご指南いただきたい。NASMコードですが、MASM/TASMでも構いません】
; PC-9801-26K compatible Sound ROM BIOS Copy Program (i/o address 0188h)
; Programmed by OrzHacker666
; Date 2009-07-13 for NASM 2.06rc10

[Bits 16]
org 100h ; COM program
section .text
start:
push es ; これを保存しないと、
push ds ; 画面がめちゃくちゃになる

mov ax, 0cc00h ; Sound ROM セグメントアドレス
mov es, ax
mov ds, ax ; DS:SI -> ES:DI 無意味か?
mov bx, 2e00h ; Sound ROM オフセットアドレス

lea si, [es:bx] ; ES:BX がSound ROMの開始点
lea di, [ds:sbuff] ; sbuffは仮に確保したバッファ。
; どこにあるかは、当たり前ですが、不明。そこら辺はCの変数宣言と同じですが。

mov cx, 8 ; とりあえず、アタマ8バイトをコピー
cld
rep movsb

CompareWithOriginal:
cmp word [es:bx+4], 00d2h ; これは通る。当たり前。
jne FailedCpyRom
cmp word [ds:sbuff+4], 00d2h ; ここで失敗判定。なぜ?
jne FailedCpyRom
; sbuffにes:bx~が正しく
; 転送されていないのか?
SuccessCpyRom: ; これを拝めれば…。
pop ds
pop es
mov ah, 9
lea dx, [SUCCESSMsg]
int 21h
mov ax, 4c00h
int 21h

FailedCpyRom: ; 見飽きましたOrz
pop ds
pop es
mov ah, 9
lea dx, [FAILEDMsg]
int 21h
mov ax, 4c00h
int 21h

section .data
SUCCESSMsg:
db 'Succeeded !!', 0dh, 0ah, '$'
FAILEDMsg:
db 'Failed(--;)', 0dh, 0ah, '$'

section .bss
sbuff:
resb 8 ; Cで書くと、差し詰め unsigned char sbuff[8]; であろうか…。

識者の方、よろしくお願いいたします。気になって夜も眠れません。

ソースが長めなので、簡潔に書きます。ご無礼の段、ご容赦ください。
【目的】PC-9801本体のCバス(汎用拡張スロット)に挿したサウンドボード上の
ROM BIOSを読み出し、バイナリファイルに落としたい。既にエミュレータ用に実機からの
吸出しツールは存在するが、ソースが無いので、自作することにした。
その前段階としてアセンブラの修行も兼ねて、ROM BIOSの先頭3ワード(6バイト)を
メモリ上のバッファにコピーし、比較して値の合致を確認したい。
将来的にはSCSI ROM BIOSの解析等を試みたい。

【方針...続きを読む

Aベストアンサー

>回答中の、"cmp word es:[di-4], 00D2h"は
MOVSD×2でDIはsbuff+8を指しています。DI-4はsbuff+4のことです。
これくらいはアセンブラをやる以上、直ぐに分かってください。

>sbuff自体については、セグメント値は不定で、調べる意義は無い
ちょっと乱暴な話ですね。sbuffはbss(初期値なし静的領域)のよう
なので、実行時のDSです。

確実なのはtextセグメント(コードと同じ)に次のようにデータを
定義して使います。
LES  DI,CS:adr 'ES:DIにsbuffのセグメント:オフセットが入る
== 中略 ==
adr  DD sbuff 'sbuffのセグメント:オフセットが記録される

>DS=ESではダメです
だって、そうなっていますよ。AXをDSにもESにもMOVしてます。
前にも書いたんですが、セグメントの使い方が分かっていない?

前のサンプルは上記仮定(sbuffは実行時DSにある)で作っています。
PUSH DS、POP ES ES←DSにしています。(受け取り側が実行時DS)
この後で、DSに0CC00hを代入しています。

>[es:]のオーバーライドは必須です
CMP   WORD ES:[DI-4],00D2h
ちゃんと、ESでオーバライドしてるはずですけどね。

>ジレンマに陥ります
どこがでしょう?アセンブラで、セグメントレジスタを使う以上は
自分の自由に使えば良い訳で、適当に値を設定したり、戻したりすれば
済む話なのでは?
例:
REP  MOVSB
PUSH  DS
PUSH  ES
POP   DS
POP   ES
後の4命令で、DSは実行時DSに戻り、ESはROMセグメントを指します。
サンプルではこれをやっていないので、実行時DSはESにある状態です。
故にセグメントオーバーライドしています。

>回答中の、"cmp word es:[di-4], 00D2h"は
MOVSD×2でDIはsbuff+8を指しています。DI-4はsbuff+4のことです。
これくらいはアセンブラをやる以上、直ぐに分かってください。

>sbuff自体については、セグメント値は不定で、調べる意義は無い
ちょっと乱暴な話ですね。sbuffはbss(初期値なし静的領域)のよう
なので、実行時のDSです。

確実なのはtextセグメント(コードと同じ)に次のようにデータを
定義して使います。
LES  DI,CS:adr 'ES:DIにsbuffのセグメント:オフセットが入る
== 中略 ==
...続きを読む

Qアセンブラを勉強したいのですが・・

文系出身のかけだしプログラマです。将来の事を考えて、今のうちにアセンブラの独習しておこうと思うのですが、何にどう手を付けていけばいいのか、よく分かりません。書店を巡ってみても入門書のようなものは見つけられず、ようやくこのあいだ、知人からアセンブラに関する本をお借りすることができました。アセンブラの効率的な勉強法がありましたら、何でもいいのでご教授ください。よろしくお願いいたします。

Aベストアンサー

 なかなか、アセンブラを勉強する環境を作るのは難しいのですが。
まず、実際のCPUを考えた場合のアセンブラ
8086系
http://www.d1.dion.ne.jp/~ecb/assembler/assembler00.html
Z80系
http://www.nsknet.or.jp/~kamichan/prog/z80asm.html
情報処理用の仮想CPU用(CASL)
http://www.scc-kk.co.jp/lib_scc/catalog/edcbooks/catalogue/curriculum/6074/6074.html
http://lss.eternity.ne.jp/cgi-bin/link/lss_frame.cgi?class.cgi?593
 等が有ります。
その他、Google等で検索してみれば、山ほどの情報を得る事が出来ます。

Q自分でアセンブラ言語を作れる?

自分でアセンブラ言語を作れる?
あるCPUにmov命令というのがありますが命令名をソフトウェアレベルで変えることは
出来るのでしょうか?
(mov ax,1をmove ax,1にしたり)
アセンブラはCPUが同じならどれも同じだと思っていたのですが
プログラムを終了する時、windowsはint 21hなのにlinuxはint 0x80なので
疑問に思いました。

Aベストアンサー

> windowsはint 21hなのにlinuxはint 0x80なので
これはアセンブリ言語の問題ではなくAPIの問題です。
intはソフトウエア割り込み命令でBIOSやAPIを呼び出すのに使います。
同じような機能でもWindowsやLinuxなどのOSが違えば呼び出しアドレスが違うのは当然です。

> アセンブラはCPUが同じならどれも同じだと思っていたのですが
アセンブリ言語のニーモニクはCPUメーカーが同じなら同じです。
が、CPU毎に同じなのはマシン語であってアセンブリ言語のニーモニクではありません。
例えばインテル8080とザイログZ80はマシン語レベルで高い互換性がありますがアセンブリ言語のニーモニクは大きく異なります。
最終的にマシン語コードが出来上がればニーモニクはmov ax,1でもmove ax,1でもax=1でも関係ありません。

Qアセンブラでコマンドライン引数を取得する方法

50歳からアセンブラプログラムを趣味で勉強しております。
一つ壁に当たりました。
コマンドライン引数が何処にあるのかわかりません。

Windows7で
nasm -fwin32 test.asm
alink -oPE -subsys console test.obj crtdll.lib -entry start
アセンブル、リンクしています。

test.asm

extern printf
section .text
global _start
_start: push ebp
mov ebp,esp
mov eax,[ebp+8]
push eax
mov eax,A101
push eax
call printf
add esp,8
pop ebp
ret

section .data
A101: db 'argc = %d', 10, 0

で、argc = 2147340288 と表示されます。

どうぞよろしくお願いいたします。

50歳からアセンブラプログラムを趣味で勉強しております。
一つ壁に当たりました。
コマンドライン引数が何処にあるのかわかりません。

Windows7で
nasm -fwin32 test.asm
alink -oPE -subsys console test.obj crtdll.lib -entry start
アセンブル、リンクしています。

test.asm

extern printf
section .text
global _start
_start: push ebp
mov ebp,esp
mov ...続きを読む

Aベストアンサー

Win32 API は詳しくないのですが、CRTスタートアップルーチン使わないのであれば、GetCommandLine() を自分でコールする必要があるんじゃないかと。


人気Q&Aランキング

おすすめ情報