2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

アセンブラの宿題質問スレ

1 :デフォルトの名無しさん:2006/10/18(水) 00:04:05
アセンブラの宿題ができないときに、
アセンブラ好きのお兄さんに尋ねるスレ。

・必ずCPUの名前を書くこと!
・情報を小出しにしない。書ける情報は全て書いた方が得だよ。

2 :デフォルトの名無しさん:2006/10/18(水) 00:05:44
HLT

3 :デフォルトの名無しさん:2006/10/18(水) 00:06:56
ファミコンアセンブラはまじで楽しい。
それ以外のアセンブラなんて人間にすすめるもんじゃない。

4 :デフォルトの名無しさん:2006/10/18(水) 00:20:21
>>3
本家スレに逝けw

5 :デフォルトの名無しさん:2006/10/18(水) 00:47:59
質問で失礼します。
[8085h]←[8051h]+[8052h] を計算し、符号付2進数加算としてのオーバーフローを判定する

8085プログラムで書けという問題なのですがまったく分かりません。
どなたか分かる方教えてください。よろしくお願いします。

6 :デフォルトの名無しさん:2006/10/18(水) 01:28:16
パリティーフラグでオーバーフローを検出できるのはZ80からだっけか。

まあまず、8bitの2の補数を足したときにオーバーフローする条件を考えてみれ。

7 :デフォルトの名無しさん:2006/10/18(水) 03:12:34
nop



8 :デフォルトの名無しさん:2006/10/20(金) 23:58:08
盛り上がらないよなやっぱ

9 :デフォルトの名無しさん:2006/10/21(土) 00:56:11
>>5
LDA 8051H
MOV B,A
LDA 8052H
ADD B
PUSH AF
STA 8085H
POP BC
MVI A,02H
ANA C
JNZ OVERFLOW

10 :デフォルトの名無しさん:2006/10/22(日) 11:20:40
Verilog-HDLを使った下記URLの問題で悩んでいます。
プログラム全体は自分で頑張って作ってみようと思っているのですが、
32ビットの整数値を予め用意しそれを操作する方法が分かりません。
命令自体が32ビットなのに32ビットの数なんて操れるのでしょうか?
addi命令でも操れるのはせいぜい24ビットだったような気がしますし、
5個も足したら普通にオーバーフローしてしまうんじゃないかとorz

http://www.za.ztv.ne.jp/yosi-h/v6010005ffffff.jpg

11 :デフォルトの名無しさん:2006/10/22(日) 15:02:43
キーボードから正整数n を入力し、n の階乗n!を計算してディスプレイに出力せ
よ。ただし、n!の計算にはACC に結果をセットするサブルーチンを用いること。
[解答例]
.EQU @,$000
.EQU stk,$700
LDS# stk
JSR GET_NUM
PSHA
JSR fact
JSR PUT_NUM
HLT
.EQU @,$100
.EQU n,2
fact: PSHF
TSF
POPX
do: LDA! n
CMA# 0
JLE end
MUL res
STA res
DEC! n
JMP do
end: LDA res
POPX
POPF
RTN
res: .WORD 1
.END
これってもっと簡単に書ける?

12 :デフォルトの名無しさん:2006/10/22(日) 15:05:15
キーボードから正整数n(>0)を入力し、1〜n番目のフィボナッチ数f<1>〜f<n>の各々を
サブルーチンで計算し、全て呼び側(caller)でディスプレイに出力せよ。
ただし、f<I>は次のように定義される。
:f<1> f<2> = 1, f<i> = f<i-1> + f<i-2> (i>=3)。
また、iとfibonをcallerの局所変数とするとき、フィボナッチ数f<i>を計算するサブルーチンは
2つのCBA引数iとfibonを受け取り、f<i>を変数fibonにセットして戻るように作れ。

お願いします。

13 :デフォルトの名無しさん:2006/10/22(日) 15:35:34
せめてクピュ名をかけy

14 :デフォルトの名無しさん:2006/10/23(月) 00:31:10
すみません教えてください
問題
もしコンピュータが直線的な処理しかできないとすると、0番地から計算を始めても主記憶の最後の番地までの命令をただ実行するだけでそこで終わってしまう。
1GBの主記憶であるとして、全ての命令が仮に2バイトで表せたとして、
・何命令収容できるか
・全部の命令を実行するのに、どれくらいの時間がかかるか

PDP11のプログラムカウンタとかについての問題です
答えだけじゃなくて説明をしなければならないので、できるだけ解説もお願いします
よろしくおねがいします

15 :デフォルトの名無しさん:2006/10/23(月) 00:37:42
>>14
1命令2byteだから1GBで0.5G命令、つまり2^29命令、
1命令に1クロックかかるなら2^29クロック。
1MHzなら、これは537秒くらい。

と、書いてはみたが、俺は勘違いしているような気がしてきた。

16 :デフォルトの名無しさん:2006/10/23(月) 00:50:19
PDP-11のプログラムカウンタって16bitじゃなかったっけ、とか
プログラムカウンタの上限までいったら次は0番地に戻るんじゃないか
とかいうツッコミはダメですか?

17 :デフォルトの名無しさん:2006/10/23(月) 00:50:37
ちょ待って・・w
わけわかりません・・・
勘違いって?

18 :15:2006/10/23(月) 00:53:58
>>17
俺は>>16みたいなことを考えずに書いちゃったわけ。
出題意図がイマイチわからんしな。

19 :デフォルトの名無しさん:2006/10/23(月) 00:55:24
0番地に戻る・・?16・・?
すみませんわかりません



20 :デフォルトの名無しさん:2006/10/23(月) 01:10:36
どなたか教えてください。。。

21 :デフォルトの名無しさん:2006/10/23(月) 01:34:54
お願いします!

22 :デフォルトの名無しさん:2006/10/23(月) 02:11:39
>>14
ものすごく基礎的なことなので

コンピュータのしくみ
ttp://www.dsgn.im.hiroshima-cu.ac.jp/~tomoo/lecture/documents/arch.pdf

プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識
ttp://www.amazon.co.jp/exec/obidos/ASIN/4822281019

この辺のを読んで勉強し直せ。

23 :デフォルトの名無しさん:2006/10/23(月) 02:31:10
すみませんが急ぎなので教えてください・・
そもそもここはそういうスレですし
基礎的で申し訳ありませんがよろしくお願いします

24 :デフォルトの名無しさん:2006/10/23(月) 02:55:05
気が向いた人が答えるスレ
他の人が課題に挑戦するスレ
だよ。

おまえの単位を取るためのスレじゃないのだけは確か。

25 :デフォルトの名無しさん:2006/10/23(月) 02:58:53
>>23
問題が意味不明
GBを理解してるか、の問題?

どんな命令を実行するのかわからないのに、
どれくらいの時間がかかるかなんてわからない


26 :デフォルトの名無しさん:2006/10/23(月) 03:59:33
直線的な処理しかできないってのは、仮にプログラムカウンタが存在しなくて、
0番地から順に命令を実行できるのみだとしたら、と考えるんだろう?

命令数は簡単だから省く。

1命令って、どういうプロセスで実行されるんだっけか?
読み出しに1クロック、解釈に1クロック、実行に1クロックで、合計3クロックか?

27 :デフォルトの名無しさん:2006/10/23(月) 04:05:36
書き戻しもあるぞよ

28 :デフォルトの名無しさん:2006/10/23(月) 04:15:08
いまどきのプロセッサはそう単純にはなってないだろうが
昔は、fetch, decode, execute, writeback の4つに分類されてたな。

29 :デフォルトの名無しさん:2006/10/23(月) 08:36:07
Verilog-HDLを使った下記URLの問題で悩んでいます。
プログラム全体は自分で頑張って作ってみようと思っているのですが、
32ビットの整数値を予め用意しそれを操作する方法が分かりません。
命令自体が32ビットなのに32ビットの数なんて操れるのでしょうか?
addi命令でも操れるのはせいぜい24ビットだったような気がしますし、
5個も足したら普通にオーバーフローしてしまうんじゃないかとorz

http://www.za.ztv.ne.jp/yosi-h/v6010005ffffff.jpg

30 :デフォルトの名無しさん:2006/10/23(月) 11:56:44
2つだけでもオーバーフローは起きる

31 :デフォルトの名無しさん:2006/10/23(月) 12:51:32
>>14です!
教えてくださいお願いします
問題は書いた通りです

補足です
学習範囲は実行制御にかかわる命令というところで、GBとかも習いました
教科書によるとプログラムカウンタは2ずつ増加していくけど、直線的な処理にとどまるらしいです
そこでジャンプ命令と条件分岐命令が用意されており、柔軟な処理が可能になると書いてあります

急ぎですのでなるべく早くお願いします!

32 :デフォルトの名無しさん:2006/10/23(月) 13:01:04
>>15-16の何が不満なんだろう。

33 :デフォルトの名無しさん:2006/10/23(月) 14:38:55
結局自分で考えて提出しました‥
答えも教えてもらいましたが全然違いました‥このスレの人のも
もうかなりヤバイです(ノд`)
答え1問目は5億何ちゃらというとんでもない数字でした
2問目はそれに10の-9乗掛けたものです
そもそもクロックとかまだ習っていませんでしたし‥
皆さん難しく考えすぎだったのでは‥

34 :デフォルトの名無しさん:2006/10/23(月) 14:44:06
2^29=5億何ちゃらだから>>16で合ってたじゃん。
それに10^-9をかけるということは1GHz動作だったんだな。
問題に1GHzって書いてなかったん?

35 :デフォルトの名無しさん:2006/10/23(月) 14:44:38
あ、>>15だった。

36 :デフォルトの名無しさん:2006/10/23(月) 14:44:59
2^29=536870912だろ。何がヤバイんだ?

37 :デフォルトの名無しさん:2006/10/23(月) 14:54:17
答えを教えてもらっても駄目な奴っているんだな

38 :デフォルトの名無しさん:2006/10/23(月) 14:55:06
クロック習ってないのにどれくらいの時間がかかるか、なんて問題出るの?

39 :デフォルトの名無しさん:2006/10/23(月) 15:18:03
0.5秒で1GB処理するのか

40 :デフォルトの名無しさん:2006/10/23(月) 16:34:35
>>34
書いてないです
>>36
間違えた答えで提出してしまったことです
>>38
出ましたね‥
クロックは教科書のその20ページ後ぐらいに初めてでてくるようです

41 :デフォルトの名無しさん:2006/10/23(月) 16:42:54
全ての命令が一秒待つとかだったら17年かかるな。

42 :デフォルトの名無しさん:2006/10/23(月) 17:05:00
>答えも教えてもらいましたが全然違いました‥このスレの人のも
だから>>15で合ってるじゃん。何が違うの?
もしかして2^29=5億何ちゃらって理解してなかった?

43 :デフォルトの名無しさん:2006/10/23(月) 20:10:49
問題です。お願いします。
ラベルA、B、Cにそれぞれ、10、20、5という整数値が格納されている。
A−B+Cの値を計算してラベルDに格納するプログラムを作成する。
ただし、プログラムの先頭4桁は次の形式(54*****は学生番号、
YAMADA TAROUは氏名)とすること。


  54***** YAMADA TAROU

EXIT START

44 :デフォルトの名無しさん:2006/10/23(月) 20:22:22
>>43
MOV D, -5

45 :デフォルトの名無しさん:2006/10/23(月) 23:45:43
なんでクピュ名かかないやつ多いんだ

46 :デフォルトの名無しさん:2006/10/23(月) 23:52:53
わからない人のために補足しておくと、
クピュとはCPUのことです。

47 :デフォルトの名無しさん:2006/10/24(火) 23:49:38
dc.b 54xxxxx
label_a:
ds.b 1
label_b:
ds.b 1
label_c:
ds.b 1

clr.b d0
loop:
add.b #1, d0
cmp.b #10, d0
bne loop
move.b d0, d1
add.b d1, d1
move.b d1, d2
lsr #1, d2
move.b d0, label_a
move.b d1, label_b
move.b d2, label_c

あー、アセンブラなんか書いたの 13年ぶりぐらいだから
lsrの意味がよく思い出せねえんだけど右に一桁ずらすんだっけ?w
ワードしかだめなんだっけ?


48 :デフォルトの名無しさん:2006/10/25(水) 02:42:36
お願いします。
8085CPUで

      _ _
A←B・C+D ・ E   (論理演算)

という問題なんですが、さっぱりわかりません。プログラムのキーポイントと一緒に解説をおねがいします。


49 :デフォルトの名無しさん:2006/10/25(水) 04:02:46
>>47
その形式ならサイズ指定してやればバイト/ワード/ロングワードのどれでもいける。
lsr -4(A0)とか、lsr $C00000とか、lsr LABELとかやると、ワード限定になる。
あと、漏れならこう書く。
.include DOSCALL.MAC
.text
moveq #4, d0
lea D, a0
loop: swap d0
addq.w #1, d0
swap d0
dbra d0, loop
swap d0
move.w d0, -(a0)
lsl.w #2, d0
move.w d0, -(a0)
lsr.w #1, d0
move.w d0, -(a0)
swap d0
add.w (a0)+, d0
sub.w (a0)+, d0
add.w (a0)+, d0
move.w d0, (a0)
addq.w #1, (a0)
DOSCALL EXIT
.data
A: ds.w 1
B: ds.w 1
C: ds.w 1
D: ds.w 1


50 :デフォルトの名無しさん:2006/10/25(水) 05:47:44
>>48
キーポイント:何も無し
MOV A,B ;アキュームレータにBを転送
ANA C ;アキュームレータとCの論理積をとる
MOV B,A ;結果をBへ待避
MOV A,D ;アキュームレータにDを転送
ORA E ;アキュームレータとEの論理和をとる
CMA ;結果の否定をとる
ORA B ;アキュームレータとBの論理和をとる
HLT ;プログラム停止


51 :デフォルトの名無しさん:2006/10/25(水) 15:24:03
>>50
詳しい解説付きでどうもアリガトウ御座います。

52 :47:2006/10/25(水) 21:52:00
>>49
DOSCALL.MACってなつかすぃものを見たーーーーーーw


53 :デフォルトの名無しさん:2006/10/25(水) 21:58:51
ところで学生って、デバッガ使わせてもらえないの?
オレは自力で覚えたから知らんが、全部、紙とか黒板で理論のみ習うわけ?
んなわけないと思うけど
デバッガで遊んでレジスタの変化とか見てれば、各命令の動作なんてすぐ覚えられると思うんだけど。。。


54 :デフォルトの名無しさん:2006/10/26(木) 08:59:47
MINIPSアセンブラです。jalr命令(jalr r1,r2:プログラムをr2レジスタの値の示す
アドレスへ分岐させる。その際に、復帰アドレスがr1レジスタに格納される)
を使って再帰的に以下のCプログラムをアセンブラにしたいのですが、
C言語を作るまでで若干力尽きております。ご教授いただければ幸いですorz

int func(int j){
if(j==0){
return j;
}
return j+func(j-1);
}

55 :デフォルトの名無しさん:2006/10/26(木) 09:41:57
>>54
gccがその環境にあるかしらんけどコンパイラオプションに
アセンブラコードをはかせるよう指定してみたらいかがかと。
gccの場合

#gcc -S test.c
#vi test.s

・test.cの中身
nt func(int j){
if(j==0){
return j;
}
return j+func(j-1);
}
//コンパイラを通すためのダミーのmain
main(){

return(0);
}

56 :54:2006/10/26(木) 11:07:08
>>55
ご回答ありがとうございました。
gccってそんな機能があったんですねorz
使えると思いますので、学校に行ったら試してみたいと思います。

57 :デフォルトの名無しさん:2006/10/26(木) 11:18:53
>gccってそんな機能があったんですね

というか、C言語をアセンブリ言語に落とすのがCコンパイラの仕事だが。

58 :55:2006/10/26(木) 11:34:48
>>56
ガンガレ

59 :デフォルトの名無しさん:2006/10/27(金) 00:05:13
質問しようと思ったら、全く同じ問題があってワラタ

60 :デフォルトの名無しさん:2006/10/28(土) 19:58:33
誘導されてきました。
VerilogHDLを用いたMINIPSアセンブラについてですが、テキストに

1: initial begin
2: InstMem.mem_data[0] = 32'h20011234; // addi $1, $0, 0x1234
3: InstMem.mem_data[1] = 32'hac030004; // sw $3, 4($0)
4: InstMem.mem_data[2] = 32'hfc000000; // halt
5: end

という書き方と

ADDR: Instruction #Mnemonic
0000: 20010001 # addi $1, $0, 1
0004: 0061202a # slt $4, $3, $1
0008: fc000000 # halt

という書き方(InstMem.mem_data[]= があるかないか?)があるのですが、
これらはどういった違いがあるのでしょうか?


61 :デフォルトの名無しさん:2006/10/30(月) 23:22:20
宿題です、分かる方お願いします。

ラベルAに整数(たとえば10)が格納されている。
Aを4で割ったあまりをラベルBに入れ、さらにAを9倍した値をラベルCに
いれるプログラムを作成せよ。


62 :デフォルトの名無しさん:2006/10/30(月) 23:28:32
>>61
CPU名を書いてないので答えられない。

63 :デフォルトの名無しさん:2006/10/30(月) 23:29:49
答えがわからないなら書き込まなくていいです

64 :デフォルトの名無しさん:2006/10/30(月) 23:33:56
頭おかしい奴だなw

65 :62:2006/10/30(月) 23:44:53
>>63
確かにCPUによっては俺は答えられない。
だが、CPU名が書いてないと、
答えを書きたい人がいても答えられないんだ。

66 :デフォルトの名無しさん:2006/10/30(月) 23:48:08
>>1も読めないような奴だから、こんな問題も解けないんでしょう。
ほっとけばいいよ。

67 :デフォルトの名無しさん:2006/10/31(火) 00:03:33
>>60
前者はシーケンシャルに実行される、ってことは、代入するコードが生成される。
後者はプロセッサの初期化時に値がロードされる。
FPGAなんかだと外部からロードされるデータの中に値が含まれてる。

ってことだと思う、 VerilogHDLは経験が無いけどきっとそう。

68 :デフォルトの名無しさん:2006/10/31(火) 00:11:40
なんだよアセンブラって。
>>62に禿同。
んじゃ>>63>>66に問題だ。
ldi r30,low(0x60)
ld r16,r30
ldi zl,16
ld r17,z+
cp r16,r17
brne NG
rjmp OK

意味書け!
もちろんアセンブラですけど。


69 :デフォルトの名無しさん:2006/10/31(火) 00:21:44
なんだろう、レジスタが30本以上(おそらく32本であとはPCとSP)
でzlがレジスタっぽいし、分岐がbrってことは、AVRかな?


70 :デフォルトの名無しさん:2006/10/31(火) 00:35:24
どうでもいいが痛い奴二人の

「どっちがより痛い奴か」

の競争にしか見えません俺には。

71 :デフォルトの名無しさん:2006/10/31(火) 00:42:26
はい次の方、質問をどうぞ。
CPUと環境を明記してね。

72 :68:2006/10/31(火) 00:55:51
>>69
正解。だが、お前の発言は面白くもなんともねぇ。
何故なら、お前には聞いてないからだ!ボケ

73 :69:2006/10/31(火) 02:04:57
>>72
だから質問にある「意味」には答えてないだろ、
よくよめカス!

74 :デフォルトの名無しさん:2006/10/31(火) 12:10:50
>>73
意味についてでなく
CPUが解らなければ
答えられないということを解らせなければいけなかった。
ということではないかな?
そういう流れだと思うが。

75 :デフォルトの名無しさん:2006/10/31(火) 14:38:07
ソースだしたらCPU解かっちゃうからなぁ


76 :デフォルトの名無しさん:2006/10/31(火) 16:42:28
>>62を見た時点でCPUでも書いてりゃよかったのに
開き直っちまうからこんなことになる

77 :デフォルトの名無しさん:2006/10/31(火) 18:28:24
MINIPSアセンブラ(?)です。
FFFFFF00番地に1→11→111と値を変えながら入れていくプログラムなのですが、
bne前後でエラーが起こって1周目で終了してしまいます。
もしかしたらプログラム以外の問題である可能性もありますが、
プログラム、アルゴリズムに問題はありますでしょうか?

addi $1, $0, FF00       luiと合わせて、$1にFFFFFF00を入力する処理
lui   $1, FFFF
addi $2, $0, 1          $2=1
addi $3, $0, 0          $3=0
addi $4, $0, 500         $4=500。この数字は大きければいいだけで特に意味なし
slt   $5, $4, $2 ←L1    bneと合わせて、$4<$2になったらhaltへ行く処理
bne $5, $0, L2       
add $3, $3, $2         $3に$2を足し込んでいく
sw  $3, 0($1)         $3の値をFFFFFF00へ
add $2, $2, $2         $2は繰り返しのたびに2倍に
beq $0, $0,L1       
halt          ←L2

78 :デフォルトの名無しさん:2006/10/31(火) 19:28:01
ググッたら、教育用のCPUか>MINIPS
分岐命令の後ろに、nop入れろ

79 :デフォルトの名無しさん:2006/11/01(水) 01:02:32
ここでFPGAにMINIPSコアを乗せている>>60が登場!

80 :デフォルトの名無しさん:2006/11/01(水) 02:55:09
>>79
そんなやつおらんやろー。
そもそも、架空のCPUコア乗せてるのが信じられない。
ARMや8051とかならまだしも。

81 :デフォルトの名無しさん:2006/11/01(水) 04:27:47
COMET も架空かな

82 :デフォルトの名無しさん:2006/11/01(水) 10:35:08
「オレほどCPU持ってるやつはいない。100個持ってる。」

83 :デフォルトの名無しさん:2006/11/01(水) 18:28:18
教育用の架空のコアだから、FPGAに乗せるのも学習の一環だと思うな。
ソフトウエアでのエミュレータなら普通にアリだろ?

84 :デフォルトの名無しさん:2006/11/01(水) 19:35:52
計算機基礎 アセンブラ・プログラム演習問題
1.キーボードから上底、下底、高さを入力し、台形の面積をディスプレイに出力せよ。
2.キーボードから底面の縦・横の長さ、高さを入力し、四角錐の体積の体積をディスプレイに出力せよ。
3.キーボードから整数を入力し、その値の偶数/奇数を判定し、「odd」/「even」をディスプレイに出力せよ。
4.キーボードから整数nを入力し、を求めて、結果をディスプレイに出力せよ。 Σ=nii1
ただし、ループを使う方法と2)1(+nnの2通りで計算し、両方出力すること。
5.キーボードから西暦(1868≧)を入力し、年号に変換しディスプレイに出力せよ。
(参考)
明治(m):1868-1912
大正(t):1912-1926
昭和(s):1926-1989
平成(h):1989-2006
(例)
入力 出力
1900 → m33
1926 → s1 (新しい年号優先で表示)

誰か一問でも出来たらやってください!
授業ではttp://www.k.hosei.ac.jp/~i05r4102/までやりました。

85 :デフォルトの名無しさん:2006/11/01(水) 22:50:58
疲れるし、つまんないから仕事じゃなきゃやらなーい。
出来たから何って感じだし。

スレ違いだし。

86 :85:2006/11/01(水) 22:56:14
あ、すまん。>>84じゃないよ。
FPGAやらの話してるやつへのレスね。


87 :デフォルトの名無しさん:2006/11/01(水) 23:21:52
>出来たから何って感じだし。

88 :デフォルトの名無しさん:2006/11/02(木) 02:18:04
>>84
CPU名を明記するように。

89 :デフォルトの名無しさん:2006/11/02(木) 07:31:46
>>84
とりあえずCUSPエミュレータとアセンブラを貰っといた。しばらくは楽しめそうだ。
で、ちょっと読んで書いたのが↓。
問1.
.EQU @,$000
JSR GET_NUM
STA uhen
JSR GET_NUM
STA lhen
JSR GET_NUM
STA h
LDA uhen
ADA lhen
MUL h
JSR PUT_NUM
HTL
uhen: .WORD
lhen: .WORD
h: .WORD
.END

90 :デフォルトの名無しさん:2006/11/02(木) 07:55:53
問2
.EQU @,$000
.EQU StkTop,$700
JSR GET_NUM
STA h1
JSR GET_NUM
STA h2
JSR GET_NUM
STA h
LDA h1
MUL h2
MUL h
DIV# 3
JSR PUT_NUM
HLT
h1: .WORD
h2: .WORD
h: .WORD


91 :デフォルトの名無しさん:2006/11/02(木) 07:57:27
問3
.EQU @,$000
.EQU StkTop,$700
JSR GET_NUM
SHRA
JOV putodd
LDA 'e'
JSR PUT_CHR
LDA 'v'
JSR PUT_CHR
LDA 'e'
JSR PUT_CHR
LDA 'n'
JSR PUT_CHR
HLT
putodd:
LDA 'o'
JSR PUT_CHR
LDA 'd'
JSR PUT_CHR
LDA 'd'
JSR PUT_CHR
HLT
.END

92 :デフォルトの名無しさん:2006/11/02(木) 08:10:51
問4
.EQU @,$000
.EQU StkTop,$700
LDS# StkTop ←問2と3もこの行追加して
JSR GET_NUM
STA n
PSHA
LDA# 0
loop: ADA n ←ここからloop版
STA a
DEC n
JNE loop
JSR PUT_NUM
POPA ←ここからn(n+1)/2版
STA n
INC n
MUL n
DIV# 2
JSR PUT_NUM
HLT
n: .WORD
.END

93 :デフォルトの名無しさん:2006/11/02(木) 09:39:36
問5 入りきらないんで複数行を一行に纏めた箇所がある。(一目でわかるよね)
.EQU @,$000 .EQU StkTop,$e00
LDS# StkTop JSR GET_NUM
PSHA
CMA# 1989 JGE PutH
CMA# 1926 JGE PutS
CMA 1912 JGE PutT
LDA# 'm'←問3の似た行LDA ' 'をLDA# ' 'に直して
JSR PUT_CHR
LDA# 1867 STA y
JMP PutN
PutT: LDA# 't' JSR PUT_CHR
LDA# 1911 STA y
JMP PutN
PutS: LDA# 's' JSR PUT_CHR
LDA# 1925 STA y
JMP PutN
PutH: LDA# 'h' JSR PUT_CHR
LDA# 1988 STA y
PutN: POPA SBA y JSR PUT_NUM
HLT
y: .WORD
.END


94 :デフォルトの名無しさん:2006/11/02(木) 15:01:17
久しぶりに宿題板みたいになってきたな♪(゚д゚)ウマー

95 :デフォルトの名無しさん:2006/11/02(木) 23:57:40
微妙にスレ違いかもしれませんがここに書きます。
アセンブラの課題が出たのでWinXPにcygwinを入れてその動作や命令について勉強しようと思ったのですが、
cygwin自体は何とか入った(?)もののソースを書いて〜.sとして保存後、
 $ gcc 〜.s
としてコンパイルしようとしても
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../../i686-pc-cygwin/bin/ld: cannot find -luser32
collect2: ld returned 1 exit status
と表示され実行ファイルは何も作られません。

これは〜.sファイルをコンパイル出来るパッケージ(?)が入っていないせいで、
それを入れれば上手く行くのか、cygwinのインストールが上手く行っていないのか、
それとも単純にコマンドを間違えているのか、何か根本的に間違えているのか…
全く手詰まりになってしまったので何か助言をいただけないでしょうか…。

96 :デフォルトの名無しさん:2006/11/03(金) 00:16:06
>>95
ttp://sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=44&s=44#44

97 :デフォルトの名無しさん:2006/11/03(金) 01:27:26
ありがとう。
ということはインストールが上手く行っていないのか…。
確かにインストールの途中で固まって以後すすまなくなってた。
アンインストールインストール…と繰り返すうちに訳が分からないことになってる…。

98 :95:2006/11/03(金) 03:32:32
ダメだ…何度やってもインストールの途中で固まってしまう。
w32apiパッケージのlibuser32.aというのを入れれば動くという事は分かっても入れ方が分からない…。
他の質問者の人はインストールし直すと正常に動くようになったとあるけれど
自分の場合はインストールし直そうとするとほぼ確実に途中で固まってうまくいかない。
どうすればいいんだ…。

99 :デフォルトの名無しさん:2006/11/03(金) 03:58:45
>98
どこでどう止まるの?
ファイルのダウンロード中?コピー中?
何のファイルでとまる?

100 :95:2006/11/03(金) 05:33:41
もともとは
ttp://www.ongs.co.jp/publications/books/unix_applications/index.html
この本買ってcygwin入れようと思ったのだけれど、どうも他のアプリケーション含めて
上手くインストール出来ない事が多かったんだけど、
CDからインストールの場合もネットからインストールの場合もファイルのコピー中(?)に
進捗状況が0%から進まなかったり20%ちょっとで止まったり61%出止まったり…。
どこで止まるかは毎回違うといった有様ですが、CPU使用率は高いのに何もしていない
(HDDがガリガリ言わなくなる)がインストールは途中…という。

で、ここからが続きなんですが、それでもPCを再起動したりしてインストールは
正常に終了させられたのですが、やはり
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../../i686-pc-cygwin/bin/ld: cannot find -luser32
collect2: ld returned 1 exit status
と同じエラー。
C:\cygwin\usr\lib
の中がカラなのでライブラリ自体入っていない様です。
インストーラにこのライブラリが入っていないと言う事があるのでしょうか?
普通このライブラリは手動で入れるのですか?

ググって
ttp://www.jp.netbsd.org/ja/JP/Documentation/Packages/list/devel/w32api/README.html
このページには行き当たったもののどうやってcygwinにいれればいいのか…。

101 :デフォルトの名無しさん:2006/11/03(金) 10:24:01
>100
それは普通「正常に終了」とは言わないケド…
…でも何で止まるんだろ。
ごめん。訊ねたけど判らないっす。

102 :デフォルトの名無しさん:2006/11/03(金) 10:25:04
普通にCygwinのサイトからダウンロードしてきたら?
遣り方についてはスレ違いにつき割愛。

103 :95:2006/11/03(金) 15:18:10
cygwinのサイトから入れてみました。
エラーメッセージが増えましたorz

$ gcc 〜.s
/cygdrive/c/DOCUME~1/(user)/LOCALS~1/Temp/cchKzoMI.o:fake:(.text+0x9):undefined reference to 'printf'
/usr/lib/gcc/i686-pu-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0xab): undefined reference to '_WinMain@16'
collect2: ld returned 1 exit status

104 :デフォルトの名無しさん:2006/11/03(金) 17:46:33
printf() と main() ガ見つからない、ってさ

105 :デフォルトの名無しさん:2006/11/03(金) 18:03:54
要するにやっぱライブラリがみつかんねぇってこった。

106 :デフォルトの名無しさん:2006/11/04(土) 02:02:32
解決案その1
gccを介さず、素直にasとldを自分で呼び出して使う。

解決案その2
gccに-nostartfilesオプションを指定する。

あと、ソースは公開しよう。

107 :デフォルトの名無しさん:2006/11/05(日) 17:31:28
LC3シミュレーターというソフトがあるらしいのですが、下のプログラムをLC3で作成せよ
という問題が出ました。どなたかご教授下さい。
http://kjm.kir.jp/pc/?p=24382.jpg

108 :デフォルトの名無しさん:2006/11/05(日) 19:01:28
で、何を教えりゃいいの?
LC-3 Simulatorとマニュアル、命令セット&アーキテクチャ資料の入手法?

109 :デフォルトの名無しさん:2006/11/05(日) 19:58:31
教授によると、その画像(数式)をアセンブラで作成せよ
ということでした、

110 :デフォルトの名無しさん:2006/11/05(日) 21:15:03
ある特定のメモリ番地の値がディスプレイに出るだけのハードウェアを使って
その値を変えることで様々な表示をさせることを実習でやったのですが、
もっと複雑なハード(PCのキーボードやマウス、ディスプレイ)もCPU(アセンブラ)から駆動できるそうです。
どのような方法で実現されているのでしょうか?若干スレ違いになるようで申し訳ないoですrz

111 :デフォルトの名無しさん:2006/11/05(日) 21:27:04
>>110
>どのような方法で実現されているのでしょうか?
いろいろ。
その実習のようにメモリ空間に周辺機器のI/Oをマッピングしたり、
CPUによってはI/O専用のアドレスを持ってるのでそこに配置したり。

112 :デフォルトの名無しさん:2006/11/05(日) 23:17:04
>>111
ありがとうございました。皆さん物知りで大変助かります^^;

113 :デフォルトの名無しさん:2006/11/05(日) 23:34:20
いや、あんたが物を知らないか調べる能力がないだけだ。

114 :デフォルトの名無しさん:2006/11/05(日) 23:38:30
プログラマーになるつもりなのか知らんが
希望する情報を自分で探し出せない能力は
プログラマーに必要な素質がかけてるようなきガス

昔に比べりゃ、googleなんて便利なものがあって
なんで探し出せないか不思議だわ。
やる気ないとしか思えん。


115 :デフォルトの名無しさん:2006/11/06(月) 00:26:04
教えてgoo!で、ググって出た答えを書いてあげると感謝されるもんね!

116 :デフォルトの名無しさん:2006/11/06(月) 11:43:24
>メモリ空間に周辺機器のI/Oをマッピング
>I/O専用のアドレスを持ってるのでそこに配置
これ、理解してて書いてるならタダモノではない気配。

117 :デフォルトの名無しさん:2006/11/06(月) 13:01:15
メモリマップドI/Oとか、I/OマップドI/Oとか言ったかな。
昔8bit機いじってたヤツなら結構知ってるんじゃね?

118 :デフォルトの名無しさん:2006/11/06(月) 14:57:02
どっちもメモリマップドの話にしか見えない。

119 :デフォルトの名無しさん:2006/11/06(月) 19:07:07
>>116
いや、君が何を言いたいのかそれだけじゃよくわからんが、
たぶん君が無知なだけだと思うよ。

120 :デフォルトの名無しさん:2006/11/06(月) 21:09:35
>>108
遅レスですみません、さきほど教授に聞いたら、問題は
Task: write a program (in machine code for LC3) which does the following:

1) creates an array of 30 numbers, A[i]=(i+3)*(1+(-1)^i), writes
this array into the memory, and then
2) reades the integer numbers A[i] from memory, and sums them up,
i.e. R=Sum(A[i], for i=1,..,30).
だそうです、どなたかお願いできないでしょうか?

121 :デフォルトの名無しさん:2006/11/06(月) 21:28:46
だからね、LC3が何者か提示しないと話が進まないと思うのだが。

122 :デフォルトの名無しさん:2006/11/06(月) 21:46:12
>>114
日本語大丈夫か?

>>120
そのLC3やらの言語と俺らが知っている一般的なアセンブラは必ずしも同じじゃないんだよ。
あと、その問題のどの辺りが分からんのかも教えてくれ。一から作らす気か?w

123 :デフォルトの名無しさん:2006/11/06(月) 23:19:09
>>120
ここは宿題が分からないときに質問するスレであって変わりに宿題してもらうスレじゃないんだよ。
誤解するな。

124 :デフォルトの名無しさん:2006/11/06(月) 23:44:44
そもそも問題の内容自体理解してない様だから、もう1年受け直した方がいいな。

125 :デフォルトの名無しさん:2006/11/07(火) 00:30:27
>>119
IOマップドは普通「I/O専用命令」の下りがあるもんだ。
メモリマップドとの区別ついてないだろ?
あと>>110はDMAの可能性もある。

126 :デフォルトの名無しさん:2006/11/07(火) 01:00:13
>>125
何が言いたいねん。

>>111(俺じゃないが)は>>110に対するレスだよ。
その辺踏まえてるのかな。

127 :デフォルトの名無しさん:2006/11/07(火) 01:27:36
>>111が答になってない件について

128 :デフォルトの名無しさん:2006/11/07(火) 01:33:46
質問者が納得してるんだからいいんじゃねーの?

129 :デフォルトの名無しさん:2006/11/07(火) 03:13:34
【ちょっといいですか?】
不勉強な人が不勉強な人にでまかせを教えるのはやめましょうw
最悪ですw
本当にどうもありがとうございました。


130 :デフォルトの名無しさん:2006/11/07(火) 03:17:59
>>120
ttp://highered.mcgraw-hill.com/sites/0072467509/student_view0/lc-3_simulator.html
LC-3シミュレータはここにあった。

ttp://highered.mcgraw-hill.com/sites/dl/free/0072467509/104653/PattPatelAppA.pdf
これに命令セットとアーキテクチャについては全て書かれてる。

ttp://www.uploda.org/uporg573061.asm.html
で、始めて触るけどマニュアル見ながらとりあえずやってみたのがこれ。
マシンコードってことは2進数で書かないとダメかね?


131 :デフォルトの名無しさん:2006/11/09(木) 00:43:33
初めまして、最近アセンブラを始めました。
現在、アセンブラでの計算に悩んでいます。
今回出た課題はw=x+5*y*z+4と言う式があり、
キーボードからインプットされた数字をx、y、zにいれてwを出したいんです。

先程、自分で入力された数が正の数だったらちゃんとした答えが出るようには出来たのですが、
答えが負の数になると何か変な数値が出てきます。

どうか教えて頂けると幸いです。

CPU:Intel Pentium 4 CPU 3.00GHz

132 :デフォルトの名無しさん:2006/11/09(木) 00:54:39
>>131
まず、負の数を表示すること自体ができるか(出力だけが間違ってる)、
次に、乗算でmulでなくちゃんとimulを使っているか(計算が間違ってる)、
この2つは大丈夫ですか?

と思ったが、
Nbitの整数同士を掛け算した結果の下位Nbitは、符号付きかどうかに関係ない
のだった。mul使っても普通は大丈夫だね。

133 :デフォルトの名無しさん:2006/11/09(木) 01:29:15
>>131の掛け算を見てふと思い出した。
2次元配列の値をアセンブラで出したいのですが、例えば
A[0][0] * A[1][1] - A[0][1] * A[1][0] = 3000 * 300 - 2000 * 400
のように結果的な値はある程度小さくなっても途中の計算が大きくなる場合、
効率的に計算するにはどのような方法がありますでしょうか?
A[1][1]の回数A[0][0]を足し込んで・・・とかやってたらアホみたいなサイクル数になったorz

134 :デフォルトの名無しさん:2006/11/09(木) 11:21:08
>>133
掛け算もないCPUなの? Z80かなんかの8ビットCPUとか?
だとしても、その程度の話ならCで足し算で掛け算を実装してみればいいじゃん。
掛け算の両辺の大小見たりシフトで代用できないか検討したりするだけ。
#8ビットCPU用のCコンパイラのアセンブル出力覗いてみてもいいね。

135 :133:2006/11/09(木) 17:18:45
>>134
CPUはFPGAというのでしょうか?作ったら使えるのかもしれませんが残念ながら掛け算はありません。
大小を見るというのは繰り返し回数に持ってくる方の変数は小さい方がいいからということでしょうか?
シフトについても、シフトを使うことでサイクル数が少なくて済む処理があるということを
聞いたことがある程度なのですが、どういったアルゴリズムなのでしょうか?
3000*300を300000*3にするようなイメージでしょうか?
質問ばっかりになってしまって申し訳ないですorz

136 :デフォルトの名無しさん:2006/11/09(木) 17:58:11
>>133
A≒C、B≒Dという場合にはこれが使えるかも。
A*B-C*D=(A-C)*B+(B-D)*C

ていうかCPU名を書いてくれないと答えようがない。
普通の32bitCPUならこんな小細工は全くの無意味だし。

>>134
例えばimul eax,8の代わりにsal eax,3とするとか。
これもCPUによって素直にかけ算した方が速いことがあるから注意。

137 :デフォルトの名無しさん:2006/11/09(木) 17:58:56
136の後半は>>134じゃなくて>>135へのレス

138 :134:2006/11/09(木) 18:38:35
>>135
FPGAか、納得。それじゃこったことは何もできないと思った方がいいねぇ。
#つーか、それこそノウハウの塊だから先人に教えを乞う方がよくね?

139 :デフォルトの名無しさん:2006/11/10(金) 00:22:44
スレ違いかもしれませんが・・・
CPUに関して勉強中なんですが、2バイトや4バイトでメモリに1回でアクセスするのに
番地は2や4の倍数である必要があるらしいんですが、なんでですか?
奇数アドレスの2バイトアクセスは、どの辺が困るのかわかりません。
CPUはARMです。

140 :デフォルトの名無しさん:2006/11/10(金) 00:49:59
>>139
こういう風に16byteのメモリがあったとする。
00──┐
04──└─→CPU(アドレス00から4byte読む)
08──
12──

00──
04────→CPU(アドレス04から4byte読む)
08──
12──

こういう配線になってたらアドレス02から4byte読めないだろ?
こういう制限が出てしまうくらい配線が大変だということだ。

141 :デフォルトの名無しさん:2006/11/10(金) 01:16:27
バスがエラーだ、電車を使え

142 :139:2006/11/10(金) 10:15:08
>>140
1バイト用、2バイト用、4バイト用の配線があるというわけですね?
CPUじゃなくてバスの制約に引っかかるんですか。 ありがとうございました。

143 :デフォルトの名無しさん:2006/11/10(金) 14:28:28
>>142
いや、たとえば4バイト境界から一度に4バイト読む配線だけ用意した場合、
02番地から4バイト読む時は2回読んでくっつけなくちゃいけない。
読み出しのコストが倍かかっても読んでくれるCPUと、「それ、おかしいだろ」
ってエラーにするCPUとがある。



144 :デフォルトの名無しさん:2006/11/10(金) 23:56:47
ARMさんはちょっとわがままなRISCプロセッサなので
「ちょっと!メモリの読み出しに2回もコストをかけたら、一定速度での命令実行なんて出来ないじゃない!」
「私に読んで欲しかったら、アドレス境界を4の倍数に合わせなさい!さあ、はやくっ!」
と文句を言ってしまうのだ。許せ。

145 :139:2006/11/11(土) 00:00:04
>>143
>一度に4バイト読む配線だけ用意した場合
これはメモリスペックで言うバス幅が32ビットであるということでしょうか?
んでこれが境界を決めているというわけですか?
バス幅が16bitなら2バイト毎のアドレス、64bitならば、8バイト毎のアドレス、みたいな感じで・・

146 :デフォルトの名無しさん:2006/11/11(土) 00:51:33
>>145
>メモリスペックで言うバス幅が32ビット
CPUアーキテクチャでいうバス幅が近いかな、とおもう。
最近のCPUはキャッシュや内部RAM/ROMを持ってたりするから
単純にこ〜だ、とは言えない。
設計する時に決める事、ってかんじ。

バス幅128ビットにしました、けど互換性確保したいから
4バイト境界です、って可能性もある。

147 :デフォルトの名無しさん:2006/11/11(土) 08:12:47
かつてIntelは8085の後継として16ビットCPUを開発していた。
16ビットCPUとは言え、メモリが今とはビット単価も占有面積も違う時代。
まして8ビットバス版の8088の存在もある。当然の如く命令長は1バイトからの可変長とされた。
そこではたと気付く。「命令長が奇数だったら、次の2バイト命令がワード境界を跨ぐじゃん。」
斯くして現在にまで続く可変命令長の際物CPUができあがったというわけ。

一方Motorolaは68000の開発に当たって素直に命令長を2の倍数のみとした。
そのために3ビットイミディエイト加減算なんて命令までできることになったが、
それはまた別のお話。

148 :デフォルトの名無しさん:2006/11/11(土) 14:15:42
バカ基本的な質問をさせてください

IA-32 on NASM です

サブルーチンの先頭でよく見かける
push ebp
mov ebp, esp
は、何をしてるんでしょうか?
ebp を push する意味って esp を ebp に mov するためですよね?
この mov って必要なんですか?
引数とからんでる気はするんですが・・・
教えてください><

149 :デフォルトの名無しさん:2006/11/11(土) 14:16:34
ばかぁ><

150 :デフォルトの名無しさん:2006/11/11(土) 14:25:31
>>139
どうせこんなスレでまじめに聞いてやしないだろうけど、
あんまりこのスレの連中のいうこと真に受けない方がいいよ。

俺も本当の理由をソース付きで答えられるわけじゃないけど、
それは恐らくCPU側の都合というよりもアドレスをデコードする側(つまりメモリとか
デバイス)側の問題でしょう。

任意アドレス指定でアドレスされても常にバス幅のデータを正しく吐き出すような
回路が複雑になることってなんとなく想像できるでしょ。

151 :デフォルトの名無しさん:2006/11/11(土) 14:46:38
>>148
ttp://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
ttp://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/kikaigo2003/lecture6.pdf

152 :デフォルトの名無しさん:2006/11/11(土) 14:56:38
>>151
thx!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

153 :139:2006/11/11(土) 15:10:34
>>146
>バス幅128ビットにしました、けど互換性確保したいから
>4バイト境界です、って可能性もある。
メモリのバス幅が128ビットで、CPU−メモリ間のデータバス幅が32ビットという場合ですね?
データバス幅を32ビットにすると、メモリアクセスは、4の倍数のアドレスから4バイトだけ、
という方法しか許さなくなるわけですか。

>>150
結構収穫ありました。 ググってもさっぱりわかりませんでしたし。

>任意アドレス指定でアドレスされても常にバス幅のデータを正しく吐き出すような
>回路が複雑になることってなんとなく想像できるでしょ。
回路のことはさっぱりわかりませんで、想像出来ませんでした。

154 :デフォルトの名無しさん:2006/11/11(土) 15:15:36
わけわかめ

155 :デフォルトの名無しさん:2006/11/11(土) 15:28:22
>>153
>147
>150こそ滅茶苦茶だから。

156 :デフォルトの名無しさん:2006/11/11(土) 15:34:07
設計次第でバス幅は関係ない。
ハードにその機能があるかどうか。

157 :デフォルトの名無しさん:2006/11/11(土) 16:09:41
>>156
何が言いたいんだろうw

158 :139:2006/11/11(土) 16:10:03
>>156
メモリに
・2の倍数のアドレスから2バイトアクセスする
・4の倍数のアドレスから4バイトアクセスする
みたいな機能があるってことですか?

159 :デフォルトの名無しさん:2006/11/11(土) 16:20:19
そんな訳のわからんこと言ってる奴ほっとけってw
古典的なISAバスでも何でもいいから、メモリやデバイスのアドレスデコード回路が
どうなってるかを調べれば自ずとわかるよ。

160 :デフォルトの名無しさん:2006/11/11(土) 16:48:39
>>156
そう作るのが大変だから今の設計はほとんどそんな風に
作ってないって話だろうが。

メモリ読みだし単位は決まってた方が作るのに便利って事。
大体から、昔から1ビット単位じゃなくて1バイト単位でアクセスするって
お約束もあっただろ?

161 :デフォルトの名無しさん:2006/11/11(土) 16:52:18
ARMの命令長は常に1ワード=4バイト。Thumb命令なら1ハーフワード=2バイト。
素直に並べりゃ絶対にアドレス境界を跨がない読み出しになるんだから、
奇数アドレスから読めないことで一体何が困るのか逆に理解できない。


162 :デフォルトの名無しさん:2006/11/11(土) 17:00:00
>140 >143 あたりで説明おわっとるがな

163 :デフォルトの名無しさん:2006/11/11(土) 17:40:45
139<どうしてぼくの思ったとおりにならないんですか?


164 :139:2006/11/11(土) 17:44:07
CISCでも境界を跨げないなら、その境界ってのはどこの制約なのか気になったのです。
>>140を見る限り、境界はメモリの構造によるものと考えていいんでしょうか。

165 :デフォルトの名無しさん:2006/11/11(土) 18:25:35
だからメモリというよりバスというものの構造から来る制約だといってるだろw

っていうかどうせHW勉強する気がないんだろ?
だったらそういうことにいちいち疑問を持たず、そういうものだと思う態度が正解。
勉強する気もないのにいちいちドチテ坊やするのは愚の骨頂っていうんだよ。

166 :デフォルトの名無しさん:2006/11/11(土) 18:47:20
>>164
>147も書いているが、各々のプロセッサ設計段階での事情を反映しているだけ。
制約云々は二の次。

167 :デフォルトの名無しさん:2006/11/11(土) 18:53:01
はぁ。
それ優先順位としては逆だと思いますが。。

168 :デフォルトの名無しさん:2006/11/11(土) 18:55:52
っていうか、任意アドレスにアクセスできるようにしようと思ったら
どんなハードにする必要があるのか考えれば自明だろうに。。

データバス8本ごとにアドレスデコーダ付けるような冗長な回路が一つの方法だが、
そういう冗長な回路が必要になるだろ

169 :デフォルトの名無しさん:2006/11/12(日) 10:42:23
>>167
設計・製造コストと機能のトレードオフは、工業製品としてはあたりまえ。


170 :デフォルトの名無しさん:2006/11/12(日) 21:16:18
宿題クル?

171 :デフォルトの名無しさん:2006/11/13(月) 01:52:20
m|||-_|||m<キットクル〜

172 :デフォルトの名無しさん:2006/11/13(月) 09:19:40
VerilogHDLを用いてMINIPSを作成しています。
この状態から命令・それに伴う回路を最低ひとつ分加えて、どんなプログラムでもいいので
この状態で流すより実行サイクル数が短くて済めばそれで正解という課題です。
左2ビットシフトが楽と言われたのですが、
命令の組み込み方やそれを有効に使えるプログラムが分かりません。
2bit sifterやALUといった各モジュールは既に用意されています。

命令表、この空いている所を使って命令を割り当てます
http://www.za.ztv.ne.jp/yosi-h/v6010004fffaf0.jpg

回路図
http://www.za.ztv.ne.jp/yosi-h/v6010007fffaf0.jpg

173 :デフォルトの名無しさん:2006/11/13(月) 11:59:30
こっちじゃねーの?
暇だからVHDLでも書こうかな@プログラム
http://pc8.2ch.net/test/read.cgi/tech/1043858153/l50

あと
【FPGA/CPLDスレ】 XILINX/ALTERA/Lattice/Actel 03@電気・電子
http://science3.2ch.net/test/read.cgi/denki/1119984464/l50

【Verilog】記述言語で論理設計 Project4【VHDL】
http://science4.2ch.net/test/read.cgi/denki/1143016023/

174 :デフォルトの名無しさん:2006/11/13(月) 16:10:16
>>173
失礼しました。誘導ありがとうございます。

175 :デフォルトの名無しさん:2006/11/15(水) 22:35:17
定数(75と37)を確保しその輪をGR1その差をGR2に算出せよって問題わかりますか?

176 :デフォルトの名無しさん:2006/11/15(水) 23:17:15
75と37の輪?

177 :デフォルトの名無しさん:2006/11/15(水) 23:20:05
和の間違いでした

178 :デフォルトの名無しさん:2006/11/15(水) 23:24:35
>>175
data1 db 75
data2 db 37
GR1 ds 1
GR2 ds 1
entry:
mov [data1], [GR1]
add [data2], [GR1]
mov [data1], [GR2]
sub [data2], [GR2]
end
脳内アセンブラだから汎用性ないけどね。


179 :デフォルトの名無しさん:2006/11/15(水) 23:26:57
>>175
    LD    GR1,A
    ADDL  GR1,B
    LD    GR2,B
    XOR   GR2,=-1
    LAD   GR2,1,GR2
    ADDA  GR2,A
    RET
A   DC   75
B   DC   37


180 :175:2006/11/16(木) 00:02:06
ありがとうございます!

181 :デフォルトの名無しさん:2006/11/17(金) 23:42:48
R2<-0
R2<-R2+15
R2<-R2+15
R3<-0
R3<-1
R1<-0
R4<-0
R6<-0
R6<-R3 AND 0x1
if R6=1 go to PC+3
R4<-R3+3
R1<-R1+R4
R1<-R1+R4
R3<-R3+1
R2<-R2-1
if R2!=0 go to PC-8
これだけでこのプログラムが何をやってるかわかりますか?

182 :デフォルトの名無しさん:2006/11/18(土) 02:05:16
R2 ← 15
R1 ← 0
R4 ← R2 + 3
R4 ← R2 + R4
R1 ← R1 + R4
R1 ← R1 + R4
R2 ← R2 - 1
if R2 != 0 go to PC-6

183 :デフォルトの名無しさん:2006/11/18(土) 02:40:27
>>182
dです、すみません
自己解決しました

184 :デフォルトの名無しさん:2006/11/18(土) 17:14:07
問題:キーボードから整数5個を入力して1次元整数配列aにセットし、次にサブルーチンrecuv_add_arrayで配列aの全要素を加算し、結果コーラー側で出力せよ。ただし、サブルーチンは再起型 パラメータは『先頭要素a[m]のアドレス』と『加算すべき要素数』とする。
お願いします。

授業ではttp://www.k.hosei.ac.jp/~i05r4102/までやりました。
8

185 :デフォルトの名無しさん:2006/11/18(土) 17:33:21
何が分からないのか分からない。

186 :デフォルトの名無しさん:2006/11/18(土) 19:54:00
Microsoft Macro Assembler 8.0 (MASM) パッケージ (x86 用)
http://www.microsoft.com/downloads/details.aspx?FamilyID=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja


187 :デフォルトの名無しさん:2006/11/21(火) 21:31:00
ハンドアセンブルっておもしろいな。ちゃんとプログラムが動いたときの
快感度は他の言語の比にならないぜ。

188 :デフォルトの名無しさん:2006/11/22(水) 00:41:49
んじゃ、一生やってれば?
でもそれ、ちゃんと動いていると思ってるの自分だけかもよ。

189 :デフォルトの名無しさん:2006/11/22(水) 00:49:13
ご一緒にポテトはいかがですか?

190 :デフォルトの名無しさん:2006/11/22(水) 11:11:59
>186
げー、VC2005必須かよ…

191 :デフォルトの名無しさん:2006/11/23(木) 11:24:17
Express Editionて、Freeで配ってる(配ってた?)だろ?

192 :デフォルトの名無しさん:2006/11/23(木) 12:35:20
でもアセンブラの為にVC++入れるのアホらしくね?

193 :デフォルトの名無しさん:2006/11/23(木) 14:47:37
手動で解凍したらFL_ml.exeが出てきたが、
これって使えるん?

194 :デフォルトの名無しさん:2006/11/24(金) 00:43:01
.pos0x100
irmovl$15,%ebx
rrmovl%ebx,%ecx
loop:
rmmovl%ecx,-3(%ebx)
addl%ebx,%ecx
jmploop

このアセンブリプログラムをアセンブルすると、どんなバイト列が出てくるか。
y86シミュレータ

195 :デフォルトの名無しさん:2006/11/24(金) 01:11:53
質問はなんですか?


196 :デフォルトの名無しさん:2006/11/24(金) 01:45:20
なんかもうアセンブラがどうこう以前に日本語でおk、な質問が多いな

197 :デフォルトの名無しさん:2006/11/24(金) 02:00:36
>>193
ml.exe にリネームすれば普通に使える。
ただしそれだけじゃリンカもライブラリもないから
本当に「アセンブル出来るだけ」になるがな。

198 :デフォルトの名無しさん:2006/11/25(土) 15:06:41
>>197
d。後で遊んでみる。

199 :デフォルトの名無しさん:2006/11/30(木) 13:52:24
前回は私の回答に答えて頂きありがとうございました。
今回もまた質問させてください。

mov edi, offset var1(もしくはvar2)
mov al, '-'
mov ecx, lengthof var1(もしくはvar2)
cld
repne scasb
jz(もしくはjnz)

と、言う上のコードを使って、C++などでは
□if(var1 < 0)
□□if(var2 < 0)
□□else
□else
□□if(var2 < 0)
□□else
と現すifelse文を作りたいのですが、どうjzやjnzを使えば良いのか思い浮かびません。
上のifelse文使って、ASCIIで入力された数字の足し算をしたいのですが、
正数同士の足し算はできるのですが、負数同士、もしくは片方が負数でもちゃんと答えが出るようにしたいのです。
取りあえずはifelse文を作りたいです。

助けて頂けるとありがたいです。

200 :デフォルトの名無しさん:2006/11/30(木) 16:46:50
手元にあるIA-32インテルアーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル中巻と
にらめっこして考えてくれ。

REPNE SCASBで終了する時の条件は2つ。
ECX=0になった時かZF(ゼロフラグ)が立った時。
ALの内容が見つかればZF=1、見つからなければZF=0になるんだろう?

REPNE SCASB
JNZ L1
見つかったときの処理
JMP LE
L1:
見つからなかったときの処理
LE:

ここまででif〜elseは表せると思うけど。
68系とその派生系の石しか扱わないから間違ってるかもだけど。

201 :199:2006/12/01(金) 10:18:51
ありがとうございました。
何とかIfelse文は出来ました。
ですが、現在は片方が負数の足し算に悩んでいます。

正数同士なら
   mov bh, 0
   mov ecx, 70
   mov esi, 69
   mov edi, 70
addition:
   mov ah, 0
   mov al, var1[esi]
   add al, bh
   aaa
   mov bh, ah
   or bh, 30h
   add al, var2[esi]
   aaa
   or bh, ah
   or bh, 30h
   or al, 30h
   mov sum[edi],al
   dec esi
   dec edi
   loop addition
   mov sum[edi], bh
と書けたのですが、片方が負数の時のも物が書けません。
もしvar1の値が負の数だったら、一度正数に直してvar2 - var1の形に直そうとしたのですが、
aasの使い方が分かりません。

助けて頂けると幸いです。

202 :デフォルトの名無しさん:2006/12/01(金) 14:40:56
AAA - アンパックBCDの加算結果ALを補正する。繰り上がりが発生するとAH <- AH + 1 CF=1 AF=1
AAS - アンパックBCDの減算結果ALを補正する。繰り下がりが発生するとAH <- AH - 1 CF=1 AF=1

ADDの時みたいに下桁からSUBしてってAASで補正してけばいいんじゃない?

203 :199:2006/12/01(金) 15:14:05
その方法で試してみたのですが、Var1の値を正数に直して、Var1>=Var2ならば正常な答えが出ました。
ですが、Var1<Var2の場合は答えがおかしくなります。
CMP、jmp、などを使って別の所に飛んでから別の計算式を書いた方が良いのでしょうか…。


204 :デフォルトの名無しさん:2006/12/06(水) 18:58:54
宿題です!

どのようなc言語プログラムをコンパイルすると、ここで示したアセンブラ言語のプログラムになるか
示せ。また、c言語プログラムとアセンブリ言語の対応関係を示せ。

と言う宿題を出されました。どなたか教えてください!
かなり初歩的なのかもしれませんが;

205 :デフォルトの名無しさん:2006/12/06(水) 19:00:30
>>204の続きです

fibo:
subu$sp,$sp,40
sw$31,32($sp)
sw$fp,28($sp)
sw$16,24($sp)
move$fp,$sp
sw$4,40($fp)
lw$2,40($fp)
beq$2,$0,$L3
lw$2,40($fp)
li$3,0x00000001# 1
beq$2,$3,$L3
j$L2
$L3:
lw$2,40($fp)
j$L1
j$L4


206 :デフォルトの名無しさん:2006/12/06(水) 19:01:16
>>205の続きです
$L2:
lw$3,40($fp)
subu$2,$3,1
move$4,$2
jalfibo
move$16,$2
lw$3,40($fp)
subu$2,$3,2
move$4,$2
jalfibo
addu$3,$16,$2
sw$3,16($fp)
lw$2,16($fp)
j$L1
$L4:
$L1:
move$sp,$fp
lw$31,32($sp)
lw$fp,28($sp)
lw$16,24($sp)
addu$sp,$sp,40
j$31

207 :デフォルトの名無しさん:2006/12/07(木) 00:44:02
質問はなんですか?

208 :デフォルトの名無しさん:2006/12/07(木) 10:40:36
今CASLの授業をやっているんですがメインルーチン?が自力で作れません。よかったら電卓のプログラムなんですが作っていただけますか!?
画面から3桁以内(符号なしビット)の2つの数字と、1つの演算子を入力して四則演算を行い、結果を画面に表示するプログラムです。
演算子は+, -, *, /を使います。

よろしくお願いします。

209 :デフォルトの名無しさん:2006/12/07(木) 10:49:26
質問はなんですか?

210 :デフォルトの名無しさん:2006/12/07(木) 11:05:04
208です。
どうやって作ればいいのかがわからないんですが。
例えば、GR1に何を入力したかをチェックするやりかたとかです。
CAP GR1、MOJI
JZE TADASII

正しいときにジャンプする
正しくなければ通過とかの部分です。
わかりにくくてすいません。

211 :C++プログラマ:2006/12/07(木) 21:28:30
ターゲット:Pentium4 2.7GHz
コンパイラ VS2005
現在オセロのプログラムを製作しているのですが
アセンブリ言語レベルの事で疑問がでたので教えてください
白石:-1,黒石:1としたとき配列の添字を得るために白石:0,黒石:1
と言う数字を得たいのです
ここでxを石に対応する数字が格納させた変数だとして
(1+x)/2
という計算を行わせて数字を得るのと
if(x == 1){}else{}
で条件分岐させるのではどちらの方が高速なのでしょうか?
あと現在の打ち手を保持している変数を反転させるために(白石を-1としているのはこのためです)
turn *= -1
としているのですがimul命令は遅いとかいう話を聞きました
これはif文で条件分岐させて代入した方がいいのでしょうか?

212 :それ以前にスレ違いなんだけどね:2006/12/07(木) 21:58:55
>>211
小手先の愚作を労せず、最適化はコンパイラに任せなさい。
上の条件なら例えばif (x > 0) {...; } else {...;}とすれば適当なコードを出してくれるだろうし、
下の処理ならturn *= -1と書かずにturn = -turnすればよかろう。
尤も、その程度の内容だとどのように書いたところで処理速度が問題になるとも思えないが。
#もし本当に処理速度が問題になるのなら、プロファイリングとアセンブラ出力を読む作業は必須だ。

213 :211:2006/12/07(木) 22:05:41
ありがとうございます、最適化はコンパイラに任せます
アセンブラのコードは読めないので、これから勉強してみます
スレ違いすいませんm(_ _)m

214 :デフォルトの名無しさん:2006/12/07(木) 23:04:15
ビットフィールド使って、最初から白=0、黒=1を得られるようにしとけばいいんじゃない?
MSXとかCPUが極度に貧弱なマシンでもないかぎり、気にするような事じゃ無いとは思うけど。

215 :211:2006/12/08(金) 00:13:37
ビットフィールドははじめて知りました
書き換えてみます
ありがとうございます

216 :デフォルトの名無しさん:2006/12/08(金) 14:49:09
ラベルってプログラムのはじめから数える番地なの?
それとも0から数える番地なの?
↓のソース見るとラベルを参照するときラベルに現在地を足してるみたいなんだけど・・・
ttp://wiki.osdev.info/index.php?%BE%A1%BC%EA%A4%CB%CF%A2%BA%DC%2F16BitOS%BA%EE%A4%EA%2F1#content_1_10

217 :デフォルトの名無しさん:2006/12/08(金) 18:27:51
どの部分?

218 :デフォルトの名無しさん:2006/12/08(金) 18:39:19
>>216
質問は日本語で頼むよ。
マジメな話、あんた自分が書いたその文章、自分以外の他人が読んで意味がわかると思うか?

エスパーを期待しても無駄だよ。
ここはムーの投書欄じゃねえからな。

219 :たくや ◆TakUyA81FM :2006/12/08(金) 18:42:53
db 0eah;
dw process
dw 60h
とか
mov ax,60h
mov ds,ax
mov si,mes
processとかmesのアドレス指定で0600h分足されてる気がするんだけど・・・
もしかして勘違い?

220 :デフォルトの名無しさん:2006/12/08(金) 19:01:00
何がわからんのかわからんが、ひょっとして開始アドレスが0000:0000だと思ってるのか?

221 :デフォルトの名無しさん:2006/12/08(金) 19:05:34
なんで0600h分足されてるのかがわからないです

222 :デフォルトの名無しさん:2006/12/08(金) 19:08:24
だからお前の日本語の方がわからんてw

223 :デフォルトの名無しさん:2006/12/08(金) 19:15:41
>>221
どういう処理を行ってる(と思う)のか、ソースを順に説明してみてくれないか?
とりあえず、おまえさんがどこで思い違いをしているのか理解できんとエスパーでも無い限り誰も回答できんと思うよ

224 :デフォルトの名無しさん:2006/12/08(金) 19:31:50
割り込み禁止にして
DFをクリアして
スタックを使えるように07c00hにポインタを置いて
siに7c00hを入れて
dsとesを0にして
割り込み許可

07c00hから256バイト分、00600hに転送

0600h:processにジャンプ ←ここの0600hが何で必要なのかがわからない

dsに0600hを入れる
siにmesのアドレスを入れる

ds:siの1バイト分の内容をalに入れる
siのアドレスを1バイト分ずらす

alが0なら終了

siの内容をスタックに入れる
バイオスコールでディスプレイにalの文字を表示
スタックから取り出したデータをsiに入れる


225 :デフォルトの名無しさん:2006/12/08(金) 19:36:20
ds:siの1バイト分の内容をalに入れる に戻る

226 :デフォルトの名無しさん:2006/12/08(金) 19:41:53
訂正

0060h:processにジャンプ ←ここの0060hが何で必要なのかがわからない

dsに0060hを入れる


227 :デフォルトの名無しさん:2006/12/08(金) 20:10:36
わからんな。farジャンプがわからんわけでも無さそうだし、コピーしてるのは理解してるようだし。何がわからんのかわからん。
コピーやジャンプ自体が不要とかいうんだったらまだ質問の意図が理解できるんだが。

>←ここの0060hが何で必要なのかがわからない
何で不要だと思うんだ?
それを無くしたらどうなると思う?

228 :デフォルトの名無しさん:2006/12/08(金) 20:31:52
無くしたらどうなるのかわからないです
jmp processじゃあだめなんですか?

229 :デフォルトの名無しさん:2006/12/08(金) 20:40:51
>07c00hから256バイト分、00600hに転送
これが何をコピーしているか具体的にわかってるよね?

230 :デフォルトの名無しさん:2006/12/08(金) 20:44:31
このソース全部をコピーしているんですよね?

231 :デフォルトの名無しさん:2006/12/08(金) 20:58:44
BIOSがフロッピーのプログラムをメモリの07c00hに置いて
次に読み込むプログラムをメモリの07c00hに置くために
メモリの00600hに位置を変えるんですよね?

processとかの位置も変わるんですよね?
でも、jmp processじゃあprocessには飛べないんですか?

232 :デフォルトの名無しさん:2006/12/08(金) 21:14:23
0060h:mesもなんで0060hが必要なのかわからないです

233 :デフォルトの名無しさん:2006/12/08(金) 21:28:31
>このソース全部をコピーしているんですよね?
ソースというかコンパイル後のバイナリね。

>BIOSがフロッピーのプログラムをメモリの07c00hに置いて
>次に読み込むプログラムをメモリの07c00hに置くために
>メモリの00600hに位置を変えるんですよね?
そう。

>processとかの位置も変わるんですよね?
>でも、jmp processじゃあprocessには飛べないんですか?
>0060h:mesもなんで0060hが必要なのかわからないです

jmp processだとCS:processにジャンプする事になるぞ。
コピー先(0060:process)に移動するにはfarジャンプじゃないと。
このコードはprocess以前は07c00以降、process以前は直前にコピーされた00600以降のアドレスで動く(far Jumpするからね)。
ラベルの位置は先頭を0としたオフセットになるから先頭を0060:0000にしないとmesの位置とかがずれてくる。

234 :デフォルトの名無しさん:2006/12/08(金) 21:53:54
ttp://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html
↑でソースを見ながらニーモニックの意味を調べてちょっと勉強してたんですけど
jmpのセグメントってCSなんですかぁ
ラベルの位置もよくわかっていませんでした
CSの動きについてもあまりよくわかってないんでちょっと勉強してきます・・・
ありがとうございました

235 :デフォルトの名無しさん:2006/12/08(金) 22:41:23
もしかして86系の石ってリロケータブルなコード書けない?
・・・んなわけないよなぁ。

236 :デフォルトの名無しさん:2006/12/10(日) 00:26:17
>>235
完全にとは云わないが、書ける筈だけど。
セグメント・レジスタも有ることだし。

jump命令は、普通セグメント内ジャンプしか
使わないだろ。

237 :デフォルトの名無しさん:2006/12/13(水) 21:32:51
C言語でインラインアセンブラを使って動作中のプログラムの
グローバル変数やstatic変数が格納されてる定数領域の
開始アドレスとサイズを取得したいんだけど、可能ですか?
どなたか知恵をお貸しください。

ちなみにスタック領域のアドレスとサイズの取得は
以下のコードでできました。
NT_TIB* getTIB(void) {
NT_TIB* pTib;
__asm {
mov eax, dword ptr FS:[18H];
mov pTib, eax;
}
return pTib;
}

238 :デフォルトの名無しさん:2006/12/13(水) 22:18:47
>>237
C言語つーのはgccのってことでいいんかい?

239 :237:2006/12/13(水) 22:27:30
>>238
はいそうです

240 :237:2006/12/13(水) 22:49:56
連投すんません。
gccでもVCでもWindows上で動作するんであればおkです。

241 :デフォルトの名無しさん:2006/12/14(木) 21:13:48
超低レベルな質問です
同じ内容の数値計算をさせた場合Fortranとアセンブラじゃどちらが速いですか?

242 :241:2006/12/14(木) 21:15:02
アセンブラじゃなくてアセンブルですね・・・

243 :デフォルトの名無しさん:2006/12/14(木) 21:19:56
アセンブリ:アセンブル:アセンブラ
=プログラミング言語:コンパイル:コンパイラ

244 :デフォルトの名無しさん:2006/12/14(木) 21:28:47
>>241
本質的にはアセンブラが負けることはないが、
実際にはそうもいかないのが難しいところ。
結局はコードを書く人の能力による。

245 :デフォルトの名無しさん:2006/12/14(木) 21:36:14
つーかアセンブラで数値計算なんてやりたくねーな

246 :デフォルトの名無しさん:2006/12/14(木) 21:39:36
アセンブラの宿題質問スレ
コンパイラの宿題質問スレ

247 :デフォルトの名無しさん:2006/12/14(木) 21:42:13
このスレ見直したらやっぱ誤用が多いね。

248 :デフォルトの名無しさん:2006/12/14(木) 21:44:40
言っとくが、スレタイのアセンブラは
アセンブリ言語のことだからな。

249 :デフォルトの名無しさん:2006/12/15(金) 00:14:46
事務計算だとアセンブリ言語使った方がマシだったりすることもあるよな。
石によるけどさ。

250 :デフォルトの名無しさん:2006/12/15(金) 11:19:28
宿題がサッパリ分からないのでお願いします。CPUはARMです。

digitsDCB"1024",0
のように0で終わっている数字だけの文字列を見て、それで表される10進法の数値と
同じになるデータを作ってbinary番地に入れるプログラムを書け。今の例ではそのデータは2進数としては
100 0000 0000
である。このような変換は10進2進変換と呼ばれる。そのプログラムを使って
digitsDCB"123456789",0
のときにbinary番地に入る値を16進表示で答えよ。
(ヒント)"1024" = '1', '0', '2', '4' = 0x31, 0x30, 0x32, 0x34
であるから文字'1'から数値1を得るためには、その文字のコードと0x0fのandをとればよい。また、
1024 = 1*103+0*102+2*10+4 = ((1*10 + 0)*10 + 2)*10 +4
であるから、1文字を読むたびに、その文字コードから数値を作り、
それまでに計算しておいた値(上記の最後の式の括弧内の値)を10倍したものに加えればよい。
int result = 0; int index = 0;
while ( (byte b = digits[index++]) != 0 ){
result = result*10 + (b & 0x0f);
}
binary = result;

251 :デフォルトの名無しさん:2006/12/15(金) 19:59:32
わからないってどういう事?
ヒントの所に回答そのものが日本語で書いてあるのに。

252 :CASL:2006/12/15(金) 22:18:59
http://e-learning.inf.ie.kanagawa-u.ac.jp/e-learning/eCASL/index.html
を完成してほしいのは私だけ?

253 :デフォルトの名無しさん:2006/12/16(土) 01:37:40
>>237
ifで使われているptr_SE[i].Characteristicsのフラグについては↓に書いてある
ttp://www.geocities.jp/winapi_database2/special/2001_10_11/page7.html
あと、const宣言は.rdata、static宣言は.data(初期値あり)、.bss(初期値なし)に配置されたと思う‥‥
って、全然アセンブリ言語じゃないや。

#include <stdio.h>
#include <windows.h>

int main(int argc,char *argv[])
{
 PIMAGE_DOS_HEADER ptr_MZ;
 PIMAGE_NT_HEADERS ptr_PE;
 PIMAGE_SECTION_HEADER ptr_SE;
 int i;

 ptr_MZ = (void*)GetModuleHandle(0);
 ptr_PE = (void*)ptr_MZ + ptr_MZ->e_lfanew;
 ptr_SE = (void*)ptr_PE + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + ptr_PE->FileHeader.SizeOfOptionalHeader;

 for(i = 0 ; i < ptr_PE->FileHeader.NumberOfSections ; i++) {
  if(!(ptr_SE[i].Characteristics & IMAGE_SCN_MEM_WRITE)) {
   printf("Address: %p\n",ptr_MZ + ptr_SE[i].VirtualAddress);
   printf("Size: %d\n",ptr_SE[i].Misc.VirtualSize);
  }
 }
 return 0;
}

254 :237:2006/12/16(土) 14:10:03
>>253
レスありがとうございます。
まさにコレのようです。

当方の環境(Visual Studio 6.0)ではエラーがでるので、
修正しつつ参考にさせて頂きたいと思います。

数日間探しても見つからなかったのでとても助かりました。
ありがとうございます。

255 :250:2006/12/18(月) 23:55:11
>>251
それをプログラムでどう書けばいいのか分からないんです・・・

256 :デフォルトの名無しさん:2006/12/19(火) 22:23:32
MASM32を入れて、アセンブラの勉強もしてみようとおもったのですが
良い入門書は無いですか?
高級言語プログラマのためのアセンブラ入門と
http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.htmlのページを
見ながら勉強しようと思ったのですが、高級言語プログラマのためのアセンブラ入門は
なんか辞典みたいな感じで、アセンブラのページを読むと
なんとなくわかるにはわかるけど、なんでセグメント全部同じ名前にしてんだろ
とか、21hみたいな命令の意味とか、よくわからないのがやっぱ多いです。
で、やっぱり入門書を買おうと思うのですが、お勧めを教えてください。
CPUはIntel(R)Celeron(R)Mです。

257 :デフォルトの名無しさん:2006/12/20(水) 00:38:54
>>256
>なんでセグメント全部同じ名前にしてんだろ
EXEファイルでは無くて、COMファイル作る為?
>21hみたいな命令
「int 21h」これは、MS-DOSのシステム・コールを
呼出す為だと思う。

258 :デフォルトの名無しさん:2006/12/20(水) 19:38:40
     LD    GR2,A
LOOP SUBA  GR2,B
     LAD   GR1,1,GR1
     CPA   GR2,B
     JPL   LOOP
     RET
A    DC   200
B    DC   10

caslで上みたいな割り算をした時、割り切れる場合
GR1が19までいくと終了してしまうんですがどうすればいいでしょうか?
金種計算みたなのを作りたいんです

259 :デフォルトの名無しさん:2006/12/21(木) 00:39:00
>>258
 「JPL LOOP」の「JPL」が悪いみたいだけど。
 JPLって、Jump largeの意味?
 「JPLE LOOP」とすべきでは。
 JPLEは、Jump large or equal。

260 :258:2006/12/21(木) 01:04:18
JPLEって言う命令は無いみたいなんですが…
エラーが出てきます

261 :デフォルトの名無しさん:2006/12/22(金) 00:19:46
>>258
ゴメン、一応考え方として書いただけで、
CASLはやった事がない。
無い場合は、その命令と等価となるような
処理に作り換えるとか。

262 :デフォルトの名無しさん:2006/12/31(日) 23:33:16
宿題でなくてすみませんが、質問です。

とりあえずi386以降のニーモニックは分かるのですが、MASMの擬似命令とか
宣言の使い方を例題で詳しく説明したサイトや本のお勧めはありますか?

セグメントがどうこうとか考えずにNASMで楽してたので、MASMは全然分かりません。

263 :デフォルトの名無しさん:2006/12/31(日) 23:46:41
ttp://reef.path.ne.jp/%7Ehero/hero.htm

264 :デフォルトの名無しさん:2006/12/31(日) 23:51:18
>>263 サンクス



265 :デフォルトの名無しさん:2007/01/02(火) 20:21:24
今累乗のプログラムを作成しようとしているのですが,うまく動作しません.
具体的にはx^nをやろうとするとx^2の結果しか返ってきません.
以下のアセンブリコードなのですが,どこか間違っているでしょうか?
SPARCを使用しています.
よろしくおねがいします.(3^4をやろうとしているが,9が帰ってきてしまう)
mov 3,%l0
mov 4,%l1
mov %l0,%o0
mov %l0,%o1
loop:
call .umul,0
nop
dec %l1
cmp %l1, 0
bne loop
nop

266 :デフォルトの名無しさん:2007/01/02(火) 21:25:20
>>265
Sparc 知らんから間違いの指摘はできないけど、
デバッガでステップ実行してみればいいんじゃないか?

267 :デフォルトの名無しさん:2007/01/02(火) 22:48:06
>>265
.umulが%o0 * %o1の結果を、%o0 %o1のどちらかに代入してると思うのだが、
もう一方も何かしらの値が代入されているということはないかい?

あと、それだとxにxをy回掛けることになって、x^(y+1)になると思うのだが?

268 :265:2007/01/02(火) 23:55:07
>>267
どうもアドバイスありがとうございます.
指摘された通り%o1が.umulを実行した後に0になっていたのが原因でした.
かける回数も直せました.
本当にありがとうございました.

269 :デフォルトの名無しさん:2007/01/03(水) 22:03:30
以下のURLにうpったプログラムが動作しませんorz
SPIMでシュミレーションしてるのですが…
解決策があればご伝授ください。

プログラムソース: http://www.uploda.org/uporg641230.asm

270 :デフォルトの名無しさん:2007/01/03(水) 22:39:34
どう動かないんだよ。

271 :デフォルトの名無しさん:2007/01/03(水) 23:45:22
とりあえずダウンしてみたけど
漏れには必要無いことが分かったので消した

272 :デフォルトの名無しさん:2007/01/04(木) 01:26:18
>>269
俺ならば、「addi」みたいな命令は、registerを初期化してから
使用するけど。


273 :269:2007/01/04(木) 02:01:06
ありがとうございます。

なんか__startに異常があるみたいなメッセージが出てくるのですがそれがよくわかりません。
loadすら出来ないです。

274 :デフォルトの名無しさん:2007/01/04(木) 03:48:38
じゃあそのメッセージをここに貼るとかそういうことを思いつきませんか


275 :デフォルトの名無しさん:2007/01/04(木) 05:19:40
標準のトラップハンドラを読み込んでるからだな。
トラップハンドラを読み込まないか、
__startではなくmainにすれば良いと思うよ。

276 :269:2007/01/05(金) 03:30:24
>>274-275
ありがとうございます。
無事に実行できました。

ものすごく低レベルな質問をしているのかもしれませんが、
プログラムのmain以下14行目の

lw $t4, 0($a2)で、

その上のaddの行実行前に$t8に00000000、$gpに10008000が入ってる状態です。
addにより$a2にはその和の10008000が入るというのは理解できるのですが、
その後のlwの行の操作で
$t4に00000063が代入されるのが何故か分かりません。

どうかご教授ください。よろしくお願いします。
(プログラム >>277-278)

277 :269:2007/01/05(金) 03:32:24
プログラム前半部分
.data0x10008000
.word100
.word99
.word98

(以下.word 0まで続きます)

.text
.globl__start
__start:
addi$t0, $zero,0
addi$t2, $zero,100
addi$t7, $zero,4
addi$t9, $zero,1
sub$t0, $t2, $t9
loopi:
slt$t3, $t0,$zero
bne$t3, $zero,progend
addi$t1, $zero,0


278 :269:2007/01/05(金) 03:32:53
後半部分
loopj:
slt$t3, $t1,$t0
beq$t3, $zero,loopiend
mult$t1, $t7
mflo$t8
add$a2, $gp, $t8
lw$t4, 0($a2)
add$a3, $a2,$t7
lw$t5, 0($a3)
slt$t6, $t5, $t4
beq$t6, $zero,loopjend
sw$t4, 0($a3)
sw$t5, 0($a2)
loopjend:
addi$t1, $t1, 1
jloopj
loopiend:
sub$t0, $t0, $t9
jloopi
progend:

279 :デフォルトの名無しさん:2007/01/05(金) 03:39:05
これだろ

.data0x10008000
.word100
.word99


280 :269:2007/01/05(金) 03:53:20
>>279
申し訳ないです。。さっぱり…
なぜ63が出てくるのかという点から掴めませんorz

加えて、質問箇所の下のadd $a3. $a2, $t7では
$a2に10008000, $t7に4が入ってるので$a3は10008004になったのですが
その下のlwで$t5に何故63が入るのでしょう…?

281 :デフォルトの名無しさん:2007/01/05(金) 09:35:28
その63って16進数だろ、10進数に直せば99だ。

282 :269:2007/01/07(日) 07:15:25
何度もすみません。。
10008000の内容は64(100)だと思うのですが、
何故63が入るのでしょう…?

283 :デフォルトの名無しさん:2007/01/07(日) 07:37:14
>>282
1008004の内容が63(99)だから。

sw$t5, 0($a3)
$a2じゃないぞ、$a3だぞ?

284 :デフォルトの名無しさん:2007/01/07(日) 07:37:59
0が一個抜けたorz

285 :デフォルトの名無しさん:2007/01/08(月) 02:25:48
lw $t4, 0($a2)で、

その上のaddの行実行前に$t8に00000000、$gpに10008000が入ってる状態です。
addにより$a2にはその和の10008000が入るというのは理解できるのですが、
その後のlwの行の操作で
$t4に00000063が代入されるのが何故か分かりません。

286 :デフォルトの名無しさん:2007/01/08(月) 02:35:27
$t4に00000063が代入されたとき、10008000はいくつになってる?

287 :ふぃb:2007/01/11(木) 20:48:30
ご教授願いますm(_ _)m
MacOSでアセンブラを勉強し始めたのですが、再帰関数のところで
フィボナッチ数列の実装ができません・・・
CPUの名前がよくわからないのですが、↓こういう アセンブラです

.text
.align 2
.globl _fact
_fact:
# linkage area
mflr r0
stw r0, 8(r1)
mfcr r0
stw r0, 4(r1)
# create stack frame
stwu r1, -64(r1)
# action
cmpi cr7,r3,1
bgt cr7,CALL
li r3,1
b RET
CALL:
stw r3, 88(r1)
subi r3,r3,1
.....................

288 :デフォルトの名無しさん:2007/01/11(木) 21:19:27
CPUが分からないって?
???

289 :デフォルトの名無しさん:2007/01/11(木) 22:00:41
>287
PCの機種名でもアセンブラの名前でも良いから書いてみそ

290 :デフォルトの名無しさん:2007/01/12(金) 00:11:27
マック使いってみんなこんなレベルなんだろうか。
自分が使ってるマシンのMPUもわからないなんて・・・。

291 :デフォルトの名無しさん:2007/01/12(金) 00:27:58
機種名モデル名購入日OS名その他知らない香具師もかなりいる

292 :デフォルトの名無しさん:2007/01/12(金) 10:21:56
MacOSでのスタックフレーム処理を理解する or 再帰を諦めてループを使って実装する
どっちか好きな方を選んでくれ。

293 :ふぃb:2007/01/12(金) 13:45:18
>298
すみません。アセンブラはgccです。

>292
スタックフレーム勉強します><

294 :デフォルトの名無しさん:2007/01/12(金) 18:10:41
つーか自分の機種すら分からないのは開発やる人間として大問題

295 :デフォルトの名無しさん:2007/01/12(金) 18:24:56
PowerPCか何かかな?

296 :デフォルトの名無しさん:2007/01/12(金) 18:29:29
NASM

297 :ふぃb:2007/01/15(月) 13:08:49
自己解決しました。
すいません

298 :デフォルトの名無しさん:2007/01/18(木) 14:48:39
15-1 再帰的に階乗を計算するサブルーチンを作れ。(注: 階乗F(n) はF(n) = n × F(n − 1) で計算する。)
15-2 自分の作ったサブルーチンで計算できる最大のn を求められるようプログラムを改良し、n を求めよ。

FLOAT1 START
LD GR0,F
CALL EXT
ST GR2,SIGN
ST GR3,EXP
ST GR1,SIG
RET
EXT LD GR1,GR0
(1-1)
(1-2)
LD GR2,GR1
LD GR1,GR0


299 :続き:2007/01/18(木) 14:49:26
(2-1)
(2-2)
(2-3)
LD GR3,GR1
LD GR1,GR0
(3)
RET
F DC #7C00
SIGN DS 1
EXP DS 1
SIG DS 1
END
16-1 (1-1),(1-2) を埋めよ。
16-2 (2-1),(2-2),(2-3) を埋めよ。
16-3 (3) を埋めよ。


初心者です。よろしくおながいします。

300 :デフォルトの名無しさん:2007/01/18(木) 17:52:20
>>298
初心者でも何でもいいけど、処理系(CPU,アセンブラ)くらい書かないとエスパーしか答えられないよ。

301 :デフォルトの名無しさん:2007/01/18(木) 21:06:16
これは多分CASLだな。
問16は問題文が欠けてないか?
せめて何を目的にしたプログラムかは書くべきだと思うんだが。

302 :デフォルトの名無しさん:2007/01/19(金) 02:27:35
F CPL GR1,=2 ;階乗サブルーチン15-1 引数:GR1 戻値:GR0
JMI FRET1 ;入力が0または1ならば、1を返す
SUBL GR1,=1
CALL F ;再帰呼び出しでF(n-1)を求める
ADDL GR1,=1
PUSH 0,GR1 ;GR1とGR2を待避
PUSH 0,GR2
LD GR2,GR0
FMUL SUBL GR1,=1 ;乗算ループ
CPL GR1,=0
JZE FEND
ADDL GR0,GR2
JUMP FMUL
FEND POP GR2 ;GR1とGR2を復帰
POP GR1
RET
FRET1 LD GR0,=1
RET


303 :ゆー:2007/01/21(日) 18:21:22
ARMアセンブラについて質問です。

CMNは符号を反転させて比較するものですよね?
たとえば r0番地に3、r1番地に-5 があるとします。
そして

CMN r0,r1

と書いたらどっちの符号が反転されるんですか?
両方されたら意味ないですよね?
お願いします!!!

304 :デフォルトの名無しさん:2007/01/21(日) 18:35:32
>>303
ヒント:ステータスレジスタ

305 :ゆー:2007/01/21(日) 18:40:29
N Z C V
のことですか?あまり詳しくないのでよくわかりません・・・

306 :デフォルトの名無しさん:2007/01/21(日) 19:50:47
ARMアーキテクチャリファレンスマニュアルが無料で配られてるから
それをもらってきてよく読むように。

まず、CMPとCMNは比較命令だから、オペランドに指定したレジスタの内容は変化しない。
そして、CMNでも2番目のオペランドは符号反転しない。
CMPが1番目から2番目を減算した結果で条件コードフラグを変化させる命令なら
CMNは1番目に2番目を加算した結果で条件コードフラグを変化させる命令。
CMP基準でみると動作が「1番目から符号反転させた2番目を減算させた結果で変化してる」ように見えるだけ。


307 :ゆー:2007/01/21(日) 19:59:32
どこで配られてるんですか?
そういうことですか!
ありがとうございます。

308 :デフォルトの名無しさん:2007/01/21(日) 20:09:05
>>307
http://www.jp.arm.com/document/manual/mdl.cgi

309 :ゆー:2007/01/21(日) 21:11:22
ダウンロードしました!!!
ありがとうございます。

310 :ゆー:2007/01/21(日) 22:58:25
すみません。
MOVとMOVSの違いがいまいちわかりません。
マニュアル見てもよくわかりません↓
お願いします><

311 :デフォルトの名無しさん:2007/01/22(月) 01:41:39
Sの有無はステータスレジスタを更新するかどうか。
今アーキテクチャリファレンスマニュアルひけないんで代わりのポインタ張っとく。
ttp://www.bomber.co.jp/chaola/docs/ARM/inst_ARM.html#5.1

MOVはシフト代わりに使えるから、その用途で使ったとき一緒に
ステータスレジスタを更新して欲しい場合がある。そのときMOVSを使う。

312 :デフォルトの名無しさん:2007/02/12(月) 16:42:41
アセンブラの条件分岐命令で
BLEとBGTの意味がわかりません。
どういう意味でしょうか?

313 :デフォルトの名無しさん:2007/02/12(月) 16:57:12
>>312
ニモニックセット依存。
恐らくは、前者はbranch if (register) less than or equal to (operand)の意で
後者はbranch if (regster) greater than (operand)の意だろう。

314 :デフォルトの名無しさん:2007/02/12(月) 17:12:27
ありがとさん

315 :デフォルトの名無しさん:2007/02/15(木) 15:09:01
SEP-3についての質問です。
C言語のprintf()は、printf("10\n")ともprintf("%d\n#",10)とも書くことが
できる。つまり、引数の数はいくつあってもよい。このようなサブルーチン
を実現するには、サブルーチンprintfをどのように記述し、どのようにして
呼び出せばよいだろうかっていう問題です。
よくわかりません。

316 :デフォルトの名無しさん:2007/02/15(木) 15:29:46
#include <stdarg.h>

int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);


317 :デフォルトの名無しさん:2007/02/15(木) 15:51:24
315追記です
アセンブラ言語でどのように書けばよいかっていう問題です。

318 :デフォルトの名無しさん:2007/02/15(木) 16:11:42
スタックに積まれている情報を変換子(%何とか)に対応させてアクセスするんでしょ。
vsprintf(wk,format,int1,int2,int3) なら、後ろからpush5回、call だから、スタックポインタの
すぐ後は復帰アドレス、その次からwkのポインタ、formatのポインタ。format解析の中で
%何とかに出会うたびにSP+2ワード+nワードをアクセスすればいい。

319 :デフォルトの名無しさん:2007/02/15(木) 16:49:57
#もう〜
#つまんなすぎっ!


320 :デフォルトの名無しさん:2007/02/19(月) 11:40:14
お願いします。

68HC11で8BIT、MPUなのですが、
逆アセンブラがありません。
ダウンロードサイトに、DOS環境で動くものはあるのですが、
使い方がわかりません、
アセンブルする方法教えてください、初心者ですみません


321 :デフォルトの名無しさん:2007/02/19(月) 12:34:45
>>320
初心者だから知らなくても仕方ないが、逆アセンブラがなくてもアセンブラがあればアセンブルすることは可能だ

322 :デフォルトの名無しさん:2007/02/19(月) 13:40:24
>>321
レスありがとうございます

プログラムが16進数で書いてあり、読める形にしたいのですが
どうしたら、ふるいMPUなのでコード表もありません、
ウインドウズ環境で動く逆アセンブラのソフトないですかね?

323 :デフォルトの名無しさん:2007/02/19(月) 14:21:22
ベクターにこのようなソフトありますが
使い方わかりません
http://www.vector.co.jp/soft/dos/prog/se358557.html

お願いします

324 :デフォルトの名無しさん:2007/02/19(月) 20:16:15
>>322
> どうしたら、ふるいMPUなのでコード表もありません、
英語でいいならフリースケール・セミコンダクタの英語サイトに行けば無料配布してるぞ。
ProduntsからHC11ってのを選べばいろいろ出てくる。

325 :デフォルトの名無しさん:2007/02/19(月) 20:17:10
Productsな。cが横にこけた。

326 :デフォルトの名無しさん:2007/02/20(火) 04:56:38
実行コードしか残ってないソフトを逆アセンブルして修整したい、とかそういう事情?
8bitのソフトなんてちっちゃいんだから、作っちゃったほうが手間要らないのでは?

327 :デフォルトの名無しさん:2007/02/20(火) 06:22:06
6809の正常進化版? 6809用だったら古いフロッピーに一式入っているんだが。
問題は、今時5.25"を読める環境がないことだなw

勉強がてら、自分で作るのお勧め。
なーに、バイナリモジュールを16進ダンプかHEXフォーマットかSフォーマットにしてやって、
それを入力に使えばスクリプト形言語でちょちょいのぱーだよ。

328 :デフォルトの名無しさん:2007/02/20(火) 13:47:34
>>326
>>327
ご指導ありがとうございます
初心者すぎて、ちょっと無理みたいです、
データアップロードしますので、どなたかお願いします

329 :デフォルトの名無しさん:2007/02/20(火) 18:57:41
まて、今時初心者が何で6811なんか触る?

330 :デフォルトの名無しさん:2007/02/21(水) 03:11:50
>>328
アップロードします
http://up.kabubu.net/cgi/up2/upload.php
ファイル名 ”68hc11バイナリ
よろしくお願いします。


331 :デフォルトの名無しさん:2007/02/21(水) 03:15:42
すいません
ファイル名”バイナリーファイル68hc11”でした

332 :デフォルトの名無しさん:2007/02/21(水) 20:36:21
Disassembler拾ってきて試してみたが
これってプログラムじゃなくて何かのデータなんじゃ・・・?

333 :デフォルトの名無しさん:2007/02/22(木) 00:19:17
確かに、3/4はデータっぽいね。

334 :デフォルトの名無しさん:2007/02/22(木) 02:57:35
>>332
>>333
どこかにアップしてもらえませんか?
よろしくお願いします。

335 :333:2007/02/22(木) 06:43:42
アップも何も、私ゃダンプ眺めただけだがね。
32KBのうち、オフセット0x1d1cから0xffが集中して入っているし、
オフセット0x20e0からは3バイト+1-2バイトのタグ型データ構造に見えるし、
他にもいかにもデータって感じでバイト列が並んでいるがね。

336 :デフォルトの名無しさん:2007/02/22(木) 13:59:22
一応RTSを中心にしてその前後を見て回ったけど、意味のあるコードが見つからなかった。
全部Bxxとかの条件分岐だけで飛んでたりしたら嫌だなぁ。
眺めてるとだんだん無圧縮のスプライトパターンデータとかに見えてくる。
これの出所ってどこ?

337 :デフォルトの名無しさん:2007/02/23(金) 02:33:30
>>336
ボッシュの8ビットCPUです。
なんとかなりませんか?

338 :デフォルトの名無しさん:2007/02/23(金) 02:36:33
経緯も何も判らんでなんとかなりませんか言われても、なんともなりませんがな。

339 :デフォルトの名無しさん:2007/02/23(金) 03:00:02
ECUのROMか?

340 :デフォルトの名無しさん:2007/02/23(金) 03:29:25
ECU?車のコンピュータみたいですが。
エンジンコントロール用みたいです、

341 :デフォルトの名無しさん:2007/02/23(金) 09:22:12
だとしたら暗号化ぐらいされてるかもよ。ROMから逆アセンブルされることも想定して。
もしそうなら暗号化キーがなきゃお手上げ。

342 :デフォルトの名無しさん:2007/02/23(金) 12:29:26
っていうか、昔から勘違いしてる奴が多いけど(PC-8001の例の事件の影響だろうけど)
逆アセンブルしたソースを人が読める形に修正する、なんて殆どの場合不可能だよw

可能な場合なんてむしろ例外的。
それは人的資源の質や量の問題と無関係に、ね。

343 :デフォルトの名無しさん:2007/02/23(金) 12:53:31
いや寧ろ、逆アセンブルしたものが読めるようになってもハード構成やOSの仕様などが判らんとお手上げなケースが多いわけで。

>>337
エンジンコントロール用と言ったって、アクセル開度制御しかしないのと空燃比から加給器の制御までするのとでは全然違うわけだが。
少なくとも可読文字で数字が並んでたりするので、自分でダンプくらい眺めなさいよ。

344 :デフォルトの名無しさん:2007/02/23(金) 13:03:09
こことかどうよ

【チューン】ECUって難しいの?【仕上げ】
http://hobby9.2ch.net/test/read.cgi/car/1161445315/l50


345 :デフォルトの名無しさん:2007/02/24(土) 03:47:57
>>341
暗号キーは無いみたいです、

土日でイロイロ調べてみます、
お世話になるかもしれませんがよろしくお願いします

346 :デフォルトの名無しさん:2007/02/24(土) 18:09:35
犯罪の手助けをしろと言うのですね。

347 :デフォルトの名無しさん:2007/02/25(日) 05:15:02
経過報告します。
ハンドアセンブルしようとデータシート探しても見つからず、、、、




348 :デフォルトの名無しさん:2007/02/25(日) 17:33:23
>>346
何の罪になると言うんだ?

349 :デフォルトの名無しさん:2007/02/25(日) 18:54:54
>>348
逆アセ自体を禁止しているものであれば、、ということだろう。

350 :デフォルトの名無しさん:2007/02/25(日) 20:49:28
まあ普通契約で禁止されてるな。
少なくとも「是非やってください」と言うところはない。

351 :デフォルトの名無しさん:2007/02/26(月) 08:27:27
契約で禁止されてたって、契約違反にはなっても犯罪にはならないでしょ。
法律で禁止されてるのを破るのが犯罪。

352 :デフォルトの名無しさん:2007/02/26(月) 21:32:32
すごい斬新な発想だなw

353 :デフォルトの名無しさん:2007/02/26(月) 23:27:06
>>351
間違ってますよ、その認識。

354 :デフォルトの名無しさん:2007/02/27(火) 10:08:41
>>353
よければ詳しく。

355 :デフォルトの名無しさん:2007/02/27(火) 13:18:38
>>352,353が認識している犯罪の定義を知りたい。


356 :デフォルトの名無しさん:2007/02/27(火) 16:23:38
MIPSアセンブリを使って $f12にあるfloat型のインプットをASCII ストリングに変換する
関数を書きたいです。 $a0に変換されたストリングを保管するアドレスが渡されるという前提です。

357 :デフォルトの名無しさん:2007/02/27(火) 16:24:24
関数の名前はitofです

358 :デフォルトの名無しさん:2007/02/27(火) 18:08:50
逆アセンブラて、してはいけないのですか?
アセンブラの勉強のために、質問してただけなんですけど。
大丈夫ですよね、、、、、

で、結果報告です、
ハンドアセンブラしようとデータシート探しましたが見つからず
おまけに、68hc11ではなくて、6803?の疑問が浮上しました
1993年に68hc11発売されていましたか?教えてください

359 :デフォルトの名無しさん:2007/02/27(火) 18:42:22
>>358
1984年発表。

360 :デフォルトの名無しさん:2007/02/27(火) 23:17:56
問題
a=b+cを実現するためのアセンブラを示し、その横にマシン語を示すこと
ただし、aは100h番地、bは10h番地、cは20h番地に割り当てられているとする(hは16進数の表現の意味)

おねがいします

361 :デフォルトの名無しさん:2007/02/27(火) 23:26:29
>>355
まったく・・・
犯罪:罪を犯すこと。また、犯した罪。
罪:法律的・道徳的・宗教的な規範に反する行為。など
つまり、違法かどうかと犯罪とは必ずしも対ではない。

362 :デフォルトの名無しさん:2007/02/28(水) 00:11:29
おいおいアホだろw

激しくスレ違いだけど、契約って行為そのものが法律行為だから
これを履行しないことは違法性を構成するに決まってるじゃんw

っていうか、法的拘束力のない契約にそもそも何の意味があるんだよw

363 :デフォルトの名無しさん:2007/02/28(水) 00:38:19
>>362
契約は、必ずしも法律行為ではないよ。

364 :デフォルトの名無しさん:2007/02/28(水) 04:19:47
エンジニアが逆アセンブルするのは必然だが
素人が趣味で解析したがるのは迷惑。
自分のマニアっぷりを自慢するために解析結果を公開したりするし。


365 :デフォルトの名無しさん:2007/02/28(水) 04:23:00
>>358
心配ならメーカに問い合わせたら?
つーか、アセンブラの勉強のためなら逆アセンブルするのは無意味だよ。
前から何人も書いているけどコード部とデータ部の区別やら環境やらが判らんと意味を為さないし。
そんなことよりも、アセンブラの勉強のためなら素直にアセンブラで書かれたソースを読めばいいじゃない。

366 :デフォルトの名無しさん:2007/02/28(水) 05:45:41
>>360  こんなんでいいの?
;  a=b+cを実現するためのアセンブラを示し、その横にマシン語を示すこと
;  ただし、aは100h番地、bは10h番地、cは20h番地に割り当てられているとする
            CSEG
0000 2A1000    lhld    010h   ; b
0003 EB       xchg
0004 2A2000    lhld    020h   ; c
0007 19       dad    D
0008 220001    shld    0100h  ; a=b+c
000B         END

367 :デフォルトの名無しさん:2007/02/28(水) 15:07:48
>>366
ありがとうございます!

とても助かりましたー

98 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)