• 締切済み

教えてください2

Quantの回答

  • Quant
  • ベストアンサー率18% (23/122)
回答No.10

アセンブラの話が出ていたのでついでにZWIさんのソースをML64用に移植。 Windows XP x64で動作確認。 フルアセンブラだが一応画面出力にCのライブラリを使っているのでC言語? includelib libcmt extrn printf:proc .data FORMAT db 'num=%d', 0aH, 00H .code recursive proc mov qword ptr [rsp+8], rbx push rdi mov edi, ecx lea ebx, dword ptr [rcx-1] TOP: mov eax, edi cdq and eax, 1 xor eax, edx cmp eax, edx lea edx, dword ptr [rbx+2] je @F mov edx, ebx @@: lea rcx, offset FORMAT call printf cmp ebx, 20 jge @F inc edi inc ebx jmp TOP @@: mov rbx, qword ptr [rsp+48] pop rdi ret 0 recursive endp main proc lea rcx, offset FORMAT mov edx, 3 call printf mov ecx, 3 call recursive xor eax, eax ret 0 main endp end

関連するQ&A

  • ポインタ配列

    ポインタ配列によるひとつのプログラムを組もうと思っています。 で、以下のようなプログラムを作ってみました。 1:#include<stdio.h> 2:#define NUM 5 3:main(void){ 4: char *str[NUM]; 5: int i; 6: for(i=0;i<NUM;i++){ 7: printf("string --->"); 8: scanf("%s",str[i]); 9: } 10: for(i=0;i<NUM;i++){ 11: printf("str[%d] --> %c\n",i,str[i]); 12: } 13:} これなのですが、8行目のscanf文でコンパイルエラーではなく、実行エラーが出ます。どのようにすれば動くようになるのでしょうか? 入力する文字は、9文字以下を想定しています。

  • 教えてください1

    1以上100未満で入力した値の二乗根を求めるプログラムを実現せよ。 ただし配列、ポインタは用いない。 求める桁数は小数点以下7桁までで良い。 sqrt関数は使用しないこと <実行結果> 1以上100未満の数字を入力してください 72.1 root=8.491171

  • C言語 逆順の配列の仕方を教えてください

    今、大学でC言語の課題をやっています。サンプルが与えられています。 その課題は、配列の逆順です。 for文を使って、実行結果は以下のようにならなければならなく、「並び替えの結果は再び num1, num2 に保存される」という条件なのですが、逆順になるにはどのようなプログラムを組めば良いのでしょうか? ソースの「 /* ここに処理を書く */」にプログラムを書かなければいけないのですが、まったくの初心者でわかりません。誠にお手数ですが、教えていただければ幸いです。宜しくお願いいたします。 -----実行結果----- C:\c_lang>reverse --- before --- 2 4 9 10 5 3 1 7 8 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --- after --- 6 8 7 1 3 5 10 9 4 2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 -----以下ソース----- #include <stdio.h> void print_num( int *num, int len ); void reverse_num( int *num, int len ); int main( void ) { int num1[10]={2,4,9,10,5,3,1,7,8,6}; int num2[15]={1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15}; printf("--- before ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); /* 逆順に並べ替え */ reverse_num( num1, 10 ); reverse_num( num2, 15 ); printf("--- after ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); return 0; } void print_num( int *num, int len ) { int i; for( i=0; i<len; i++ ){ printf( "%d ", num[i] ); } printf("\n"); } void reverse_num( int *num, int len ) { /* ここに処理を書く */ } -----ソースここまで-----

  • while文の動作に関して

    以下のwhile文の動作結果に関して質問なのですが、 実行結果に「3」が表示される理由が理解できておりません。 numが「3」のときは「false」に該当するような気がするのですが。 ご教示頂ければ幸いです。   public class Asterisk {     public static void main(String args[]){       int num = 0;       while(num++ < 3) {         System.out.println(num);        }     }   }   実行結果   1 2 3

    • ベストアンサー
    • Java
  • 配列をグローバル変数にとってやりたい

     今晩は、Cの初心者です宜しくお願いします。  今、ポインターを使わないでグローバル変数でサブルーチンから配列が使えるのかの勉強をしているのですが、 Cでは、配列をグローバル変数にとってやることは出来ないのでしょうか。  どうも正常にプログラムが実行出来ないのですが。  宜しくお願いします。

  • php execute関数

    おしえてください。 Functionの戻りで以下のreturn文があります。 $sqlの変数には実行するSQL文が格納されます。 $sqlParamは配列変数です。 どのような結果を返すのか分かりません。 return $conn -> Execute ($sql, $sqlParam); 多分Execute関数というものがあると思うのですが、 第2引数の配列変数を使ってどのような結果を返すのかが分からないです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 教えてください3

    int型配列a[5]={111,222,333,444,555}を宣言し、この配列の各要素をポインタptを用いて表示せよ。 ただし、プログラム中でポインタptは常に配列の先頭の要素のアドレスを保持しているものとする。 <実行結果> a[0]=111 a[1]=222 a[2]=333 a[3]=444 a[4]=555

  • phpでの変数の作り方をsmartyで実現する方法

    phpでの変数の作り方をsmartyで実現する方法を教えていただきたいです。 簡単な例ですが以下のような場合どうすれば実現できるでしょうか? $Out = array("Out_10"=>"test1","Out_20"=>"test2","Out_30"=>"test3"); $Status_Num = array("10","20","30"); $window->assign('Out',$Out); $window->assign('Status_Num',$Status_Num); [表示] {foreach from=$Status_Num item=Num} <!--ここが分かりません。。--> {/foreach} [実現したい事] phpであれば。。 <?php foreach($Status_Num as $Num):?> <a href=""><?php echo $Out['Out_'.$Num];?></a> <?php endforeach;?> 連想配列のvarを表示させたいのです。。 上記の形をsmartyで実現したいです。 エラー続きで困っています。 どなたか教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • C言語について教えてください。

    #include <string.h> #include <stdio.h> void print_all_char(char *str) { while(*str! = '\0') { printf("%c\n", *str); str++; } } int main(void) { char astr[5]; char *pstr; strcpy(astr, "ABCD"); pstr = "EFGHI"; puts("「配列で実現する文字列」を表示する"); puts(astr); puts("「配列で実現する文字列」のすべての文字を表示する"); print_all_char(astr); puts("「ポインタで実現する文字列」を表示する"); puts(pstr); puts("「ポインタで実現する文字列」のすべての文字を表示する"); print_all_char(pstr); return 0; } 自分でつくった上のプログラムではエラーが発生します。 なぜだか分かりません。教えてください。 ちなみに、実行結果は 「配列で実現する文字列」を表示する ABCD 「配列で実現する文字列」のすべての文字を表示する A B C D 「ポインタで実現する文字列」を表示する EFGHI 「ポインタで実現する文字列」のすべての文字を表示する E F G H I のようにしたいです。 よろしくお願いします。

  • C言語の構造体についてなんですが。

    struct LIST {     struct Num* number;     struct LIST* next;/* 次の要素へのポインタ */ }*root; struct Num{     int a;     struct Num* next; /* 次の要素へのポインタ */ }*numroot; と構造体を定義したときに、 main(){     struct LIST *p;     for(p = root; p != NULL; p = p->next) ; } とすれば、pの先頭からNULLまでを参照していくことは分かるんですが、pのnumberの先頭からNULLまでの参照方法(プログラムのfor文の記述方法)がイマイチわかりません。つまり、構造体の構造体をどのように参照するかということです。 これを実現したい理由は、構造体内での数の格納を配列(固定長)ではなく可変長で格納したいからです。 分かる方は解答をお願いします。