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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2006/10/18(水) 00:04:05
アセンブラの宿題ができないときに、
アセンブラ好きのお兄さんに尋ねるスレ。

・必ずCPUの名前を書くこと!
・情報を小出しにしない。書ける情報は全て書いた方が得だよ。
0951デフォルトの名無しさん2007/08/09(木) 14:49:55
>2K以内に収まるように ・・・できるとして、平均2byte/命令で最大1000行=\3マソだな。
1桁違うな。「あたりまえにできる」ことが判っていて1000行書くだけで\60マソぐらいがプロの相場。
「できるかどうかわからない」/「受け手のスキル次第でできるかもしれない」 のコストを加味
したら、\100〜\150ぐらいまでになりそうなもんだ。 宿題丸投げにしてはデカすぎる。
095288000 なら知ってるが。2007/08/10(金) 00:29:24
>>948
どこの CPU ? > 86000

>>951
妙に安いな > \100〜\150ぐらいまでになりそうなもんだ。
0953デフォルトの名無しさん2007/08/10(金) 01:52:04
100で受けてバイトに30で出すと差額が儲かるとは思わないか?
0954デフォルトの名無しさん2007/08/10(金) 02:27:45
>>953
完成しなかった時の責任はだれが取る?
バイト君が給料泥棒になる可能性はかなり高い
0955デフォルトの名無しさん2007/08/10(金) 02:42:57
>>952
たしかIntelのRISCだ >86000
Motorola の 88000と同時期くらいだったと思うけど。
09569552007/08/10(金) 02:52:54
すまん。80860と間違えたw
元の質問の86000は68kの間違い?
0957デフォルトの名無しさん2007/08/10(金) 04:30:20
R3000
0958デフォルトの名無しさん2007/08/10(金) 08:55:19
V30なら任せろ
0959デフォルトの名無しさん2007/08/10(金) 11:15:58
AWとかって書くの?
0960デフォルトの名無しさん2007/09/05(水) 01:37:42
アセンブリ初めて二週間。意味がわからない状態が続いています。なんとなくわかったことはCやJAVAがアセンブリになりそれが機械語に変換され、その間のアセンブリを良く知っているとパソコンの基礎を理解するのに便利ですよーの程度です。

そんな私が学校から頂いた宿題ですが、
int temp = 0;
for (int i=0; i<100; i++)
temp+=A[i]
なるC言語をMIPSになおせ。

素人ながらもここまでやってみました。
move $t1, $zero #temp=0
move $t0, $zero
addi $t0, $t0, 1
add $t3, $a0, $t0 # アレイA[i]のアドレス=$t3
addi $t1, $t1, $t3
for: slt $t2, $t0, 100 #$t3 = (i<100)
beq $t2, 100, exit #if(i<100) go to exit

j exit
exit:

プログラムの間違いを修正、アドバイスをして頂ける方がいらっしゃいましたらよろしくお願いします。
0961デフォルトの名無しさん2007/09/05(水) 17:56:48
意味がわからないもなにも、CPUにさせたい動作そのものを記述するだけだろう。
命令表を見ながらやれば悩む要素なんざどこにもない。
0962デフォルトの名無しさん2007/09/05(水) 20:53:25
>>960
t1<-0 temp=0;
t0<-0 i=0;
loop:
t0>=100ならexitへ if (i>=100) hoto exit;
t2<-t0*4
t1<-t1+A(t2) temp+=A[i];
t0<-t0+1 i++;
loopへジャンプ goto loop;
exit:

これをアセンブラにする
0963デフォルトの名無しさん2007/09/05(水) 21:31:49
そのCのプログラムをMIPSをターゲットにして cc -S
0964デフォルトの名無しさん2007/09/05(水) 23:04:11
>>963
0965デフォルトの名無しさん2007/09/06(木) 03:56:44
>>960
素人ながらにナイスファイト。
一度Cコードを何らかのソフトでコンパイルして出てきたAssenblyを閲覧するというのも手だよ。
0966デフォルトの名無しさん2007/09/06(木) 05:54:50
違う石のだけど、ASMリストあげるよ。
int A[100];
void main(void) {
     register int temp = 0;
     static int i;
     for (i=0; i<100; i++)
       temp+=A[i] ;
}
0967デフォルトの名無しさん2007/09/06(木) 06:02:09
これは8bitの石なので、mipsに直せばもっと簡単になるはず。
    DSEG
A_:    DS    200
Z2:    DS    2・・・これが i
    CSEG
%2    LXI    B,0・・・これがtemp
%5    LXI    H,0
    SHLD    Z2
__2:    LHLD    Z2
    LXI    D,100
    CALL    CMPHD##
    JNC    __3
%6    LHLD    Z2
    DAD    H
    LXI    D,A_
    DAD    D
    MOV    A,M
    INX    H
    MOV    H,M
    MOV    L,A
    DAD    B
    MOV    C,L
    MOV    B,H
%5    LHLD    Z2
    INX    H
    SHLD    Z2
    JMP    __2
__3:
    RET
0968デフォルトの名無しさん2007/09/06(木) 14:07:00
i have no idea
0969デフォルトの名無しさん2007/09/06(木) 14:49:36
私は無いイデアを持っています
0970デフォルトの名無しさん2007/09/06(木) 21:07:54
どうして関数が呼ばれて最初に push ebp ってするの? 
0971デフォルトの名無しさん2007/09/06(木) 21:46:35
>>970
ebpは保存しておきたいから。
0972デフォルトの名無しさん2007/09/14(金) 03:38:50
スタックフレームを作るのに使うから。
0973デフォルトの名無しさん2007/09/14(金) 12:29:12
mips用gccでクロスコンパイルすればいいんじゃまいか?
0974デフォルトの名無しさん2007/09/15(土) 11:58:25
>>973 >>963
0975デフォルトの名無しさん2007/09/21(金) 05:12:36
mata aerukana
0976デフォルトの名無しさん2007/09/26(水) 14:37:23
ナップサック問題のプログラムができません。
誰か助けて下さい。
0977デフォルトの名無しさん2007/09/28(金) 16:51:10
新スレどうします?
0978デフォルトの名無しさん2007/09/28(金) 18:55:53
もし立てるなら アセンブリ に直しといて
0979デフォルトの名無しさん2007/09/28(金) 21:29:22
秋月の電波時計キットを買ってきたのですが、どうやって組み立てればいいですか?
0980デフォルトの名無しさん2007/09/28(金) 21:37:02
jmp 秋月スレ
0981デフォルトの名無しさん2007/09/28(金) 23:47:38
>>979
かなづちで粉砕→水100ccを加え冷凍庫へ
0982デフォルトの名無しさん2007/10/01(月) 18:10:44
>>981
出来ました!ありがとうございました!
0983デフォルトの名無しさん2007/10/02(火) 05:33:39
Write a program in MIPS assembly language to convert an ASCII decimal
string to an integer. Your program should expect register $a0 to hold the
address of a null-terminated string containing some combination of the
digits 0 through 9. Your program should compute the integer value equivalent
to this string of digits, then place the number in register $v0. Your
program need not handle negative numbers and need not be concerned
about values larger than 231 − 1.
If a nondigit character appears anywhere in the string, your program
should stop with the value -1 in register $v0. For example, if register
$a0 points to a sequence of three bytes 5010, 5210, 010 (the null-terminated
ASCII string 24), then when the program stops, register $v0 should contain
the value 2410, (or 11000 in binary). (The subscript ten means base
10.)
0984デフォルトの名無しさん2007/10/02(火) 09:49:18
そっちの方は「アッセンブリ」だろ、という突っ込みは野暮か?
0985デフォルトの名無しさん2007/10/03(水) 02:53:03
push は
・stack pointer を +1 してからデータを積む
・データを積んでから stack pointer を +1 する
のどっちですか。
CPUごとに違う気もしますが、しってる範囲でいいので教えてください。
0986デフォルトの名無しさん2007/10/03(水) 04:51:18
元の質問,間違い?
>231 − 1
2^(31) − 1
>5010, 5210, 010
50(10),52(10),0(10) (10)=decimal
0987デフォルトの名無しさん2007/10/03(水) 05:06:03
>>985
pushはプリデクリメント、popはポストインクリメントが一般的。
Cっぽく書くとこう。
Push : *(--StackPointer) = Data;
Pop : Data = *(StackPointer++);
0988デフォルトの名無しさん2007/10/03(水) 07:23:16
理由は[sp]を参照することで、最後に積んだ値(リターンアドレス)を得ることが出来るから
だと思う。
もちろん、そういうアドレッシングモードが用意されていれば、だけど。
例えば8086は無理でも、その元となった8080(Z80)にはあったはず。
0989Socket7742007/10/03(水) 08:07:40
>>985
+ ぢゃなくて - だよね?
0990デフォルトの名無しさん2007/10/03(水) 10:50:02
985は書き間違いだね。だけど世の中には、pushで+、popで−な石もある。(ADuC831/841とか)
0991デフォルトの名無しさん2007/10/03(水) 12:36:52
プリデクリメント、ポストインクリメントが多いと思う
0992デフォルトの名無しさん2007/10/03(水) 14:16:20
アセンブリ言語の宿題ができないときに、
アセンブリ言語好きのお兄さん・お姉さんに尋ねるスレ。

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

前スレ

アセンブラの宿題質問スレ
http://pc11.2ch.net/test/read.cgi/tech/1161097445/

これで誰か新スレを!
0993デフォルトの名無しさん2007/10/03(水) 14:30:02
>>988
スタックポインタの演算とロード・ストアをアトミックにやる必要がないからじゃないの?
0994デフォルトの名無しさん2007/10/06(土) 15:32:54
アセンブラを勉強しよう
http://pc11.2ch.net/test/read.cgi/tech/1172916032/l50

アセンブラ… Part 12
http://pc11.2ch.net/test/read.cgi/tech/1187079488/l50
0995デフォルトの名無しさん2007/10/06(土) 15:58:15
まぁ、その辺りのスレを使うほうが賢明かも知れんな。
0996デフォルトの名無しさん2007/10/07(日) 05:20:08
h
0997デフォルトの名無しさん2007/10/07(日) 05:23:02
t
0998デフォルトの名無しさん2007/10/07(日) 05:23:39
t
0999デフォルトの名無しさん2007/10/07(日) 05:26:28
p
1000小倉優子 ◆en0rG2J.f6 2007/10/07(日) 05:27:02
1000ならジュースでも飲むか
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。