トップページ⇒tech
1001コメント328KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/18(水) 00:04:05
アセンブラの宿題ができないときに、
アセンブラ好きのお兄さんに尋ねるスレ。

・必ずCPUの名前を書くこと!
・情報を小出しにしない。書ける情報は全て書いた方が得だよ。
0002デフォルトの名無しさん2006/10/18(水) 00:05:44
HLT
0003デフォルトの名無しさん2006/10/18(水) 00:06:56
ファミコンアセンブラはまじで楽しい。
それ以外のアセンブラなんて人間にすすめるもんじゃない。
0004デフォルトの名無しさん2006/10/18(水) 00:20:21
>>3
本家スレに逝けw
0005デフォルトの名無しさん2006/10/18(水) 00:47:59
質問で失礼します。
[8085h]←[8051h]+[8052h] を計算し、符号付2進数加算としてのオーバーフローを判定する

8085プログラムで書けという問題なのですがまったく分かりません。
どなたか分かる方教えてください。よろしくお願いします。
0006デフォルトの名無しさん2006/10/18(水) 01:28:16
パリティーフラグでオーバーフローを検出できるのはZ80からだっけか。

まあまず、8bitの2の補数を足したときにオーバーフローする条件を考えてみれ。
0007デフォルトの名無しさん2006/10/18(水) 03:12:34
nop

0008デフォルトの名無しさん2006/10/20(金) 23:58:08
盛り上がらないよなやっぱ
0009デフォルトの名無しさん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
0010デフォルトの名無しさん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
0011デフォルトの名無しさん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
これってもっと簡単に書ける?
0012デフォルトの名無しさん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にセットして戻るように作れ。

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

PDP11のプログラムカウンタとかについての問題です
答えだけじゃなくて説明をしなければならないので、できるだけ解説もお願いします
よろしくおねがいします
0015デフォルトの名無しさん2006/10/23(月) 00:37:42
>>14
1命令2byteだから1GBで0.5G命令、つまり2^29命令、
1命令に1クロックかかるなら2^29クロック。
1MHzなら、これは537秒くらい。

と、書いてはみたが、俺は勘違いしているような気がしてきた。
0016デフォルトの名無しさん2006/10/23(月) 00:50:19
PDP-11のプログラムカウンタって16bitじゃなかったっけ、とか
プログラムカウンタの上限までいったら次は0番地に戻るんじゃないか
とかいうツッコミはダメですか?
0017デフォルトの名無しさん2006/10/23(月) 00:50:37
ちょ待って・・w
わけわかりません・・・
勘違いって?
0018152006/10/23(月) 00:53:58
>>17
俺は>>16みたいなことを考えずに書いちゃったわけ。
出題意図がイマイチわからんしな。
0019デフォルトの名無しさん2006/10/23(月) 00:55:24
0番地に戻る・・?16・・?
すみませんわかりません

0020デフォルトの名無しさん2006/10/23(月) 01:10:36
どなたか教えてください。。。
0021デフォルトの名無しさん2006/10/23(月) 01:34:54
お願いします!
0022デフォルトの名無しさん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

この辺のを読んで勉強し直せ。
0023デフォルトの名無しさん2006/10/23(月) 02:31:10
すみませんが急ぎなので教えてください・・
そもそもここはそういうスレですし
基礎的で申し訳ありませんがよろしくお願いします
0024デフォルトの名無しさん2006/10/23(月) 02:55:05
気が向いた人が答えるスレ
他の人が課題に挑戦するスレ
だよ。

おまえの単位を取るためのスレじゃないのだけは確か。
0025デフォルトの名無しさん2006/10/23(月) 02:58:53
>>23
問題が意味不明
GBを理解してるか、の問題?

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

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

1命令って、どういうプロセスで実行されるんだっけか?
読み出しに1クロック、解釈に1クロック、実行に1クロックで、合計3クロックか?
0027デフォルトの名無しさん2006/10/23(月) 04:05:36
書き戻しもあるぞよ
0028デフォルトの名無しさん2006/10/23(月) 04:15:08
いまどきのプロセッサはそう単純にはなってないだろうが
昔は、fetch, decode, execute, writeback の4つに分類されてたな。
0029デフォルトの名無しさん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
0030デフォルトの名無しさん2006/10/23(月) 11:56:44
2つだけでもオーバーフローは起きる
0031デフォルトの名無しさん2006/10/23(月) 12:51:32
>>14です!
教えてくださいお願いします
問題は書いた通りです

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

急ぎですのでなるべく早くお願いします!
0032デフォルトの名無しさん2006/10/23(月) 13:01:04
>>15-16の何が不満なんだろう。
0033デフォルトの名無しさん2006/10/23(月) 14:38:55
結局自分で考えて提出しました‥
答えも教えてもらいましたが全然違いました‥このスレの人のも
もうかなりヤバイです(ノд`)
答え1問目は5億何ちゃらというとんでもない数字でした
2問目はそれに10の-9乗掛けたものです
そもそもクロックとかまだ習っていませんでしたし‥
皆さん難しく考えすぎだったのでは‥
0034デフォルトの名無しさん2006/10/23(月) 14:44:06
2^29=5億何ちゃらだから>>16で合ってたじゃん。
それに10^-9をかけるということは1GHz動作だったんだな。
問題に1GHzって書いてなかったん?
0035デフォルトの名無しさん2006/10/23(月) 14:44:38
あ、>>15だった。
0036デフォルトの名無しさん2006/10/23(月) 14:44:59
2^29=536870912だろ。何がヤバイんだ?
0037デフォルトの名無しさん2006/10/23(月) 14:54:17
答えを教えてもらっても駄目な奴っているんだな
0038デフォルトの名無しさん2006/10/23(月) 14:55:06
クロック習ってないのにどれくらいの時間がかかるか、なんて問題出るの?
0039デフォルトの名無しさん2006/10/23(月) 15:18:03
0.5秒で1GB処理するのか
0040デフォルトの名無しさん2006/10/23(月) 16:34:35
>>34
書いてないです
>>36
間違えた答えで提出してしまったことです
>>38
出ましたね‥
クロックは教科書のその20ページ後ぐらいに初めてでてくるようです
0041デフォルトの名無しさん2006/10/23(月) 16:42:54
全ての命令が一秒待つとかだったら17年かかるな。
0042デフォルトの名無しさん2006/10/23(月) 17:05:00
>答えも教えてもらいましたが全然違いました‥このスレの人のも
だから>>15で合ってるじゃん。何が違うの?
もしかして2^29=5億何ちゃらって理解してなかった?
0043デフォルトの名無しさん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
0044デフォルトの名無しさん2006/10/23(月) 20:22:22
>>43
MOV D, -5
0045デフォルトの名無しさん2006/10/23(月) 23:45:43
なんでクピュ名かかないやつ多いんだ
0046デフォルトの名無しさん2006/10/23(月) 23:52:53
わからない人のために補足しておくと、
クピュとはCPUのことです。
0047デフォルトの名無しさん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
ワードしかだめなんだっけ?
0048デフォルトの名無しさん2006/10/25(水) 02:42:36
お願いします。
8085CPUで

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

という問題なんですが、さっぱりわかりません。プログラムのキーポイントと一緒に解説をおねがいします。
0049デフォルトの名無しさん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
0050デフォルトの名無しさん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 ;プログラム停止
0051デフォルトの名無しさん2006/10/25(水) 15:24:03
>>50
詳しい解説付きでどうもアリガトウ御座います。
0052472006/10/25(水) 21:52:00
>>49
DOSCALL.MACってなつかすぃものを見たーーーーーーw
0053デフォルトの名無しさん2006/10/25(水) 21:58:51
ところで学生って、デバッガ使わせてもらえないの?
オレは自力で覚えたから知らんが、全部、紙とか黒板で理論のみ習うわけ?
んなわけないと思うけど
デバッガで遊んでレジスタの変化とか見てれば、各命令の動作なんてすぐ覚えられると思うんだけど。。。
0054デフォルトの名無しさん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);
}
0055デフォルトの名無しさん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);
}
0056542006/10/26(木) 11:07:08
>>55
ご回答ありがとうございました。
gccってそんな機能があったんですねorz
使えると思いますので、学校に行ったら試してみたいと思います。
0057デフォルトの名無しさん2006/10/26(木) 11:18:53
>gccってそんな機能があったんですね

というか、C言語をアセンブリ言語に落とすのがCコンパイラの仕事だが。
0058552006/10/26(木) 11:34:48
>>56
ガンガレ
0059デフォルトの名無しさん2006/10/27(金) 00:05:13
質問しようと思ったら、全く同じ問題があってワラタ
0060デフォルトの名無しさん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[]= があるかないか?)があるのですが、
これらはどういった違いがあるのでしょうか?
0061デフォルトの名無しさん2006/10/30(月) 23:22:20
宿題です、分かる方お願いします。

ラベルAに整数(たとえば10)が格納されている。
Aを4で割ったあまりをラベルBに入れ、さらにAを9倍した値をラベルCに
いれるプログラムを作成せよ。
0062デフォルトの名無しさん2006/10/30(月) 23:28:32
>>61
CPU名を書いてないので答えられない。
0063デフォルトの名無しさん2006/10/30(月) 23:29:49
答えがわからないなら書き込まなくていいです
0064デフォルトの名無しさん2006/10/30(月) 23:33:56
頭おかしい奴だなw
0065622006/10/30(月) 23:44:53
>>63
確かにCPUによっては俺は答えられない。
だが、CPU名が書いてないと、
答えを書きたい人がいても答えられないんだ。
0066デフォルトの名無しさん2006/10/30(月) 23:48:08
>>1も読めないような奴だから、こんな問題も解けないんでしょう。
ほっとけばいいよ。
0067デフォルトの名無しさん2006/10/31(火) 00:03:33
>>60
前者はシーケンシャルに実行される、ってことは、代入するコードが生成される。
後者はプロセッサの初期化時に値がロードされる。
FPGAなんかだと外部からロードされるデータの中に値が含まれてる。

ってことだと思う、 VerilogHDLは経験が無いけどきっとそう。
0068デフォルトの名無しさん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

意味書け!
もちろんアセンブラですけど。
0069デフォルトの名無しさん2006/10/31(火) 00:21:44
なんだろう、レジスタが30本以上(おそらく32本であとはPCとSP)
でzlがレジスタっぽいし、分岐がbrってことは、AVRかな?
0070デフォルトの名無しさん2006/10/31(火) 00:35:24
どうでもいいが痛い奴二人の

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

の競争にしか見えません俺には。
0071デフォルトの名無しさん2006/10/31(火) 00:42:26
はい次の方、質問をどうぞ。
CPUと環境を明記してね。
0072682006/10/31(火) 00:55:51
>>69
正解。だが、お前の発言は面白くもなんともねぇ。
何故なら、お前には聞いてないからだ!ボケ
0073692006/10/31(火) 02:04:57
>>72
だから質問にある「意味」には答えてないだろ、
よくよめカス!
0074デフォルトの名無しさん2006/10/31(火) 12:10:50
>>73
意味についてでなく
CPUが解らなければ
答えられないということを解らせなければいけなかった。
ということではないかな?
そういう流れだと思うが。
0075デフォルトの名無しさん2006/10/31(火) 14:38:07
ソースだしたらCPU解かっちゃうからなぁ
0076デフォルトの名無しさん2006/10/31(火) 16:42:28
>>62を見た時点でCPUでも書いてりゃよかったのに
開き直っちまうからこんなことになる
0077デフォルトの名無しさん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
0078デフォルトの名無しさん2006/10/31(火) 19:28:01
ググッたら、教育用のCPUか>MINIPS
分岐命令の後ろに、nop入れろ
0079デフォルトの名無しさん2006/11/01(水) 01:02:32
ここでFPGAにMINIPSコアを乗せている>>60が登場!
0080デフォルトの名無しさん2006/11/01(水) 02:55:09
>>79
そんなやつおらんやろー。
そもそも、架空のCPUコア乗せてるのが信じられない。
ARMや8051とかならまだしも。
0081デフォルトの名無しさん2006/11/01(水) 04:27:47
COMET も架空かな
0082デフォルトの名無しさん2006/11/01(水) 10:35:08
「オレほどCPU持ってるやつはいない。100個持ってる。」
0083デフォルトの名無しさん2006/11/01(水) 18:28:18
教育用の架空のコアだから、FPGAに乗せるのも学習の一環だと思うな。
ソフトウエアでのエミュレータなら普通にアリだろ?
0084デフォルトの名無しさん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/までやりました。
0085デフォルトの名無しさん2006/11/01(水) 22:50:58
疲れるし、つまんないから仕事じゃなきゃやらなーい。
出来たから何って感じだし。

スレ違いだし。
0086852006/11/01(水) 22:56:14
あ、すまん。>>84じゃないよ。
FPGAやらの話してるやつへのレスね。
0087デフォルトの名無しさん2006/11/01(水) 23:21:52
>出来たから何って感じだし。
0088デフォルトの名無しさん2006/11/02(木) 02:18:04
>>84
CPU名を明記するように。
0089デフォルトの名無しさん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
0090デフォルトの名無しさん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
0091デフォルトの名無しさん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
0092デフォルトの名無しさん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
0093デフォルトの名無しさん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
0094デフォルトの名無しさん2006/11/02(木) 15:01:17
久しぶりに宿題板みたいになってきたな♪(゚д゚)ウマー
0095デフォルトの名無しさん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のインストールが上手く行っていないのか、
それとも単純にコマンドを間違えているのか、何か根本的に間違えているのか…
全く手詰まりになってしまったので何か助言をいただけないでしょうか…。
0096デフォルトの名無しさん2006/11/03(金) 00:16:06
>>95
ttp://sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=44&s=44#44
0097デフォルトの名無しさん2006/11/03(金) 01:27:26
ありがとう。
ということはインストールが上手く行っていないのか…。
確かにインストールの途中で固まって以後すすまなくなってた。
アンインストールインストール…と繰り返すうちに訳が分からないことになってる…。
0098952006/11/03(金) 03:32:32
ダメだ…何度やってもインストールの途中で固まってしまう。
w32apiパッケージのlibuser32.aというのを入れれば動くという事は分かっても入れ方が分からない…。
他の質問者の人はインストールし直すと正常に動くようになったとあるけれど
自分の場合はインストールし直そうとするとほぼ確実に途中で固まってうまくいかない。
どうすればいいんだ…。
0099デフォルトの名無しさん2006/11/03(金) 03:58:45
>98
どこでどう止まるの?
ファイルのダウンロード中?コピー中?
何のファイルでとまる?
0100952006/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にいれればいいのか…。
0101デフォルトの名無しさん2006/11/03(金) 10:24:01
>100
それは普通「正常に終了」とは言わないケド…
…でも何で止まるんだろ。
ごめん。訊ねたけど判らないっす。
■ このスレッドは過去ログ倉庫に格納されています