微机原理及应用A试题库及答案 联系客服

发布时间 : 星期二 文章微机原理及应用A试题库及答案更新完毕开始阅读c7e0c7ce6137ee06eff918f2

if ( sin teger = = 0) sign = = 0;

else If ( siteger > 0) sign = 1; else

sign = -1;

3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。

if (ch1> =’a’ && ch1< =’z’) caps= =0;

if (ch1> =’A’ && ch1< =’Z’) caps= =1;

4. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。 sum=0;

for ( i=1;i< =100;i++) if ( i%2= =0) sum=sum+i;

5. 在N分支结构中,至少要使用N—1条 JMP指令,它的作用是什么?

用于实现结束前一个分支回到共同的出口作用。

6. 不使用CALL指令是否可以实现子程序的调用?若可以,举例说明。

调用系统服务子程序一般不使用CALL指令, 而是使用中断调用指令 7. 写出3条以上的可以改变程序执行流程的指令,并简述其用途。

1)JMP指令;无任何先决条件下,就能使程序改变执行顺序; 2)Jcc指令;根据指定条件,确定程序是否发生转移; 3)LOOP指令;作为计数器,控制循环;

4)CALL指令;在主程序中实现子程序的调用。

8.在子程序中,可否改变子程序的返回地址?若可以,则举例说明。

RET N 该指令允许返回地址出栈后修改堆栈的指针。 9. 为什么特别强调为子程序加上必要的注释?

完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。 六.应用题

1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。 include io32.inc .data

year dword ?

prompt byte ' Enter the year :',0 msg byte ' is leap year .',0 msg1 byte ' is not leap year .',0 .code

main proc ;主程序开始

mov eax,offset prompt call dispmsg

call readsid ;读入一个年份 mov year,eax

call dispsid ;输出年份 xor edx,edx mov ebx,400 div ebx cmp edx,0

jz leap ;if year mod 400=0 then goto leap

mov eax,year xor edx,edx mov ebx,4 div ebx cmp edx,0

jnz noleap ;if year mod 4<>0 then goto noleap

mov eax,year xor edx,edx mov ebx,100 div ebx cmp edx,0

jnz leap ;if year mod 100<>0 then goto leap noleap: mov eax,offset msg1 jmp display

leap: mov eax,offset msg display: call dispmsg call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

end main ;end of assembly

2. 编程写一个完整的程序,求出2~100之间的所有素数,并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 include io32.inc .data

msg byte ' List of prime number',13,10,0 blank byte ' ',0 .code

main proc ;主程序开始

mov eax,offset msg call dispmsg mov ebx,2

iLoop: cmp ebx,100 ;i循环入口 ja done

mov ecx,ebx shr ecx,1 ;j=i/2

jLoop: cmp ecx,2 ;j循环入口 jb print mov eax,ebx

cdq ;xor edx,edx

div ecx ;被除数送eax,32位除法 or edx,edx ;cmp edx,0

jz nexti ;if i mod j=0 then goto next i dec ecx jmp jLoop print: mov eax,ebx

call dispuid ;显示素数i的值 mov eax,offset blank call dispmsg ;显示空格 nexti: inc ebx ;i=i+1 jmp iLoop done: call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

end main ;end of assembly

3. 编程写一个完整的程序,将数组aray中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下: .data

aray dword 12,4, 168,122,-33,56,78,99,345, 66,-5 4. 编程写一个完整的程序,求数组aray中的最大值与最小值,并将它们分别存入max和min单元中。数据段的定义如下: .data

aray dword 12,4,-168,122,-33,56,78,99,345,-66,-5 min dword ? max dword ? .code

main proc ;主程序开始

mov eax,offset msg

call dispmsg ;显示字符串

mov ecx,lengthof array ;数组元素的个数送ecx xor esi,esi ;esi间址指针

mov ax,array[esi*type array] ;注意比例因子!

again: cmp ax,array[esi*type array]

jge next ;注意区分有符号数和无符号数! mov ax,array[esi*type array]

next: inc esi ;esi指向下一个元素 loop again

movsx eax,ax ;注意符号位的扩展! call dispsid call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

end main ;end of assembly(最大值)

5. 编程写一个完整的程序统计msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下: .data

msg byte 'I love XUT !',13,10,0 space dword ? char dword ?

6. 编程写一个完整的程序,将字符串msg中所有的小写字母转换为大写字母。数据段的定义如下: .data

msg byte 'I love XUT !',13,10,0

7. array是一无符号数数组,数据段的定义如下。要求:编程写一个完整的程序求出数组元素中偶数的和,并将它存入esum单元中。 .data

array dword 12,34,123,78,43,234,79,86,98,20 esum dword ?

8. “回文串”是一个正读和反读都一样的字符串,比如“eye”、“level”、“noon”等。请写一个程序测试一字符串是否是“回文”, 是“回文”则显示“Y”,否则显示“N”。 显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。

9. 回文是指正读和反读都一样的数或文本。例如:11、121、12321等,编写程序,求10到10000之间所有回文数并输出。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。 include io32.inc .data

blank byte ' ',0