[試験]2007年度前期計算システム基礎(A巻上機)


参照
要件:
  • 1. Dディスクにフォルダを新規作成し、exam_と名前を付けます.071251**(あなたの学号);
  • 2. 2つのテーマはいずれもこのディレクトリの下に保存されています.
  • 3. 答案を提出する時、LC-3シミュレータとVCを脱退して、試験場を離れることができます;
  • 4. Uディスクの使用は許可されていません.
  • 5. 携帯電話などの通信機器をオフにしてください.
  • 問題をよく調べてください.
    1. (10%) LC-3 assembly language program:
    Inputs a single digit and prints out that number of letters from the beginning of the alphabet. For example, if the user enters "4", "abcd"is printed to the screen, followed by a line feed.
    letter    | ASCII
    'a'       | x0061
    line feed | x000A
    '0'       | x0030

    (LC-3アセンブラ設計:ユーザ入力1桁10進数
    n,プログラム出力アルファベット先頭の前
    n文字です.たとえば、ユーザーが「4」と入力した場合、「abcd」が出力され、新しい行が変更されます.)
    2.(10%)Cプログラム設計:
    関数void delnum(char*s)を作成し、sが指す文字列の数値文字を削除します.
    main関数の作成:ユーザーに文字列を入力し、delnum関数を呼び出し、呼び出し後の結果を出力するように要求します.
    たとえば、abcde 123 fgと入力すると、abcdefgと出力されます.
    回答:
    1. test1.asm
    ; Written by RednaxelaFX, 2008/01/09
    ;
    ; Use R2 for 'a'
    ; Use R4 for iteration count
    ; Use R5 for max iteration count
    ; Use R6 for ASCII to int conversion
    ;
                    .ORIG   x3000
    INIT            LD  R2, ASCIIa
                    LD  R6, A2I
                    ;
    INPUT           ; get input from keyboard
                    TRAP    x23
                    ADD R5, R0, R6 ; get digit from ASCII
                    ;
                    ; initialze R4 for loop
                    AND R4, R4, #0
    OUTPUT          ; print ('a' + R4)
                    ADD R0, R2, R4
                    TRAP    x21
                    ; increment R4
                    ADD R4, R4, #1
                    ; check iteration condition
                    NOT R3, R4
                    ADD R3, R3, #1
                    ADD R3, R5, R3 ; R3 = R5 - R4
                    BRp OUTPUT
                    ; end of loop
                    ; print line feed
                    LD  R0, ASCIILineFeed
                    TRAP    x21
                    HALT
    ASCIILineFeed   .FILL   x000A
    ASCIIa          .FILL   x0061
    A2I             .FILL   x-30
                    .END

    2. test2.c
    /*
     * Written by RednaxelaFX, 2008/01/09
     */
    
    #include <stdio.h>
    #include <string.h>
    
    void delnum( char* s ) {
        int origLen;
        char* tempStr;
        char* origPtr;
        char* tempPtr;
        
        origLen = strlen( s );
        tempStr = ( char* ) malloc( ( origLen + 1 ) * sizeof( char ) );
        if ( NULL == tempStr) {
            printf( "Memory allocation failure.
    " ); exit( 1 ); } origPtr = s; tempPtr = tempStr; strncpy( tempStr, s, origLen ); *( tempStr + origLen ) = '\0'; while ( *tempPtr ) { if ( !( ( *tempPtr >= '0' ) && ( *tempPtr <= '9' ) ) ) { *origPtr = *tempPtr; ++origPtr; } ++tempPtr; } *origPtr = '\0'; free( tempStr ); } void main( ) { char input[50]; printf( "Enter a string: " ); scanf( "%s", input ); delnum( input ); printf( "Output: %s
    ", input ); }