[試験]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.
(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
2. test2.c
要件:
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 );
}