专接本计算机C语言程序设计模拟试题及答案(一) 下载本文

专接本计算机C语言程序设计模拟试题及答案(一)

一、单项选择题(每小题2分,共20分)

1. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是( )

A) p=2*(int*)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int)); C) p=(int*)malloc(4*2); D) p=(int*)calloc(2,sizeof(int)); 2. 设有int x=11; 则表达式(x++ * 1/3) 的值是( )

A) 3 B) 4 C) 11 D) 12

3. 下列程序执行后的输出结果是(小数点后只写一位)( )

#include void main()

{double d; float f; long l; int i; i=f=l=d=20/3;

printf(\ %f \\n\,d); }

A) 6 6 6.0 6.0 B) 6 6 6.7 6.7 C) 6 6 6.0 6.7 D) 6 6 6.7 6.0 4. 下列变量定义中合法的是( )

A) short _a=1-.le-1 B) double b=1+5e2.5 C) long d1=0xfdaL D) float 2_and=1-e-3;

5. 设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( )

A)k++ B)k+=1 C)++k D)k+1

6. 有以下程序,其中%u表示按无符号整数输出,输出结果是( )

#include void main()

{unsigned short x=0xFFFF; /* x的初值为十六进制数*/ printf(\}

A)-1 B)65535 C)32767 D)0xFFFF 7. 有以下程序,输出结果是( )

#include void main() {int i,j; for(i=1;i<4;i++)

{for(j=i;j<4;j++) printf(\printf(\ } }

A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*2=4 2*3=6 3*1=3 3*3=9 C) 1*1=1 D) 1*1=1 1*2=2 2*2=4 2*1=2 2*2=4

1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9 8. 在C语言中,函数返回值的类型最终取决于( )

A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型 C)调用函数时主函数所传递的实参类型 D)函数定义时形参的类型 9. 设已有定义:float x;则对指针变量p进行定义且赋初值的语句中正确的是( )

A)float *p=1024 B)int *p=(float x) C)float p=&x D)float *P=&x; 10. 以下叙述中正确的是( )

A)break语句只能用于switch语句体中

B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内 D)在循环体内使用break语句和continue语句的作用相同 二、完成下列的程序填空(每空3分,共18分)

1.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

#include #include void main()

{void inverse(char str[]); char str[100]; printf(\scanf(\inverse(str);

printf(\}

void inverse(char str[]) {char t; int i,j;

for (i=0,j=strlen(str);i<(strlen(str)/2);i++,j--) { ; ; ; } }

2.有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组。

#include void main()

{int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf(\ for (i=0;i<10;i++) printf(\ printf(\ printf(\ scanf(\ end=a[9]; if (number>end) ; else

for (i=0;i<10;i++) {if (a[i]>number) { ;

a[i]=number; for (j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; ; } break;

} } }

三、写出下列程序的运行结果(每小题9分,共36分) 1. 以下程序运行后的输出结果是( )

#include void f(int *q) {int i=0;

for( ; i<5;i++)(*q)++; }

void main()

{int a[5]={1,2,3,4,5},i; f(a);

for(i=0;i<5;i++)printf(\ }

2. 以下程序运行后的输出结果是( )

#include f(int b[],int m,int n) {int i,s=0;

for(i=m;i

void main()

{int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf(\}

3. 以下程序的输出结果是( )

#include int f() {static int i=0; int s=1; s+=i; i++; return s; }

void main() {int i,a=0;

for(i=0;i<5;i++) a+=f(); printf(\ }

4. 以下程序的输出结果是( )

#include void main()

{char ch[2][5]={ \int i,j,s=0;

for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++)

for(j=0;p[i][j]> '\\0';j+=2) s=10*s+p[i][j]- '0'; printf(\}

四、按要求编写下列程序(每小题13分,共26分)

o o

#include #include void main() { int m,n; }

int myfun(int x) { int k; }

编写程序,用函数的递归调用求x的n次方的值,其中n为正整数。

输入正整数m和n,如果m+n是质数,输出“Yes”,否则,输出“No”。要求定义并调用函数myfun(x)来判断x是否为质数,在下面空出的位置

完成程序,不能定义新的变量,可不用已定义的某些变量。

参考答案

一、单项选择题(每小题2分,共20分) AAACA BBADC

二、完成下列的程序填空(每空3分,共18分) 1. t=str[i]; str[i]=str[j-1]; str[j-1]=t; 2.

a[10]=number; temp1=a[i]; temp1=temp2; 三、写出下列程序的运行结果(每小题9分,共36分) 1、6,2,3,4,5, 2、10 3、15 4、6385 四、按要求编写下列程序(每小题13分,共26分)

1.编写程序,用函数的递归调用求x的n次方的值,其中n为正整数。 #include float mypow(float x,int n) {float m; if(n==1) m=x;

else m=x*mypow(x,n-1); return m; }

void main() {float x; int n;

scanf(\,%d\

printf(\的%d次方是%f\}

2.输入正整数m和n,如果m+n是质数,输出“Yes”,否则,输出“No”。要求定义并调用函数myfun(x)来判断x是否为质数,在下面空出的位置完成程序,不能定义新的变量,可不用已定义的某些变量。 #include #include

void main() { int m,n;

scanf(\if(myfun(m+n)) printf(\else printf(\ } int f(int x) {int k;

for(k=2;k

专接本计算机C语言程序设计模拟试题及答案(二)

一、单项选择题(每小题2分,共20分) 1. 在说明语句:int *f();中,标识符f代表的是( )

A)一个用于指向整型数据的指针变量 B) 一个用于指向一维数组的行指针 C) 一个用于指向函数的指针变量 D) 一个返回值为指针型的函数名 2. 下列程序的输出结果是( )

#include void main()

{double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(\}

A) 3 B) 3.2 C) 0 D) 3.07

3. 设变量均已正确定义,若要通过scanf(\语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符'X'和'Y'。以下所示的输入形式中正确的是(注:□代表空格字符)( )

A)10□X□20□Y〈回车〉 B)10□X20□Y〈回车〉 C)10□X〈回车〉 D)10X〈回车〉 20□Y〈回车〉 20Y〈回车〉

4. 以下选项中,当x为大于1的奇数时,值为0的表达式( )

A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0 5. 以下叙述中正确的是( )

A)break语句只能用于switch语句体中

B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内 D)在循环体内使用break语句和continue语句的作用相同 6. 以下合法的字符型常量是( )

A)'\\x13' B)'\\018' C) 65 D) \7. 在C语言中,函数返回值的类型最终取决于( )

A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型 C)调用函数时主函数所传递的实参类型 D)函数定义时形参的类型 8. 设int x=1, y=1; 表达式(!x||y--)的值是( )

A) 0 B) 1 C) 2 D) -1

9. 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是( )

A) p=2*(int*)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int)); C) p=(int*)malloc(4*2); D) p=(int*)calloc(2,sizeof(int)); 10. 以下函数的功能是( )

int fun(char *s) {char *t=s; while(*t++); return(t-s); }

A)比较两个字符的大小 B)计算s所指字符串占用内存字节的个数 C)计算s所指字符串的长度 D)将s所指字符串复制到字符串t中 二、完成下列的程序填空(每空3分,共27分) 1.输入20个数,用起泡法对这20个数升序排列。

#include void main() {int a[20]; int i,j,t;

printf(\for (i=0;i<20;i++) scanf(\ printf(\ for(j=0;j<19;j++) for(i=0; ;i++) if ( ) { }

printf(\for(i=0;i<20;i++) printf(\ printf(\ }

2.写一个函数,输入一个十六进制数,输出相应的十进制数。

#include void main() {char a[6]; scanf(\ printf(\ }

int htoi(char s[]) {int i,n; n=0;

for (i=0;s[i]!='\\0';i++) {if (s[i]>='0'&& s[i]<='9') n=n*16+ ;

if (s[i]>='a' && s[i]<='f') n=n*16+ ;

if (s[i]>='A' && s[i]<='F') n=n*16+ ; } return(n); }

3.用指针的方法编写的函数,将一个

#include void main()

的整型二维数组行列互换。

{void move(int *pointer); int a[3][3],*p,i; printf(\for (i=0;i<3;i++)

scanf(\ p=&a[0][0]; move(p);

printf(\for (i=0;i<3;i++)

printf(\ }

void move(int *pointer) {int i,j,t; for (i=0;i<3;i++) for (j=i;j<3;j++) { ; ; ; } }

三、写出下列程序的运行结果(每小题8分,共24分) 1. 以下程序运行后的输出结果是( )

#include void main() {void f(int n,int *r); int m=7,r; f(m,&r); printf(\ }

void f(int n,int *r) {int r1=0;

if (n%3==0) r1=n/3; else if(n%5==0) r1=n/5; else f(--n,&r1); *r=r1; }

2. 以下程序的输出结果是( )

#include f(int a) {int b=0; static int c=3; b++; c++; return(a+b+c); }

void main() {int a=2, i;

for(i=0;i<3;i++) printf(\f(a)); }

3. 以下程序的输出结果是( )

#include

void fun(int *x, int *y) {printf(\*x=3; *y=4; }

void main() {int x=1,y=2; fun(&y,&x); printf(\}

四、按要求编写下列程序(第1小题16,第2小题13分,共29分) 1.编程实现下面的函数,要求输入一个x的值,输出y值,函数如下: -5 (x<0) y= 0 (x=0) 5 (x>0)

2.编写一个程序,将一组数据{6,5,8,1,0,4,7,3,2,9}按从小到大的顺序排列,程序显示排序前和排序后的结果。

参考答案

一、单项选择题(每小题2分,共20分) DCDDC AABAB

二、完成下列的程序填空(每空3分,共27分) 1. i<19-j (a[i]>a[i+1]) t=a[i];a[i]=a[i+1];a[i+1]=t; 2. s[i]-'0' s[i]-'a'+10 s[i]-'A'+10 3.

t=*(pointer+3*i+j)

*(pointer+3*i+j)=*(pointer+3*j+i) *(pointer+3*j+i)=t 三、写出下列程序的运行结果(每小题8分,共24分) 1、2 2、7 8 9 3、2 14 3

四、按要求编写下列程序(第1小题13,第2小题16分,共29分) 1.编程实现下面的函数,要求输入一个x的值,输出y值,函数如下: -5 (x<0) y= 0 (x=0) 5 (x>0)

#include void main () {int x,y; printf(\scanf(\if(x<0) y=-5;

else if(x==0) y=0; else y=5;

printf(\}

2.编写一个程序,将一组数据{6,5,8,1,0,4,7,3,2,9}按从小到大的顺序排列,程序显示排序前和排序后的结果。 #include #define N 10 Void main( ) {

int a[N]= {6,5,8,1,0,4,7,3,2,9} int i,j,t;

printf(“The array before sorted:”); for (i=0;ia[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } }

printf(“The array after sorted:”); for (i=0;i

专接本计算机微机原理与汇编语言模拟试题及答案(一)

一、单项选择题(每小题1分,共15分)

1. 8088/8086的存储器组织是将存储器划分为段,可作为段的起始地址的是( )。 A.185A2H B.00020H C.01003H D.0AB456H 2.指令POP [BX] 中,目的操作数的段寄存器是( )。 A.DS B.ES C.SS D.CS

3. CPU执行“OUT 40H,AL”指令时,下列信号为高的是( )。

4.执行1号DOS系统功能调用后,从键盘输入的字符应存放在( )。 A.AL B.BL C.CL D.DL

5. 间接寻址方式中,操作数处在( )中。 A.通用寄存器 B.内存单元 C.程序计数器 D.堆栈

6. 8086在最小模式下,分时使用AD0~AD15,所以必须外接地址锁存器,当总线上为地址信息时,通过( )信号将地址送入地址锁存器。 A.DEN B.ALE C.

D.DT/ R

7. 在对汇编语言程序的处理过程中,用编辑程序产生汇编语言的源程序的扩展名是( )。 A..EXE B..OBJ C..BAT D..ASM 8. 表示过程定义结束的伪指令是( )。 A.END B.ENDP C.ENDS D.ENDM

9. 默认状态下,在寄存器间接寻址中与SS段寄存器对应的寄存器是( )。

A.BP B.BX C.SI D.DI

10. 标志寄存器中属于控制标志的是( )。 A.DF、SF、OF B.DF、IF、TF C.OF、CF、PF D.AF、OF、SF

11. 两个组合十进制数46H、35H相加,调整指令DAA完成的是( )。 A.加00H调整 B.加60H调整 C.加06H调整 D.加66H调整

12. 在8086的I/O指令中,间接端口寄存器是( )。 A.BX B.SI C. DX D.DI 13. 浮点加减中的对阶是( )。

A.将较小的一个阶码调整到与较大的一个阶码相同 B.将较大的一个阶码调整到与较小的一个阶码相同 C.将被加数的阶码调整到与加数的阶码相同 D.将加数的阶码调整到与被加数的阶码相同 14. 保护断点就是保存( )。

A.中断类型码 B.中断服务程序入口地址 C.现场 D.当前CS 、IP的值

15. 对以下类型的中断,优先级最低的是( )。

A.指令中断 B.非屏蔽中断 C.可屏蔽中断 D.单步中断 二、填空题(每空1分,共20分)

1. 指令MOV BX,MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么有效地址为 ,物理地址为 。 2. 对于十六进制表示的数码19.8H,转换为十进制数时为 ;该数码用压缩BCD码表示时数据为 。 3. 已知X的补码为10011001,其原码是 ;真值为__________。 4.使用DOS功能调用时,子程序的功能号应放在 寄存器中。

5. 设堆栈段寄存器SS所存放的数据为2250H,堆栈指示器SP所存放的数据为0140H,如压入堆栈7个数据库字,问栈顶地址、SS和SP各为 、 、 。 6. 使CF标志置1的指令是 ;使DF标志清0的指令是 。 7. 组成16M×8位的存储器,需要1M×4位的存储芯片______片。

8.8253可编程定时/计数器按照二进制计数,其计数范围是从0到 ;按照BCD码计数,其计数范围是从0到 。 9. PC机的中断类型有 、 和不可屏蔽中断三种,不可屏蔽中断的请求信息送CPU的 引脚。 10. 8255A的控制字的最高位D7=1时,表示该控制字为 控制字。 11.CPU可访问8259的端口地址数为 。 三、简答题(每小题5分,共20分) 1. 定时器和计数器有什么相同和不同?

2. 什么是接口?硬接口和软接口的含义各是什么?

3. 在A/D 转换过程中,采样保持电路有什么作用?在什么情况下可以不使用采样保持电路 ? 4.什么是中断?常见的中断源有哪几类?CPU响应中断的条件是什么? 四、分析题(每小题5分,共15分)

1. 若STR是字符串的首地址,阅读程序段,回答问题: LEA BX,STR MOV CX,30 LP: CMP [BX],?$? JNZ NEXT MOV [BX],?&? NEXT:INC BX LOOP LP HLT

(1)指出程序的功能 ;

(2)对程序的各个语句加上注解。

2. 阅读程序段,完成指定问题: NUM DB?ABCDEFGHI?

MOV AH,01H INT 21H AND AL,0FH DEC AL XOR AH,AH

MOV BX,OFFSET NUM ADD BX,AX MOV DL,[BX] MOV AH,02H INT 21H

试回答:(1)上述程序段的功能是什么? (2)如从键盘输入字符?5?,程序段有什么结果? 3. 请把下列程序中所缺语句补充完整,并回答问题: TITLE EXAMPLE.ASM DATA SEGMENT A DW 0 B DW 0 C DW 230,20,54

__________________________ CODE SEGMENT

ASSUME ______________________________ PROG PROC FAR START: PUSH DS MOV AX.0 _______________ MOV AX,DATA ________________ MOV BX, OFFSET C MOV AX, [BX] MOV B, AX MOV AX, 2[BX] ADD AX, B MOV A, AX

EXIT: ___________________ ____________________ CODE ENDS ___________________

问题:(1)程序执行完后,A单元的内容是多少?

(2)写出上机运行本程序的步骤。 五、应用题(每小题10分,共30分)

1.首地址为DAT的数据区中有3个互不相等的8位无符号整数,编写一个完整的程序,将这3个数的最大者存放到MAX单元。

2. 设8253计数器0工作在方式2,CLK0为5MHz,输出OUT0为1KHz方波,二进制计数;计数器1用OUT0作计数脉冲,计数值为1000,二进制计数,计数器减到0时向CPU发出中断请求,CPU响应这一中断请求后继续写入计数值1000,开始重新计数,保持每一秒钟向CPU发出一次中断请求。试编写出对8253的初始化程序。(8253端口地址为04B0H~04B3H) 3. 在如图所示的电路中,试分析电路图,回答以下问题。

(1)74LS138的作用是什么? (2)74LS138在什么条件下才工作? (3)RAM的地址范围是多少?

参考答案

一、单项选择题(每小题1分,共15分) 1.B 2.C 3.A 4.A 5.B 6.B 7.D 8. B 9.A 10.B 11.C 12.C 13.A 14.D 15.D 解释:

1.段的起始地址必须从节开始,而每节是16个字节,所以段的起始地址用十六进制表示时应该末尾是0。 2.指令POP [BX] 中的目的操作数为BX指向的内存单元,而BX默认使用DS;源操作数是堆栈中的数据。 二、填空题(每空1分,共20分)

1.4500H、16500H

(计算有效地址EA=MASK的3500H+BP的1000H=4500H 物理地址=1200H*16+EA=12000H+4500H=16500H ) 2.25.5、00100101.0101B 3. 11100111、-103 4. AH

5.22640H、2250H 、0132H

解:已知:DS=2250H,栈顶地址的偏移地址=0140H 栈顶地址=(2250H′10H)+ 0140H = 22640H

压入7个数据字后: SP = 0140H - 2′7 = 0132H SS = 2250H 6. STC、CLD 7.32

8.65535 、9999 9. 软件中断、可屏蔽中断、NMI 10. 方式 11.2

三、简答题(每小题5分,共20分)

1.答:定时器和计数器是同一器件—--计数器,其共同的特点是都有一个计数脉冲输入端,每输入一个脉冲,计数器就进行加1或减1计数。 若计数器件的计数脉冲的频率固定,则可利用计数实现定时,这就是定时器。 若计数器件的作用仅仅是记录输入脉冲的多少,则称为计数器。

2.答接口是位于主机与外设之间的一些转换电路的总称.是CPU与外设交互通信的中间接点,一般由若干组存储单元组成,用于暂存数据发实现CPU与外设之间的通信,并有缓冲的功能用来平衡CPU与外设的不匹配。硬接口是用硬件来实现接口的功能,而软接口是通过程序设计来实现接口的功能的。 3.答:采样—保持电路广泛应用于数据采集系统和实时控制系统中,它的功能有两种:

(1)采样跟踪状态:在此期间应尽可能快地接受输入信号,使输出和输入信号相一致 (2)保持状态:把采样结束前瞬间的输入信号保持下来,使输出和保持的信号一致。

由于模/数转换需要一定时间,在转换期间,要求模拟信号保持稳定,因此当输入信号变化速率较快时,都应采用采样—保持电路,如果输入信号变化缓慢,则可不用保持电路。

4. 答:中断是指CPU在正常执行程序时,由于内部/外部时间或程序的预先安排引起CPU暂时终止执行现行程序,转而去执行请求CPU为其服务的服务程序,待该服务程序执行完毕,又能自动返回到被中断的程序继续执行的过程。

常见的中断源有:一般的输入/输出设备请求中断;实时时钟请求中断;故障源;数据通道中断和软件中断。

CPU响应中断的条件:若为非屏蔽中断请求,则CPU执行完现行指令后,就立即响应中断。CPU若要响应可屏蔽中断请求,必须满足以下三个条件:①无总线请求;②CPU允许中断;③CPU执行完现行指令。 四、分析题(每小题5分,共15分)

1. (1)程序功能:将字符串STR(长度30字节)中所有?$?用?&?代替。 (2)LEA BX,STR ;置地址指针 MOV CX,30 ;置计数器初值

LP: CMP [BX],?$? ;取字符与?$?比较 JNZ NEXT ;不是?$?转NEXT MOV [BX],?&? ;是?$?则用?&?替换 NEXT:INC BX ;地址加1 LOOP LP ;CX一1为0继续 HLT

2. 答:(1) 程序段功能:根据从键盘输入的字符?1?~?9?,确定在显示器上显示NUM中第几个字符。

(2) 显示器显示字符?E?, 解释如下: …

MOV AH,01 ;从键盘输入?5?, INT 21H ; AL=35H AND AL,0FH ; AL=05H DEC AL ; AL=04H XOR AH,AH ;AH=0

MOV BX,OFFSET NUM ;BX指向NUM的首地址 ADD BX,AX ;BX指针向高地址移动4下 MOV DL,[BX] ;DL=?BX指针指向的内容?即?E? MOV AH,02H INT 21H ;显示输出?E?

3. (1)程序执行完后,A单元的内容是250。 (2)写出上机运行本程序的步骤是: 答:C>MASM EXAMPLE C>LINK EXAMPLE C>EXAMPLE

五、应用题(每小题10分,共30分) 1. 参考程序如下:

DATA SEGMENT DAT DB 23H,32H,13H MAX DB ? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX

MOV AL,DAT ; AL←23H MOV BL,DAT+1 ; BL←32H MOV CL,DAT+2 ; CL←13H LOP1: CMP AL,BL

JA LOP2 ; AL中的数据高于BL中的数据则跳转致LOP2 XCHG AL,BL

LOP2: CMP AL,CL ; AL中的数据高于CL中的数据则跳转致LOP3 JA LOP3

XCHG AL,CL ; AL中的数据为最大值

LOP3: MOV MAX,AL ; 将最大者存放到MAX单元 MOV AH,4CH INT 21H CODE ENDS

END START

2.参考答案:计数器0工作在方式2,初值N=5M/1K=5000,控制字为34H, 计数器1工作在方式0,计数初值为1000,控制字为70H; 程序段如下:

;计数器0初始化,写入控制字

MOV AL,34H MOV DX,04B3H OUT DX,AL

;计数器0赋初值,先写低8位再写高8位

MOV AX,5000 MOV DX,04B0H OUT DX,AL MOV AL,AH OUT DX,AL

;计数器1初始化,写入控制字

MOV AL,70H MOV DX,04B3H OUT DX,AL

;计数器1赋初值

MOV AX,1000 MOV DX,04B1H OUT DX,AL MOV AL,AH OUT DX,AL

3.答:(1)74LS138的作用是地址译码;

(2)74LS138在G1为高电平,G2A和G2B都为低电平时才工作; (3)RAM的地址范围是72000H~73FFFH。

解释:RAM芯片的片内地址是A12~A0,片外地址为A19~A13 ,其中地址为A15~A13是译码器输入端,应该为001;A19 A18 A17 A16应该为0111 。 所以20为地址是0111 001 0000000000000~ 0111 001 1111111111111 。

专接本计算机微机原理与汇编语言模拟试题及答案(二)

一、单项选择题(每小题1分,共15分)

1. 十进制正数38的八位二进制补码是( )。 A.00011001 B.10100110 C.10011001 D.00100110 2. 以下属于总线仲裁器的是( )。 A.8288 B.8289 C.0809 D.8089

3. 在数据定义中,如果将STRING ABC 作为字符串表示时,应使用的伪指令是( )。 A.DB B.DW C.DD D.DQ

4. 若将AH的内容的高四位分离,则应选用( )。 A.AND AL,0F0H B.OR AL,0F0H C.XOR AL,0F0H D.TEST AL,0F0H

5. 不能实现将AX清零和CF清零的指令是( )。 A.SUB AX,AX B.MOV AX,0 C.XOR AX,AX D.AND AX,0 6. LDS指令要求源操作数必须为( )。 A.一个16位寄存器 B.一个存储器操作数

C.一个有效地址 D.一个段寄存器 7. 条件转移指令JNE的测试条件为 ( )。

A.ZF=0 B.CF=0 C.ZF=1 D.CF=1 8. ORG设定当前可分配内存单元的( )。 A.段地址 B.偏移地址 C.类型 D.字节数 9. 计算机系统软件中的汇编程序是一种( )。 A.汇编语言程序 B.编辑程序

C.翻译程序 D.链接程序

10. CPU在对存储器进行访问时, 地址线有效和数据线有效的时间关系应该是( )。 A.同时有效同时无效 B.地址线较先有效 C.数据线较先有效 D.地址数据复用同时有效 11. 响应NMI请求的必要条件是( )。 A.IF=1 B.IF=0

C.一条指令结束 D.无INTR请求

12. 在微机系统中采用DMA方式传输数据时,数据传送是( )。 A.由CPU控制完成 B.由执行程序(软件)完成

C.由DMAC发出的控制信号完成 D.由总线控制器发出的控制信号完成

13. 若8259A工作在优先级自动循环方式,则IRQ3的中断请求被响应并且服务完毕后,优先权最高的中断源是( )。 A.IRQ0 B.IRQ2 C.IRQ3 D.IRQ4

14.在中断系统中,中断类型号是在( )的作用下送往CPU的。 A.读信号 B.地址译码信号

C.中断请求信号INTR D.中断响应信号

15. 8086响应以下中断时,需要到数据总线读入中断类型码的是( )。 A.单步中断 B.指令中断 C.可屏蔽中断 D.非屏蔽中断 二、填空题(每空1分,共20分)

1. 8086CPU具有 条地址线,可直接寻址 容量的内存空间,在访问I/O端口时,使用地址线 ,最多可寻址 个I/O端口。 2.每次进行串扫描指令SCAS时,使用的段寄存器是 ,变址寄存器是 。

3. 已知一个具有14位地址和8位数据的存储器,该存储器能存储 字节的信息,如果存储器由8K×4位RAM芯片组成,需要 片。 4. 8255A的工作方式有基本型输入/输出方式、_________I/O方式和_________I/O方式。 5. 8086/8088 微处理器被设计为两个独立的功能部件是________和________。 6. 所谓指令的寻址方式是指寻找 的方式。

7. 在Intel2116动态RAM存储器中, 对存储器刷新的方法是每次刷新 个单元. 8. DMA 技术提供了____ ____到_____ ___的数据直接传输通道。

9. 中断向量是中断服务程序的____ ____,每个中断向量占________字节。Intel 8086将对应256类中断的中断向量组成一张___ _____,占据内存从0到___ _____H区间。

三、简答题(每小题5分,共20分)

1.8086系统中的存储器分为几个逻辑段?各段之间的关系如何?每个段寄存器的作用是什么?

2. BHE低电平信号的作用是什么?试说明当起始地址为奇地址、偶地址、一次读写一个字节和一个字时,BHE和A0的状态。 3. 试分析8253的6种工作方式的特点和功能,各方式下的时钟信号CLK和门控信号GATE分别起什么作用? 4.在一个微型计算机系统中,确定采用何种方式进行数据传送的依据是什么? 四、分析题(每小题5分,共15分)

1. DATA DB 46H,84,34,-3,20H,122,73 :

MOV CX,7 LEA S1,DATA NEXT:MOV AL,[SI] INC SI

TEST AL,81H LOOPZ NEXT MOV BL,[SI] :

程序段运行后,请回答:(AL)= (BL)= 。 2. 阅读程序段,回答问题: D1 DB 300 DUP(?) D2 DB 100 DUP(?) ...

MOV CX,100 MOV BX,200 MOV SI,0 MOV DI,0

NEXT:MOV AL,D1[BX][SI] MOV D2[DI],AL INC SI INT DI LOOP NEXT

(1)该程序段的功能: ;

(2)“LOOP NEXT”指令可以用什么指令取代: 。 3. 执行完下列程序后,回答指定的问题。

MOV AX,0 MOV BX,2 MOV CX,50 LP:ADD AX,BX

ADD BX,2 LOOP LP

问:(1) 该程序的功能是 。 (2) 程序执行完成后,(AX)= 。 五、应用题(每小题10分,共30分)

1. 已知在内存中从DA单元起存放有10个带符号字节数据,统计其中负数的个数并放入FU单元。 2. 编写程序,计算下面函数的值。

3. 用查询方式的打印机接口如图,已知8255的A口作为输出打印的数据口,工作于方式0,PC口高4位工作于输出方式,PC6产生STB信号(低电平有效),PC口的低4位工作于输入方式,PC2接收打印机的BUSY信号。设打印字符存放在数据段中有效地址为2000H的内存单元。 请写出8255A的初始化程序和打印子程序。(8255的口地址为80H~83H)

参考答案

一、单项选择题(每小题1分,共15分) 1.D 2.B 3. A 4.A 5.B 6.B 7.A 8.B 9. C 10.B 11.C 12.C 13.D 14.D 15.C 解释:

2. 8288 为总线控制器;0809为模数转换器;8089为I/O处理器

9. 常用的汇编程序是MASM,属于汇编翻译程序,是把汇编源程序翻译为机器目标程序的程序。

10. 在8086/8088中尽管地址数据复用,但是是分时复用,即在总线周期的T1传送地址,在T2-T4传送数据,所以地址线较先数据线有效。

15.8086响应可屏蔽中断中断时,由硬件提供中断类型号,是在响应信号INTA(低电平有效)的第二个响应周期时放入数据总线;非屏蔽中断无响应信号;内部中断由指令直接获取中断类型号。 二、填空题(每空1分,共20分) 1. 20、1MB、16条、64K 2. ES、DI 3. 16K、4片 4. 字节选通、双向 5. EU、BIU 6. 操作数

7.128(2116容量为16K×1,即7位地址线行线和列线复用,每次刷新一行的128个单元) 8. 外设、存储器 9. 入口地址、4、中断向量表、003FFH 三、简答题(每小题5分,共20分)

1.8086系统中的存储器分为几个逻辑段?各段之间的关系如何?每个段寄存器的作用是什么?

答:8086CPU将1MB的存储空间分成逻辑段来进行管理:每个逻辑段最小为16B。所以最多可分成64K个段;每个逻辑段最大为64KB,最少可分成16个逻辑段。各段的起始位置由程序员指出,可以彼此分离,也可以首尾相连、重叠或部分重叠。

4个16位的段寄存器用来存放每一个逻辑段的段起始地址:CS中为代码段的起始地址;DS中为数据段的起始地址;SS中为堆栈段的起始地址;ES中为附加段的起始地址。

2. BHE低电平信号的作用是什么?试说明当起始地址为奇地址、偶地址、一次读写一个字节和一个字时,BHE和A0的状态。

答BHE信号的作用是高8位允许引脚。若BHE为0则表示对一个字进行操作,即高8位有效,若BHE为1则表示对一个字节进行操作,即高8位无效。当起始地址为奇地址时,一次读写一个字节时,BHE为1,A0状态为1;当起始地址为偶地址时,一次读写一个字节时,BHE为1,A0状态为0;当起始地址为奇地址时,一次读写一个字时,BHE为0,A0状态为1;当起始地址为偶地址时,一次读写一个字时,BHE为0,A0状态为0。 3.试分析8253的6种工作方式的特点和功能,各方式下的时钟信号CLK和门控信号GATE分别起什么作用? 答:方式0:计数结束,产生中断

方式1:可重复触发的单稳态触发器 方式2:分频器 方式3:方波发生器

方式4:软件触发的选通信号发生器 方式5:硬件触发的选通信号发生器

时钟信号CLK的作用:在8253进行定时或计数工作时,每输入1个时钟脉冲信号CLK,便使计数值减1。 GATE信号的控制作用如下:

GATE引脚输入状态所起的作用 工作方式 低电平 方式0 禁止计数 下降沿 暂停计数 由GATE的上升沿继续计数 置入初值后,GATE的上升沿开始方式1 不影响 不影响 计数,或重新开始计数。 置入初值后,WR上升沿开始计数,方式2 禁止计数 停止计数 由GATE的上升沿重新开始计数 置入初值后,WR上升沿开始计数,方式3 禁止计数 停止计数 由GATE的上升沿重新开始计数 置入初值后,WR上升沿开始计数,方式4 禁止计数 停止计数 由GATE的上升沿重新开始计数 置入初值后,GATE的上升沿开始方式5 不影响 不影响 计数,或重新开始计数。 不影响计数 个CLK的负脉冲(单次) 允许计数 个CLK的负脉冲(单次) 计数至0,输出宽度为1允许计数 方波(重复波形) 计数至0,输出宽度为1允许计数 度为1个CLK的负脉冲 输出宽度为n个CLK的不影响计数 低电平(单次) 输出宽度为n个CLK宽上升沿 置入初值后WR上升沿开始计数,允许计数 计数至0输出高电平 输出宽度为n个CLK的高电平 OUT引脚 输出状态 计数过程中输出低电平。4.在一个微型计算机系统中,确定采用何种方式进行数据传送的依据是什么?

答:无条件传送方式主要用于对简单外设进行操作,或者外设的定时是固定的或已知的场合。

条件传送方式主要用于不能保证输入设备总是准备好了数据或者输出设备已经处在可以接收数据的状态。 中断控制方式主要用于需要提高CPU利用率和进行实时数据处理的情况。 DMA控制方式主要用于快速完成大批的数据交换任务。

在实际工作中,具体采用哪种方式要根据实际工作环境与需要结合各种方式的特点进行选择。 四、分析题(每小题5分,共15分) 1. (AL)= -3或(0FBH) (BL)= 20H 解释:本程序段用于检测最高位和最低位是否为0,若同时为0程序循环,若不同时为0,只要其中有一个位为1,则结束程序。AL的值为最高位和最低位不同时为0的数,BL的值为下一个数。注意题目中的十进制数要转换为二进制。 2. 答:(1)将D1的后100个字节的元素对应的赋给了D2; (2)DEC CX JNZ NEXT

3. 答:(1)完成0到100间所有偶数求和的功能。 (2)2550

五、应用题(每小题10分,共30分)

1. 已知在内存中从DA单元起存放有10个带符号字节数据,统计其中负数的个数并放入FU单元。参考答案: 答:DATA SEGMENT

DA DB -2,-5,23,0,12,11,-9,-8,89,-26 FU DB ? DATA ENDS CODE SEGMENT

ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV DL,0 LEA SI,DA MOV CX,10 LP: MOV AL,[SI] TEST AL,80H JZ NEXT INC DL NEXT: INC SI LOOP LP MOV FU,DL MOV AH,4CH INT 21H CODE ENDS

END START

2. DATA SEGMENT X DW 6 S DW ? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX

MOV AX,X ;将X送到AX中 CMP AX,0 ;(AX)>0吗? JL DOUB ;是,转向doub

CMP AX,10 ;否,(ax)<10吗? JLE TRIB ;是,转向trib SAL AX,1 ;否,乘以4 SAL AX,1 JMP EXIT

DOUB: SAL AX,1 ;乘以2 JMP EXIT

TRIB: SAL AX,1 ;乘以3 ADD AX,X

EXIT: MOV S,AX ;保存结果 MOV AH,4CH ;结束 INT 21H CODE ENDS END START

注意,在比较的过程中使用的是针对带符号数的跳转指令,χ应该看作带符号数。程序中还用了移位指令代替了乘法指令。 3.答: MOV AL,81H OUT 83H,AL MOV AL,0DH OUT 83H,AL BY:IN AL,82H TEST AL,04H JNZ BY

MOV AL,[2000] OUT 80H,AL MOV AL,0CH OUT 83H,AL INC AL OUT 83H,AL RET