アセンブリ言語最強伝説 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/01/10 17:03:37
すべてのプログラムは最終的に機械語に変換されてから実行される。
よって機械語と1対1に対応しているアセンブリ言語はどんなものでも書けることになる。
ゆえにアセンブリにできないことはない。

2:デフォルトの名無しさん
08/01/10 17:27:51
60FE

3:デフォルトの名無しさん
08/01/10 18:22:58
で?

4:デフォルトの名無しさん
08/01/10 18:26:19
今頃汎用PCの機械語がチューリング完全なことに気付くなよ

5:デフォルトの名無しさん
08/01/10 18:42:26
何をいまさら言っているんだ。

6:デフォルトの名無しさん
08/01/10 18:59:17
CPUに出来ないことはできない

7:デフォルトの名無しさん
08/01/10 19:07:51
現在は必ずしも最強ではない
JITのようにCPUに合わせた最適化が出来ない

8:デフォルトの名無しさん
08/01/10 19:12:36
>>1
       √ ̄ヽ--ヘ
      /    ☆ ヽ
      0く━=ニニ二>
     //(●)  (●) \
    / ヘ  (__人__)    |   ■■ 自宅警備員へお知らせ! ■■
   /ヽノ彡,,..  .|∪|   /
  /  丿,,  /\ヽノ/ゝ 丶    2008年1月11日午前6時(日本時間)より
 (       ̄jヽ,/_l   ヽ   「2ちゃんねる」が12時間にわたって停止
  \     ____ ̄{。 _____ }  します。自宅警備を強化し待機せよ。
   ヽ、,,_,  {---} }。 {---} j  URLリンク(www.maido3.com)

9:デフォルトの名無しさん
08/01/10 20:54:42
nihonngo

10:デフォルトの名無しさん
08/01/10 21:05:40
コンパイラぐらい書けよ

11:デフォルトの名無しさん
08/01/10 22:51:27
今日友達と雑談してたんだけど、
「俺はwikiができる前からwikiと同じものを作って使ってたんだぜ」
って言ったんだよ。
そしたらなぜか、wikipediaを作ったのか、すげーな、って言われちまったよ。
で、wikiについて説明してもwikipediaと同じだと思い込んでるらしく、
一般人ってなんで物知らずなんだろう、
と思ってしまった俺のほうがやっぱりおかしいんだろうか?

12:デフォルトの名無しさん
08/01/10 23:02:41
>>7
俺の脳の方が凄いと思うよ

よって、アセンブリ最強

13:デフォルトの名無しさん
08/01/10 23:08:44
>>7
馬鹿?
機械的な最適化が貧弱だからアセンブラで書くんだろうが。

14:デフォルトの名無しさん
08/01/10 23:09:21
>>6
CPUで腕立て伏せしてみろよ

15:デフォルトの名無しさん
08/01/11 10:08:23
IA64をハンドアセンブルしてる俺様は最凶

16:デフォルトの名無しさん
08/01/11 10:30:13
まあ、使う人間側のリソースが無限大と仮定すれば最強というか、同等だろうな。

17:デフォルトの名無しさん
08/01/11 10:48:30
最強伝説…

アセンブリ言語が死んで終わるって話だな。

18:デフォルトの名無しさん
08/01/11 17:58:32
>>!
で?

コードためしにアップしてよ

19:デフォルトの名無しさん
08/01/11 18:25:50
mov ax,1
mov ah,3

20:デフォルトの名無しさん
08/01/11 18:37:04
>>18

>>!

21:デフォルトの名無しさん
08/01/22 09:46:42
スキルによって性能がバラバラ過ぎてアセンブラなんか使えない


22:デフォルトの名無しさん
08/02/22 10:10:55
>>1見たいな事言って高級言語プログラマたちに物申したアセンブリプログラマがいたよね

23:デフォルトの名無しさん
08/02/22 10:39:04
>>7
自己最適化させればいいだけだろ

24:デフォルトの名無しさん
08/05/03 21:45:49
低級脳には低級言語がお似合いだぜ

25:デフォルトの名無しさん
08/05/06 13:18:26
どんな分野で働いてるの?

26:デフォルトの名無しさん
08/05/06 13:43:31
WEBアプリ

27:デフォルトの名無しさん
08/05/06 14:34:40
最強だが汎用性がない

28:デフォルトの名無しさん
08/05/06 14:47:53
"最強"の定義が不明瞭な件はどう説明するのか

29:デフォルトの名無しさん
08/05/06 21:55:58
なんとアセンブラを使えばJavaバイトコードも出力できます!

30:デフォルトの名無しさん
08/05/07 09:18:32
アセンブリでOSを作れるの?

31:デフォルトの名無しさん
08/05/07 10:22:48
作れます。ごく簡素なOSなら、アセンブラで書いたほうが手っ取り早いくらいです。

32:デフォルトの名無しさん
08/05/07 10:29:18
作ってみたい・・・
どうやったら作れますか?

33:デフォルトの名無しさん
08/05/07 10:38:51
>>32
適当なワンボードマイコンの開発環境一式を入手して、只管マニュアルを読む。
それに関わる情報をWebなりなんなりで入手する。
入手した情報を元に試行錯誤を繰り返す。
諦めて既存(あるいはサンプル)のOSのソースを読む。
利用できるところは利用して更に試行錯誤する。
挫けて開発環境一式を仕舞い込んでなかったことにする。

34:デフォルトの名無しさん
08/05/07 12:45:47
>>1
最後まで書ききれる根性があればの話だがな。

35:デフォルトの名無しさん
08/05/07 13:30:57
>>32
割と最近に30日でOS作るとかいう本が出てたから、ネットや書店で買ってそれをやってみればいいよ
雰囲気とかつかめると思う
実用のOSとは程遠いだろうけど
ひげぽんという人は2chで質問しながらモナOS作ったぞ

36:デフォルトの名無しさん
08/05/07 14:36:24
HOW TO 本を紹介すんのかよ・・・

37:デフォルトの名無しさん
08/05/07 21:46:45
いいんじゃね
どうせbootローダかFATあたりで飽きるだろ

38:デフォルトの名無しさん
08/05/08 23:20:18
なんでOSを作りたいかを明確にしないと挫折する気が

39:デフォルトの名無しさん
08/05/12 19:09:18
アセンブリ言語でメモリの参照をするにはどうすればいいんですか?

40:デフォルトの名無しさん
08/05/12 22:09:52
>>39
ロードする。

41:デフォルトの名無しさん
08/06/05 10:58:55
入れる、出す
押す、引っ張る
裏返す、交換する
増やす、減らす
足す、引く
ずらす、回す
削る、重ねる
比べる
飛ぶ、繰り返す
呼ぶ、戻る

なんだ覚えることはこれだけか

42:デフォルトの名無しさん
08/06/05 12:11:31
イン・アウトまで読んだ

43:デフォルトの名無しさん
08/06/05 15:18:39
覚えることはたった8つだ。

> ポインタをインクリメントする
< ポインタをデクリメントする
+ ポインタが指す値をインクリメントする
- ポインタが指す値をデクリメントする
. ポインタが指す値を出力する
, 1バイトを入力してポインタが指す値に代入する
[ ポインタが指す値が0なら、対応する ] までジャンプする
] ポインタが指す値が0でないなら、対応する [ にジャンプする


44:デフォルトの名無しさん
08/06/05 15:24:07
4つのもある

Hコマンドは文字列"Hello, world!"を出力する。
Qコマンドはプログラムのソースコードを出力する(参考:自己出力プログラム)。
9コマンドは『99 Bottles of Beer』(アメリカの数え歌で、プログラミングの例題でよく利用される)の歌詞を出力する。
+コマンドはアキュムレータをインクリメント(1だけ増やす)する。


45:デフォルトの名無しさん
08/06/29 21:37:35
EX4B START
LD GR0,=0
LD GR1,=0
LOOP1 CPA GR1,NUM
JZE FIN
ADDA GR1,=1
LD GR2,GR1
LD GR3,=0
LOOP2 ADDA GR3,GR1
SUBA GR2,=1  
JNZ LOOP2
ADDA GR0,GR3
JUMP LOOP1  
FIN ST GR0,TOTAL
RET
NUM DC n
TOTAL DS 1
END

の結果はどうなりますか??

46:デフォルトの名無しさん
08/06/29 21:45:58
EX4B START
LD GR0,=0
LD GR1,=0
LOOP1 CPA GR1,NUM
JZE FIN
ADDA GR1,=1
LD GR2,GR1
LD GR3,=0
LOOP2 ADDA GR3,GR1
SUBA GR2,=1  
JNZ LOOP2
ADDA GR0,GR3
JUMP LOOP1  
FIN ST GR0,TOTAL
RET
NUM DC n
TOTAL DS 1
END

の結果はどうなりますか??

47:デフォルトの名無しさん
08/06/29 23:21:05
GNU as が受け付けるアセンブリや gcc -S が出力するアセンブリに関する質問はどのスレでやればいいの?
アーキテクチャは x86 や x86_64 でいいんだけど…

48:デフォルトの名無しさん
08/06/30 07:41:23
取り敢えずここでどうぞ。

49:デフォルトの名無しさん
08/06/30 22:18:05
次のプログラムの空欄を埋めて、メモリに格納されたデータの最大値を求めるプログラムを完成させてください。ちなみに空欄とはうえの3つの;の所を指しています。

EX4C START
;
;
;
FIN ST GR1,MAX ;最大値をメモリに格納
RET
NUM DC 10 ;データの個数
DATA DC 60,80,70,50,90
DC 40,50,80,100,90
MAX DS 1 ;最大値格納用領域
END

50:47
08/07/01 01:33:53
gcc -S のコンパイル結果で . から始まるキーワードの意味がことごとく分からないんだけど
何の資料を漁ればいいんだろうか?

.LFE14:
.size main, .-main
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string "zR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x3
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB13
.long .LFE13-.LFB13
.uleb128 0x0


51:デフォルトの名無しさん
08/07/01 23:39:21
>>50
gccとgas

52:デフォルトの名無しさん
08/07/02 00:26:16
>>51
いあそうなんだけど
info gas とか info gcc とか見れば分かるの?

53:デフォルトの名無しさん
08/07/02 13:01:10
訊く前に見るだろ,普通

54:デフォルトの名無しさん
08/07/02 13:04:38
uleb128以外は見た瞬間に判るだろ

55:デフォルトの名無しさん
08/11/21 21:10:04
どこで聞いていいか分かりませんけど、
WCASLUについての問題です。
アドレスx,x+1,x+2の内容をそれぞれアドレスy,y+1,y+2に格納するプログラムを完成せよ。
が分からないので教えてください。
習ったコマンドはLD,LAD,ST,DC,DSくらいです。
自分の考えで作ったのは
アドレスx,x+1,x+2の内容をそれぞれGR0,GR1,GR2に格納したものです。
これを使って作れないですかね・・・
よろしくお願いします。
START
LAD GR7,0
LD GR0,X,GR7
LAD GR7,1,GR7
LD GR1,X,GR7
LAD GR7,1,GR7
LD GR2,X,GR7
RET
X DC 10,20,30
END



56:デフォルトの名無しさん
08/11/21 22:12:32
>>55です。
自己解決しました。

57:デフォルトの名無しさん
09/03/07 01:59:26
(x86で)1命令でeaxの値に1を加算する方法を4つ挙げよ
みたいな問題を先輩に出されたんだが、2つしかわからん。
add eax,1
inc eax
の他に何があるだろう?

58:デフォルトの名無しさん
09/03/07 02:10:43
3. lea
4. -1をsub
かなあ。



59:デフォルトの名無しさん
09/03/07 02:12:15
なるほど、
lea eax,[eax+1]
sub eax,-1
か。

thx

60:デフォルトの名無しさん
09/03/26 07:27:47
C/C++/Javaやそのほかの言語も全てCPU命令を基にした
アセンブラで出来てるんだから、
どんな複雑なAPIも結局はその組み合わせでしかないと思って
アセンブラの勉強を始めたら、
ノイマンモデルからやり直しになっちゃった('A`)

でもこういうのは楽しいね。

61:デフォルトの名無しさん
09/04/09 22:28:11
またそういうことを

62:デフォルトの名無しさん
09/06/15 02:31:54
IDAの使い方を日本語学びたいです。

63:デフォルトの名無しさん
09/06/15 23:18:48
どうも、井田です。

64:デフォルトの名無しさん
09/06/16 02:00:28
前スレ
スレリンク(tech板)

65:デフォルトの名無しさん
09/06/16 11:45:55
なんとも厨くさいスレタイだけど、ここを使うしかないか

66:デフォルトの名無しさん
09/06/16 12:13:18
いちおう「アセンブラ」ってスレも過去あったんだけどね。
Part13 が即死して放置されてる。
Part13.1 で立て直す?

67:デフォルトの名無しさん
09/06/16 13:36:20
有効利用で行きましょうよ。

68:デフォルトの名無しさん
09/06/17 01:38:00
>>66
せめてプログラム板では
アセンブラではなく
正しいアセンブリ表記にしようぜ

69:デフォルトの名無しさん
09/06/18 08:47:45
何がどう正しいんだ?
アセンブリ言語の処理系がアセンブラだろ?

70:デフォルトの名無しさん
09/06/18 08:52:26
>>69
assembly languageと書かれることが多いし、一般的にその方が正しいと思う人が
多いと思うが、IBMの社員はassembler languageって言うんだよな。

71:デフォルトの名無しさん
09/06/18 09:07:45
アセンブリっていうと言語っぽいが、アッセンンブリーというと自動車の部品みたい

72:デフォルトの名無しさん
09/06/18 15:26:11
アッセンブル、アッセンブリは組み立てや実装の時に使うな。

73:デフォルトの名無しさん
09/06/18 18:51:03
>>69
それが常識だよな
っていうか英語がわかればそのまんまだし

>>70
さすがIBM社員
プログラム知識はまるで駄目だな

74:デフォルトの名無しさん
09/06/18 19:17:46
IBMの用語は妙だったりすることはあるが、
方言ってだけでプログラミングと関係はないだろう。

75:デフォルトの名無しさん
09/06/18 19:58:27
CASLはアセンブラ言語

76:大和魂 ◆TLCPn.jaa2
09/06/19 18:00:18
質問です。自力で解決しようと努力しましたが、万策尽きました…。
5日以上PC-9801の前に張り付いて、アタマがおかしくなってきました。
2レスに分けますが、識者の方、よろしくお願いします。マジで台湾料理屋で腹壊しましたOrz

【行ないたいこと】
PC-9801のサウンドBIOSを任意のRAM領域にコピーしたい。PC-9801(26K互換FM)サウンドBIOSの
アドレス等は一意であり、セグメント:オフセットアドレス表記で、 0cc00h:2e00h の場所から
16kbの領域を占有する。2e00hから最初の3ワードは、0001h、0000h0、00d2hとなっており、これの
検出の可否でサウンドROMの存在を確認できる。

【やってみたこと】
PC-9801RS21(80386SX 16MHz 6.6MB RAM)上のNASM 2.06rc10にて、以下のような方針で
アッセンブルしてみた。転送先の初期化済みバッファ(00h x 8バイト)をsbuffとして確保し、
rep movsb命令でサウンドROM BIOSの最初の6バイトを転送してみた。その後DOSへの復帰前に
word [es:0cc00:2e00h+4]と00d2hが一致することまでは確認済み。ただ、word [es:sbuff+4]と
00d2hがcmpで一致しないんです。ここが問題。

【特記事項】
DOS 6.2のEMM386.EXEによりEMSメモリのページフレームがC0000hから確保されるので、
現状では実行および検証はリアルモードで何も組み込まない状態(F5起動)で行なう必要がある。
EMS対応は将来の課題である。なお、上記PC-9801RS21に標準ではFM音源は存在しないが、
互換ボードにて検証している(FM音源として、正常に機能し、拙作ツール・ゲーム等にて音も鳴る)。

77:大和魂 ◆TLCPn.jaa2
09/06/19 18:03:20
実際のコードです。
; PC-9801 26K compatible Sound BIOS copy tiny program
; Programmed by Yamato_Damashii 2009-06-19 for NASM 2.06rc10
[Bits 16]
  org 100h     ; COM program
start:
   push es
   push ds

   mov ax, 0cc00h     ; Start of Segment Address of Sound BIOS
   mov es, ax
   push es
   pop ds
   mov bx, 2e00h     ; Start of Offset Address of Sound BIOS
   lea si, [es:bx]
   lea di, [sbuff]
   mov cx, 8
   rep movsb    ; 一応movsbに(rep movsw 4を使いたいが安全のため)

CompareWithOriginal:
   cmp word [es:bx+4], 00d2h
   jne FailedCpyRom    ; これは通過する。当たり前か。
   cmp word [es:sbuff+4], 00d2h
   jne FailedCpyRom    ;
   ;ここで失敗。根本的に勘違いしているのだろうか…。上の[es:sbuff+4]と00d2hの
比較を取っ払えば、「成功しました」と判断される。ちなみに、EMS配下で実行すると暴走する
   ;以下、成功・失敗のメッセージ表示、POP DS/POP ES/終了処理など。

section .data
...
times 8 db 0

78:PENELOPE
09/06/19 18:07:54
プログラムをこれから始めようと思っているのですが、まず
何からはじめたら良いですか?

79:デフォルトの名無しさん
09/06/19 18:10:03
es:sbuffが何処を指しているか理解しろ

80:PENELOPE
09/06/19 18:11:24
基本的なことから教えてください。

81:デフォルトの名無しさん
09/06/19 18:15:03
アセンブラで勉強したいなら、
最初はシンプルなCOMファイルでの勉強がおすすめ
しかし、環境構築が大変かもしれn

82:大和魂 ◆TLCPn.jaa2
09/06/19 18:38:25
>>79
すいません、
section .data
sbuff:
   times 8 db 0
の間違い。

で、ちょうどCで
   char sbuff[8];

としたみたいなものです。確保したsbuffが実際にメモリ上のどこにあるかは判らないです。
判らないのは、Cでも同じでしょう。MASMだと dup/db系の擬似命令で行なうのだと思いますが。

83:デフォルトの名無しさん
09/06/19 18:41:08
セグメントレジスタの値をトレースすればわかると思う。

84:大和魂 ◆TLCPn.jaa2
09/06/19 19:17:57
>>83
なるほど。やってみます。あと、TASM(BCC 日本語版 v3.1付属)でも
同様のコードを書いてみようと思います。アドバイスありがとうございました。

Tracing the value of the segment registers, right? Thx !!

85:デフォルトの名無しさん
09/06/20 08:37:40
アセンブラってすげー簡単だよな。
Cを20年勉強しても使えるようになれなかったけど
アセンブラは一週間もかからず使えるようになった。

86:デフォルトの名無しさん
09/06/20 09:18:05
はい、嘘つきが湧きました。

87:デフォルトの名無しさん
09/06/20 10:41:02
使えるようになっただけで使いこなせてはいないんだろ

88:デフォルトの名無しさん
09/06/20 10:50:24
むしろC言語を20年かけて覚えられない方が
本当だったら感心するわ

89:デフォルトの名無しさん
09/06/20 10:53:45
おまいら釣られすぎだろ

90:デフォルトの名無しさん
09/06/22 12:32:34
アセンブリというよりマシン語での事なんだけど
IA32でのJcc系列に対する2Eまたは3Eのプリフィクス・コードってどんな意味があるの?
実際に動かしてみても動作には影響しないよね?

デベロッパ・マニュアルに書いてあったを見てから気になってしまって

91:デフォルトの名無しさん
09/06/22 12:45:43
>>90
分岐予測のヒント

92:デフォルトの名無しさん
09/06/22 15:05:19
結局、レジスタレベルでの違いは無いという事ですかね。
難しい。

93:デフォルトの名無しさん
09/06/22 16:36:55
2E/3Eって、セレクタのプレフィックスじゃね?
(i286まではセグメントオーバーライドプレフィックスつってた奴)

94:デフォルトの名無しさん
09/06/23 04:57:40
>>93
今もsegment override prefixと言ってるような気がするが。

で本題だが、そのprefix byteは普段はそういう意味なんだが、
分岐命令の前にくるとヒント情報として解釈されるという…

泥沼泥沼





95:デフォルトの名無しさん
09/06/23 09:14:29
間接ジャンプ時は通常通りsegment override
2E+Jccの時は条件が成立しない確率が高い事をCPUに知らせるためのヒント
3E+Jccの時は条件が成立する確率が高い事をCPUに知らせるためのヒント
他の分岐命令との組み合わせは予約済みとIntel 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-Mにちゃんと書いてある
どのCPUから有効かなどの情報はないが

96:デフォルトの名無しさん
09/06/26 17:10:04
16ビットと32ビットのニーモニック/機械語の対応って同じなんでしょうか?

windowsのdebugコマンドでは
mov eax,1みたいなのが使えないので
これは16ビットのアセンブラってことですよね

97:デフォルトの名無しさん
09/06/26 21:43:44
386以上のCPUなら16bitリアルモードでもEAXは使える
DEBUG.EXEは元々DOS用のデバッガだから対応してないだけ

98:大和魂 ◆TLCPn.jaa2
09/06/27 04:54:42
すいません、先日はありがとうございました。まだ未解決ですが(--;
ところで、入門書・入門サイトの類いの冒頭にかならずと云っていいほど
載っている"Hello, World!"のDOS画面表示プログラムですが、
大半の入門書、また実際のコードを見ても、流れは

・dxレジスタにメッセージ文のあるオフセットアドレスを代入
・AH=09H / INT 21Hのfunction callにより、コンソールに表示
となっていますが、ほとんどのケースで
mov dx, offset err_msg ; [MASM表記]
mov dx, err_msg ; [NASM表記]

ですね。先日PC-98の小物ツールのソースを読んでいたら、dxレジスタへのアドレス代入に
lea dx, [err_msg] ; [NASM表記]
となっているものがありました。実際にアッセンブルすると1バイト余分に食ってしまい、
たとえばAH=09Hファンクションが4箇所あれば、4バイト分実行バイナリ(COMファイル)が
大きくなってしまっています。この場合、mov dx, offset ではなく、lea命令で代入するのは、
擬似命令のoffsetを使いたくない、という理由ではないですよね??ご教示ください。

あとエラーメッセージやUsageの表示に、AH=40H/BX=0001Hのfunction callを用いる利点と欠点を
ご教示ください。数バイト分バイナリが大きくなってしまうのですが、意味が無いでしょうか??


99:大和魂 ◆TLCPn.jaa2
09/06/27 04:59:41
追記申し訳ない。

AH=40H / BX=0001H でのコンソール出力は、ファイルハンドラを用いて
書き出していたり、戻り値の判定等で、AH=09Hのそれとは厳密さの点で異なるという
理解で大丈夫でしょうか?

100:デフォルトの名無しさん
09/06/27 10:40:47
その程度の内容でleaを使うかmovを使うかは、ただの趣味の問題程度。
leaのほうが[bx+si+10]とかそういう指定もできるので応用がある。

ファンクションコールはMS-DOSの話になるが、「厳密さの点で異なる」という
言葉の意味がよくわからない。

101:デフォルトの名無しさん
09/06/27 11:00:14
>>98
エラーメッセージに、AH=09H / INT 21H
を使わないのは、エラー系は標準出力以外を使う文化が
あるからじゃないかな。

102:デフォルトの名無しさん
09/06/27 11:01:55
この場合の厳密さ、ってなんだろうね。

09Hは標準出力に送信する、終端は'$'。
40Hは出力先をファイルハンドルで指定する、出力するデータのサイズも指定する。
両者は別物。

103:大和魂 ◆TLCPn.jaa2
09/06/27 11:02:51
>>100
回答ありがとうございます。
leaを使うか、mov offsetの組み合わせでアドレス代入するかは、趣味程度の違いなんですね。
そうか、leaだと、確かにご指摘のようなパターンの応用も利きますね。

ところで後段、
mov ah, 9
lea dx, [err_msg]
int 21h

とすると、リターンコードがありません。しかし、
mov ah, 40h
mov bx, 0001h
mov cx, err_msglen
mov dx, err_msg
int 21h

section .data
err_msg: db 'An error has occured.', 0dh, 0ah, '$'
err_msglen equ $ - err_msg

としますと、実行後axレジスタに戻り値が格納され、各種判定に用いることが出来るということで、
「厳密」という表現を用いました。例えが不適切かも知れませんが、Cで云うところの
puts("An error has occured."); と、書式付き出力命令である
fprintf(stderr, "An error has occured.\n"); と対比可能ではないかな、と思いまして。
# int 20hでプログラム終了という太古のソースは、さしずめ void main(void){}で、DOSへの
# 戻り値のない、現在で云うANSI C非準拠のコードと同じでしょうかね。
# 80年代後半くらいから、ほとんどは mov ax, 4c00h / int 21hですよね。

104:デフォルトの名無しさん
09/06/27 11:04:27
>>98
Usageやエラーは標準エラー出力に出さないと、出力をリダイレクトした時に困るから。


105:大和魂 ◆TLCPn.jaa2
09/06/27 11:08:18
>>101-102
被りました。すみません。もう一度MASM本とソースを読み返してみます。

106:大和魂 ◆TLCPn.jaa2
09/06/27 11:26:14
>>104
まさに、stderr相当の話ですね。いまMASM本のP.157で確認しました。

107:デフォルトの名無しさん
09/07/09 22:37:35
どなたか教えてください…
sub $2,$1,$1
lw $4,100(0)
L1: add $2,$4,$2
addi $4,$4,-1
beq $4,$0,L1
sw $2,104($0)
End:

このプログラムをN番地から実行を開始した時、実行される命令の番地、それにより変化する汎用レジスタの名称、
変化後の値を知りたいのですが、途中までしかわかりません。
実行開始時、100番地から始まる4バイトには、整数10が格納されているとします。

順番 実行される命令の番地 変化する汎用レジスタ等の名称 変化後の値 の順に…
1 N $2 0
2 N+4 $4 10
3 N+8 $2 10
4 N+12 $4 9
5 N+16
6 N+8
7 N+12
8 N+16

108:デフォルトの名無しさん
09/07/09 22:38:15
ageます

109:デフォルトの名無しさん
09/07/09 22:49:59
宿題なら自分でやれ

110:デフォルトの名無しさん
09/07/09 23:05:08
>>109 すいません
sub $2,$1,$1
lw $4,100($0)
L1: add $2,$4,$2
addi $4,$4,-1
beq $4,$0,L1
sw $2,104($0)
End:

111:デフォルトの名無しさん
09/07/09 23:07:01
1 N $2 0
2 N+4 $4 10
3 N+8 $2 10
4 N+12 $4 9
5 N+16
6 N+8 $2 20
7 N+12 $4 8
8 N+16


112:デフォルトの名無しさん
09/07/09 23:26:58
>>110
ループしないな。
どっか違わない?

113:デフォルトの名無しさん
09/07/09 23:27:22
>>109
C/C++はあるのになんでアセンブリは宿題スレないんだろうな
最近習いだしたが先生に聞いてさっぱりも分からないのに課題出されて泣きそうだよ

114:デフォルトの名無しさん
09/07/09 23:34:52
泣くほどのことじゃないだろう。
理解できるまで、何回も考えてから、
解き方を質問すればいいだけ。

答えだけ知りたいなら、
誰かあらわれるまでまってりゃいい。

115:デフォルトの名無しさん
09/07/09 23:37:32
>>112
違わなくて、ループしないから困っているのです…。
理解できるまで、何回も考えてから、解き方を質問してます。
だれか、頭のいい方…

116:デフォルトの名無しさん
09/07/09 23:37:36
>>113
それMIPSのコードだろ?SPIM使って実行すればすぐ分かるだろうが

117: ◆Vn6tEMH3IE
09/07/09 23:41:43
>>107=>>108=>>110=>>115
スパム…?調べてみます。

118:デフォルトの名無しさん
09/07/09 23:42:07
PC-98って今も売っていますか?

119:デフォルトの名無しさん
09/07/09 23:44:53
スパム・・じゃねぇえ

120:デフォルトの名無しさん
09/07/09 23:48:28
どう考えてもbeqじゃなくてbneqだろ。そうすれば1から10までの総和計算になるから
意味が通る。それだけは最低教授に確認しろ。
ちなみにSPIMはMIPS32シミュレーターの名前だ。

121:120
09/07/09 23:50:45
bneqじゃなくてbneだったか。

122:デフォルトの名無しさん
09/07/09 23:59:20
>>120
bneが≠だとすると値はそれぞれどんどん離れていき・・

$2 $4
0 10
10 10
10 9
19 8
27 7

でも符号が反転してどこかで終わるかな?

123:120
09/07/10 00:03:32
>>122
お前相当な馬鹿だな。どこの大学だ?
$4が0になったときに終わるだろうが。

124:デフォルトの名無しさん
09/07/10 00:05:42
>>123
あああ気付いて書き込もうと思ったら間に合わなかったあああ
ありがとうございます。
最近彼氏と別れたからあなたに惚れそうです。

125:120
09/07/10 00:06:57
>>124
俺は馬鹿は嫌いだ。ついでに女は間に合ってる。

126:デフォルトの名無しさん
09/07/10 00:10:04
>>125
さすが、彼女がいる男って優しいんだよな;;
大学は明治でした。ほんとサーセンww

127:デフォルトの名無しさん
09/07/10 00:23:14
馬鹿な女の魅力を知らないとは。。。

だから124は俺がもらっていきますね

128:デフォルトの名無しさん
09/07/10 04:49:07
124を読んでも「彼氏と別れた」とあるだけだ。女とは限らないぞ。
アッーみたいな。


129:デフォルトの名無しさん
09/07/11 08:57:54
女は間に合ってる、と言ってるな。
やはり120はガチホモか。

>>120
やらないか?

130:デフォルトの名無しさん
09/07/30 08:55:56
アルファベットの小文字と大文字の範囲をXORでくっつける技があったと思うんだけど
忘れてしまった。どうやるかわかる人いる?

131:デフォルトの名無しさん
09/07/30 09:30:30
A - Z = 0100 0001 - 0101 1010
a - z = 0110 0001 - 0111 1010

C = c xor 0010 0000


132:デフォルトの名無しさん
09/07/30 11:55:25
どもども!

133:デフォルトの名無しさん
09/07/30 12:07:33
えっと、それだと、
大文字と小文字を入れ替えるだけじゃない?

134:デフォルトの名無しさん
09/07/30 17:48:49
くっつけるってどういう意味?
0x41-0x5A + 0x61-0x7A を 0x00-0x33 にするっていうこと?

135:デフォルトの名無しさん
09/07/30 17:58:56
URLリンク(homepage1.nifty.com)
これのことでしょ?
ここではShiftJISの判定だけど

136:デフォルトの名無しさん
09/07/30 18:08:20
それだともともとアルファベットの小文字と大文字の範囲はくっついてるんじゃないか


137:デフォルトの名無しさん
09/07/30 18:59:47
質問者です。解答を信じてちゃんと中身まですぐに確認しなかったのだけども
>>135これです。ありがとう。

138:デフォルトの名無しさん
09/07/30 19:50:51
1文字の入力してキャラクタコードを2進数と16進数で表示するコードを作りたいのですがここからわからなくなりました
ご教授お願いします
Code segment
Code ends
Data segment
Data ends
Stack segment stack
Stack ends
Data segment
Data ends
Stack segment stack
dw 100h dup(?)
Stack ends

Code segment
assume cs:Code,ds:Data,ss:Stack
Main proc near
mov ax,Data
mov ds,ax

Main_LOOP:



139:138
09/07/30 19:52:31
mov ah,01h
int 21h

cmp al,0Dh
je Main_EXIT

push ax
mov dl,' ' ;区切り用に空白を表示する
mov ah,02h ;
int 21h
pop ax

push ax
call BIN2BIN
pop ax
call BIN2HEX

jmp Main_LOOP

Main_EXIT:
mov ax,4C00h ;return to MS-DOS
int 21h ;
Main endp

140:デフォルトの名無しさん
09/07/30 19:53:12
;キャラクタコードを2進数で表示する変換サブルーチン

BIN2BIN proc near
mov bl,al
mov cx,8
B2B_1:
shl bl,1
mov dl,00h ;

adc dl,30h
mov ah,02h
int 21h ;

loop B2B_1

mov dl,'b' ;表示した2進数の最後にbを表示する
mov ah,02h ;
int 21h ;

mov dl,' ' ;区切り用に空白を表示する
mov ah,02h ;
int 21h ;

ret
BIN2BIN endp


141:デフォルトの名無しさん
09/07/30 19:54:13

pop ax

mov dl,ah ;
mov ah,02h ;
int 21h ;

loop B2H_2

mov dl,'h' ;表示した16進数の最後にhを表示する
mov ah,02h ;
int 21h ;

mov dl,' ' ;区切り用に空白を表示する
mov ah,02h ;
int 21h ;

ret
BIN2HEX endp

Code ends
end Main

142:138
09/07/30 20:00:20
すいません、>>141>>142の順番を間違って貼ってしまいました
正しくは>>138-140→>>142>>141の順です
;キャラクタコードを16進数で表示する変換サブルーチン

BIN2HEX proc near

mov cx,0
mov dl,16 ;基数=16
B2H_1:
mov ah,00h
div dl ;AX÷16=AL…AH
cmp ah,10 ;値は10以上か?
jae B2H_3 ;

add ah,30h ;AH+30h=AH(数字)
jmp B2H_4
B2H_3:
add ah,37h ;AH+37h=AH(英文字)
B2H_4:
push ax
inc cx
cmp al,0
jne B2H_1
B2H_2:

143:デフォルトの名無しさん
09/07/31 11:48:48
x86は門外漢だけど暇だから書いてみた。石の指定が無かったので8086で。
.model small
.8086
assume CS:Code, DS:Data, SS:Stack

Data segment para 'DATA'
TBLHEX db '0123456789ABCDEF' ;16進表現の変換テーブル
STRTOP db ' '
STRBIN db '00000000b ' ;表示用バッファ2進表現部分
STRHEX db '00h', 0Dh, 0Ah, '$' ;表示用バッファ16進表現部分
Data ends

Stack segment stack
dw 100h dup(?)
Stack ends

GetChr macro ;1文字入力
mov ah, 01h
int 21h
endm

PutStr macro string ;文字列表示
mov dx, offset string
mov ah, 09h
int 21h
endm


144:デフォルトの名無しさん
09/07/31 11:49:37
;プログラム
Code segment word 'CODE'
org 100h

;メインプロシージャ
;1文字入力->2進表現への変換->16進表現への変換->表示を改行が入力されるまで繰り返す
Main proc near
mov ax, Data
mov ds, ax
@@:
GetChr
cmp al, 0Dh
je @F
push ax
call CHR2BIN
pop ax
call CHR2HEX
PutStr STRTOP
jmp @B
@@:
mov ax, 4C00h
int 21h
Main endp


145:デフォルトの名無しさん
09/07/31 11:50:09
;文字コード->2進表現に変換しバッファへ格納
CHR2BIN proc near uses bx di
mov cx, 8
xor di, di
mov bx, offset STRBIN
@@:
shl al, 1
mov dl, 00h
adc dl, 30h
mov [bx + di], dl
inc di
loop @B
ret
CHR2BIN endp

N2H macro dst:req;テーブル参照して4bit値の16進表現を取り出しバッファへ格納する
mov si, ax
mov bx, offset TBLHEX
mov al, [bx + si]
mov bx, offset dst
mov [bx + di], al
endm


146:デフォルトの名無しさん
09/07/31 11:51:16
CHR2HEX proc near uses bx si di
xor ah, ah
push ax
xor di, di
;上位4bitを取り出して16進表現に
shr al, 1
shr al, 1
shr al, 1
shr al, 1
N2H STRHEX
;下位4bitをとりだして16進表現に
inc di
pop ax
and ax, 0Fh
N2H STRHEX
ret
CHR2HEX endp

Code ends
end Main

わからないところからの続きじゃなかったりする。ゴメンね。

147:デフォルトの名無しさん
09/07/31 12:29:14
有名な技だけど、ALの下位4ビットを16進に変換する方法

and al,0Fh
cmp al,10
sbb al,69h
das

148:デフォルトの名無しさん
09/07/31 19:04:00
お?楽でいいなぁ、これ。

149:デフォルトの名無しさん
09/08/01 00:02:37
>>146
ありがとうございます。
でもまだアセンブリ習い始めてすぐなのでshrとかがよくわかりません
できれば続きからはできませんか?

150:デフォルトの名無しさん
09/08/01 06:16:38
>>149
sine

151:デフォルトの名無しさん
09/08/01 11:27:45
>>150 おひ(笑
>>149 shr = SHift Right。C言語やPerlの演算子だと >>=。
対象レジスタ(変数)の値を指定ビット数だけ右に移動させる。
あいだ左端には 0(ビット) を置いて行きます。
それからねー、a >> n は int(a/2**n) [** はべき乗] に等価なのだ。


152:デフォルトの名無しさん
09/08/01 13:55:30
>>149
てーかCPUによって使える命令は変わるから先にCPUを明示しろよ。
まぁ習うといってもアセンブリ言語ならではのプログラミングの癖さえ把握すれば、あとはデータシート落として熟読して終わりなんだが。

153:デフォルトの名無しさん
09/08/01 15:13:13
>>151
最後の行、論理シフトだから「等価」と違うと思うよ。

154:デフォルトの名無しさん
09/08/01 17:17:53
>>151
解説ありがとうございます
>>152
CPUはCore2 DuoのE8600を使っています

155:デフォルトの名無しさん
09/08/01 18:30:47
データシートは熟読するものじゃねえと思うデスよ。
あれは辞書と同じで使いつつ覚えるもの。


156:デフォルトの名無しさん
09/08/01 20:23:06
メモリ構造とアルゴリズムを直接リンクできる唯一の言語

157:デフォルトの名無しさん
09/08/01 20:25:59
>>156
言っちゃ悪いが意味不明だ。

158:デフォルトの名無しさん
09/08/01 20:30:46
いくらアセンブリ言語と言えども、それ自身が入出力をすることはできない。
できるのは、OSに指示を出すだけだ。またはハードウェアに。

159:デフォルトの名無しさん
09/08/01 20:33:33
データシート熟読するのは組み込み系のプロセッサだろう。

160:デフォルトの名無しさん
09/08/01 20:41:21
>>158 のほうが意味不明だな

>>156 はスレッデッドコードみたいな技法のことを言いたいんだろうか?

161:デフォルトの名無しさん
09/08/01 20:48:46
なんだそれw
超エスパーだなw

162:デフォルトの名無しさん
09/08/02 13:55:35
アセンブリでOSのAPI使えんの?

163:デフォルトの名無しさん
09/08/02 13:56:41
当然出来る。

164:デフォルトの名無しさん
09/08/02 14:07:04
>>162
int割り込みでコンソールIOってのが一番分りやすい例かも。
アセンブリ言語以外の言語でいうAPIとはかなり毛色が違うが、これもAPIの一種…というかAPIの元ネタだよな。

Windowsとかでも、カーネルモードへの入り口としてSYSENTERって形で残ってる。
ラッピングされてて普通は触らないというか触れないが。

165:デフォルトの名無しさん
09/08/02 14:55:07
今時のOSなら単純にcallすればいい。

166:デフォルトの名無しさん
09/08/02 14:59:09
Linuxだとsyscall番号と引数をレジスタに設定してint 0x80で
システムコールを発行できる。

167:デフォルトの名無しさん
09/08/02 15:04:39
>>166
それって何の意味があるの?
callと比べて

168:デフォルトの名無しさん
09/08/02 15:12:54
callと比べる意味ってどこにあるの?

169:デフォルトの名無しさん
09/08/02 15:18:11
>>167
>それって何の意味があるの?
そうゆう決まりになってるから

170:デフォルトの名無しさん
09/08/02 15:21:02
>>167
callだとlibcをリンクしないといけないだろ。
少しは自分の頭で考えろよ。

171:デフォルトの名無しさん
09/08/02 15:31:21
ああ納得w
linuxのABIは酷いからな
それらに影響されたくなかったわけか

172:デフォルトの名無しさん
09/08/02 17:08:26
スタティックリンク前提の方が醜くね?

173:デフォルトの名無しさん
09/08/02 17:09:50
だからそう言ってるのか。

174:デフォルトの名無しさん
09/08/02 17:49:30
linux板住人も酷すぎる

175:デフォルトの名無しさん
09/08/02 22:17:55
int で呼んでるのは別にLinuxだけじゃないんだが

176:デフォルトの名無しさん
09/08/02 22:26:52
でもlinuxが酷いことに変わりはないよね

177:デフォルトの名無しさん
09/08/02 22:45:13
元々BIOSからしてint呼び出しになってたし
DOSもそうだった。

386BSDは確かコールゲート経由だったが
それ以外は多くがintだな。
今は結構sysenterになってるみたいだが。

例えばNT系のWindowsも、システムコールはint2Eだという話を聞いた覚えがある。
信憑性は知らんが。

その手のシステムコール呼び出しを
POSIXならopen()というAPI、Win32ならCreateFile()というAPIとして公開している、という点では皆同じ。

178:デフォルトの名無しさん
09/08/03 00:31:18
ToolBoxはAライントラップだったっけ。

179:デフォルトの名無しさん
09/08/03 01:47:42
酷いって何が酷いんだ?馬鹿じゃないの?

180:デフォルトの名無しさん
09/08/03 02:04:21
NTのint2Eの呼び出し
URLリンク(www.ctyme.com)

NT/2Kなら、これで直接呼び出すことも出来るはず。
パラメータの説明が無いから殆どは無理だろうけどね。
sysenterに移行したXP以降でもint2Eのインターフェースが残っているかは知らない。

181:デフォルトの名無しさん
09/08/03 02:36:18
XPはsysenterをサポートしてないCPUでも動くっぽいからint 2Eはサポート
してるはず。

LinuxでもCPUに応じてsysenterやsyscallを使える。

182:デフォルトの名無しさん
09/08/05 06:24:33
NOPさん
今日は何をするのかな〜

「ウホホホホウホ」
おやおや
ゴン太くん
今日も張り切ってますね




183:デフォルトの名無しさん
09/08/06 21:12:03
>>166,167,168

これって、カーネル2.25辺りまでしか使えないのでは?
カーネル2.30ではこの仕様ではないですよね?


>Linuxだとsyscall番号と引数をレジスタに設定してint 0x80で
>システムコールを発行できる。

184:デフォルトの名無しさん
09/08/06 22:21:17
いつのまにそんなすごいバージョンのカーネルが出たの?

185:デフォルトの名無しさん
09/08/07 01:34:01
システムコール使えなかったらどうやってカーネルモードとユーザーモードの橋渡しするんだよ…
ロクな事にならねぇぞ

186:デフォルトの名無しさん
09/08/07 01:39:59
その「システムコール」とsyscallは意味がちょっと違う。

187:デフォルトの名無しさん
09/08/07 03:03:32
>>183
アホか?使えるに決まってるだろ。使えないと思う理由は何だ?

188:デフォルトの名無しさん
09/08/22 18:58:58
書いた本人ですら理解しかねるようなアセンブリコードで
オープンソースとか嫌がらせ以外のなにものでもないよ

189:デフォルトの名無しさん
09/08/22 19:39:38
ageるのは馬鹿ばかりだな

190:デフォルトの名無しさん
09/08/22 20:58:04
>>188
おっとGNUやLinuxの悪口はそこまでだ。

191:デフォルトの名無しさん
09/08/23 03:13:42
アセンブラはソースにインデントがないから楽だよなあ。
インデントのある言語は、そこで俺の思考も一緒にインデント
されてしまうから、思考が続かないんだ。

192:デフォルトの名無しさん
09/08/23 05:23:37
大抵は思考を分割しないと内容を把握し辛いからインデントしたり関数分割するのだと思うが、191は分割が苦手な変わりに直線的に広大な範囲を把握できるって事なのか…?
それはそれで凄いのだろうが、書いたソースを読みたくないな。

193:デフォルトの名無しさん
09/08/23 05:37:29
改行のないレスも読みたくないな

194:デフォルトの名無しさん
09/08/23 05:44:09
>>191は配置転換でいきなりPythonを使わされることになったコボラー

195:デフォルトの名無しさん
09/08/23 07:11:47
BASIC−アセンブラとやってきて、現在はコボラーだけどね。
COBOLも、制御構造が導入されてから読みにくくなった。
インデントが多くなったし、外PERFORMでやたらと処理を外出しするので
飛んでから戻ってくるのが大変だ。
やっぱアセンブラだね。
アセンブラが主流の開発現場ってどういうのがあるんだろう。
天職に転職したい、なんちて。

196:デフォルトの名無しさん
09/08/23 07:38:04
アセンブラもインデントする
外出しもする

197:デフォルトの名無しさん
09/08/23 09:27:27
>>195
4bitCPUとかならアセンブラが主流。
つうかそれ以外の選択肢がない。


198:デフォルトの名無しさん
09/08/23 09:41:41
AVRでgccバリバリ使ってますが
最適化-Osは結構アホなのでインラインアセンブラも使います

199:デフォルトの名無しさん
09/08/23 11:01:26
>>195
 外出ししないのはBrainF*ckくらい

200:デフォルトの名無しさん
09/08/23 14:30:22
アセンブラって外出しする構文あったっけ?
BASICで言うGOTOはあるが、GOSUBはないよね?

201:デフォルトの名無しさん
09/08/23 14:43:34
CALLとかBSRとか
命令単体で無くても組み合わせでつくれるだろ

202:デフォルトの名無しさん
09/08/23 14:45:20
>>200
お前アセンブリプログラミングしたことないだろ
GOSUBどころか関数呼び出しが出来るアセンブリ言語なんていくらでもある

203:デフォルトの名無しさん
09/08/23 15:00:26
ホントかよ。
6502と68000をやっていたが、
戻り先を指定しないRETURN的な
構文はなかったような気がするぞ。
今のCPUは違うのか。

世の中の言語が俺に合わせてくれないなら、
自分で作るしかないな。
インデント禁止、分岐はラベル指定ジャンプのみ、
構造化なし、オブジェクト指向なし、ソース分割禁止、
変数はアルファベット一文字のみの俺言語を。
やってみるぜ!

204:デフォルトの名無しさん
09/08/23 15:06:04
どちらもRTSというニーモニックでサブルーチンから戻る命令があるだろ?
おまえは何をやってきたんだ。

205:デフォルトの名無しさん
09/08/23 15:09:17
これだからコボラーは・・・

206:デフォルトの名無しさん
09/08/23 15:15:21
失礼だろうと思って書かなかったが、端にも棒にも掛からないくらいのアホでしたか。
しかもコボラ・・・

>>197
あと、ICカードレベルの極端に制約のある組み込み系と、カスタムLSI/CPUがある系もアセンブリ言語が結構必要な気がするんだが。
前者はメモリ容量と演算速度の制約があるから付加機能を持たせたかったらアセンブリ言語ナシだときつそうだし、後者はカスタムした命令セットの操作に必要になってくるだろう。
・・・インラインで済むかもしれないが。

207:デフォルトの名無しさん
09/08/23 15:27:38
やはりコボラーは馬鹿なんだな
関数呼び出しも知らずに仕事でコーディングしてたと思うとぞっとするわ

208:デフォルトの名無しさん
09/08/23 15:34:24
ハードウェアスタックがないのはIBMメインフレームの特徴だしな。
そっち方面一筋だったとしたらしょうがないかもしれない。
いちじるしく不幸だと思うが。

209:デフォルトの名無しさん
09/08/23 16:39:36
>>203
これ、コボラですらないだろ。
煽りたがりの嘘つき中学生。

210:デフォルトの名無しさん
09/08/23 17:05:40
>>203は煽りか、やっぱり。いい年したオヤジが「俺が」「やってみるぜ!」

…自分の親父と同世代だとすると、吐き気がするw

211:デフォルトの名無しさん
09/08/23 17:45:44
>>204
RTS、調べてみたらあるね。
俺のいた職場では教えてくんなかった。なぜだろう。
まあどのみち使わないからいいんだけど。
では、これから理想の俺言語を作るからさらばだ。
C言語を勉強して、言語仕様を設計して・・・20年はかかるかな。
いいライフワークになりそうだ。

212:デフォルトの名無しさん
09/08/23 18:00:12
> 俺のいた職場では教えてくんなかった。なぜだろう。
> まあどのみち使わないからいいんだけど。

んなわけねーだろ

213:デフォルトの名無しさん
09/08/23 18:56:16
上司部下そろって向上心も技術力も無い職場だった、と。

やはりコボラは害にしかならないのですねー・・・

214:デフォルトの名無しさん
09/08/23 19:49:35
関数ではなくてプロシージャと呼んで欲しい。

215:デフォルトの名無しさん
09/08/24 02:56:49
元々は返却値があるのを関数、無いのは手続き/プロシージャ とか呼んでたよね。
(Fortranの時代) cでvoid型も関数と言うようになってから、関数と手続きの区別が曖昧に
なってきた。オブジェクト指向が登場して手続き型言語が叩かれるようになり、手続きという
単語そのものも嫌われるようになっていった。 くくり出しの概念自体は一緒なのにね。

216:デフォルトの名無しさん
09/08/24 03:14:08
関数のvoidはvoid型を返す関数なんだよヴォケ

217:デフォルトの名無しさん
09/08/24 08:24:26
昔の参考書とか、あと現在でも大学の一般教養レベルだとCのmain関数が

void main(void){
とか
main(){

で始まってたな。これって、86系アセンブラだとah=43h/int 21hのDOSファンクションコールで
alの値を指定しないのと、本質的に同じだよね。これはアセンブラの場合、容量とかの
都合で指定しなかったのか、戻り値をDOSに返すのはどうでもよかったのか?
いまでもアセンブラ解説サイトの大御所でたまに散見される。

218:デフォルトの名無しさん
09/08/24 08:34:49
今時プロシージャとか使いたがる奴は確実にオッサン

219:デフォルトの名無しさん
09/08/24 10:24:48
DOSへ返す戻り値は重要じゃないな。バッチファイルでエラーコード見て分岐とか
ほぼ使わないし。連続して処理を繰り返すなら復旧可能なエラーでプログラム終了
させてDOSへ戻るなんて馬鹿馬鹿しい。続行不可能なエラーならエラーコード吐いた
ってOSが後始末してくれるわけじゃないし。自前で後始末しなけりゃいけないなら、
エラー処理もプログラム内でやって、続行不可能になったらエラーメッセージ吐いて
abortした方がいい。

というか、正常終了で0を返さないと誤動作する糞OSってあんの?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5346日前に更新/64 KB
担当:undef