引用
要求:
- 1. 在D盘新建一个文件夹,命名为exam_071251***(即你的学号);
- 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汇编程序设计:用户输入一位十进制数
n,程序输出字母表开头的前
n个字母。例如:如果用户输入“4”,则输出“abcd”,并换新行。)
2. (10%) C程序设计:
编写一个函数 void delnum( char* s ),将s所指的字符串中的数字字符删除。
编写main函数:提示用户输入一个字符串,调用delnum函数,并输出调用后的结果。
例如:输入为“abcde123fg”,则输出为:“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.\n" );
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\n", input );
}