华南农业大学汇编语言习题(附标准答案)

合集下载

test5华农汇编期末试卷(有答案版)

test5华农汇编期末试卷(有答案版)

TEST5一、简答题1.下面程序段执行后,寄存器BX的值是多少?MOV BX,25PUSH BXMOV CL,4SHL BX,CLPOP AXSUB BX,AXBX的值为3752.对于这样的程序段:CMP AX, BXJAE NEXTXCHG AX, BXNEXT: CMP BX,CXJAE DONEXCHG BX, CXDONE: ┆试回答:①上述程序执行后,原有AX,BX,CX中最小数存放在那个寄存器?CX②这三个数是带符号数还是无符号数?带符号数3. 执行下面的程序段后,AX寄存器的内容是多少?MOV AX,1234HMOV BX,56HMOV CL,8ROL AX,CLADD AX,BXAX的内容为3468H4.有程序段:MOV DL,0A5HMOV AL, DLCBWMOV BL,60HIDIV BL上述程序段运行时,会出现什么结果?存放在什么位置?程序把AX中的有符号数FFA5H除以60H,得到AX=2AH、DX=4H;5. 已知BUF开始的数据区中存放有10个大、小写字母,下面程序段完成的功能是什么?MOV CX,10LEA BX,BUFK2:MOV DL,[BX]CMP DL,5AHJA K3MOV AH,2INT 21HK3: INC BXLOOP K2┇把BUF中的大写字母在屏幕中显示出来二、程序填空题1.下面程序通过堆栈传递参数方法,完成将ary为首地址的count个字数据累加,不考虑溢出,并将结果保存在sum中。

请在标号处填上缺少的一条指令。

prog segmentorg 100hassume cs:prog,ds:prog,es:prog,ss:progmain proc nearmov bx,offset arypush bx___________________ MOV BX,COUNT①push bxmov bx,offset sumpush bxcall proaddint 20hmain endpary dw 123,-54,267,…… ;一系列的数count equ ($-ary)/2sum dw ?proadd proc nearpush bp___________________ MOV BP,SP②push axpush cxpush sipush dimov si,[bp+8]___________________ MOV CX,[BP+6] ③mov di,[bp+4]xor ax,axnext: add ax,[si]___________________ADD SI,2④loop next___________________MOV [DI],AX ⑤pop dipop sipop cxpop axpop bpret 6proadd endpprog endsend main2. 以下.COM结构程序使用冒泡法完成对首地址为ARRAY的一系列有符号数从小到大排序。

汇编语言试题及答案

汇编语言试题及答案

汇编语言试题及答案一、单项选择题(每题2分,共20分)1. 汇编语言是一种()。

A. 高级语言B. 低级语言C. 机器语言D. 符号语言答案:D2. 汇编语言程序必须经过()才能被计算机执行。

A. 编译B. 汇编C. 链接D. 解释答案:B3. 在汇编语言中,指令通常由()组成。

A. 操作码和操作数B. 操作码和地址码C. 操作码和数据D. 地址码和数据答案:A4. 汇编语言中的寄存器主要用于()。

A. 存储数据B. 存储指令C. 存储地址D. 存储控制信息答案:A5. 汇编语言中的立即寻址方式是指()。

A. 操作数在寄存器中B. 操作数在内存中C. 操作数在指令中D. 操作数在输入/输出端口中答案:C6. 在汇编语言中,指令“MOV AX, 1234H”的作用是()。

A. 将内存地址1234H的内容移动到AX寄存器B. 将立即数1234H移动到AX寄存器C. 将AX寄存器的内容移动到内存地址1234HD. 将AX寄存器的内容移动到另一个寄存器答案:B7. 汇编语言中的循环结构通常使用()指令实现。

A. JZB. JNZC. LOOPD. CALL答案:C8. 在汇编语言中,子程序调用通常使用()指令。

A. JZB. JNZC. CALLD. RET答案:C9. 汇编语言中的堆栈操作通常使用()指令。

A. PUSHB. POPC. MOVD. ADD答案:A10. 在汇编语言中,中断服务程序的结束通常使用()指令。

A. INTB. IRETC. RETD. CALL答案:B二、填空题(每题2分,共20分)1. 汇编语言中的指令通常由______和______两部分组成。

答案:操作码;操作数2. 汇编语言中的寄存器可以分为______、______和______三类。

答案:通用寄存器;段寄存器;控制寄存器3. 汇编语言中的寻址方式包括______、______、______和______等。

答案:立即寻址;直接寻址;间接寻址;寄存器寻址4. 在汇编语言中,指令“MOV AX, BX”的作用是将BX寄存器的内容______到AX寄存器。

汇编语言试题及参考答案

汇编语言试题及参考答案

汇编语言试题及参考答案一、选择题(每题2分,共20分)1. 汇编语言中的指令通常由哪两部分组成?A. 操作码和操作数B. 地址和数据C. 指令和数据D. 操作码和地址答案:A2. 以下哪个不是汇编语言中的寻址方式?A. 直接寻址B. 间接寻址C. 立即寻址D. 寄存器寻址答案:B3. 在汇编语言中,以下哪个指令用于将数据从内存加载到寄存器中?A. MOVB. CMPC. ADDD. SUB答案:A4. 汇编语言中,以下哪个指令用于比较两个寄存器的内容?A. MOVB. CMPC. ADDD. SUB答案:B5. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与立即数相加?A. MOVB. CMPC. ADDD. SUB答案:C6. 汇编语言中的条件跳转指令通常使用哪些条件?A. 零、非零B. 正、负C. 溢出、非溢出D. 所有上述条件答案:D7. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容相减?A. MOVB. CMPC. ADDD. SUB答案:D8. 汇编语言中的循环结构通常使用哪种类型的跳转指令?A. 无条件跳转B. 条件跳转C. 直接跳转D. 间接跳转答案:B9. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与内存中的内容相加?A. MOVB. CMPC. ADDD. SUB答案:C10. 汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容进行逻辑与操作?A. ANDB. ORC. NOTD. XOR答案:A二、填空题(每题2分,共20分)1. 在汇编语言中,指令MOV AX, BX的作用是将寄存器________的内容复制到寄存器________中。

答案:BX,AX2. 汇编语言中的指令JMP FAR PTR 100H:200H的作用是跳转到内存地址________。

答案:100H:200H3. 汇编语言中,指令CALL的作用是________。

test9华农汇编期末试卷(有答案版)

test9华农汇编期末试卷(有答案版)

一、阅读程序1.仔细阅读下面程序,说明该程序的功能。

CODE SEGMENTORG 100HASSUME CS:CODE,DS:DATA,ES:CODE,SS:CODE SORT PROC NEARMOV CX,NDEC CXLOOP1:PUSH CXMOV BX,0LOOP2:MOV AX,ARRAY[BX]CMP AX,ARRAY[BX+2]JLE CONTINUEXCHG AX,ARRAY[BX+2]MOV ARRAY[BX],AXCONTINUE:ADD BX,2LOOP LOOP2POP CXLOOP LOOP1MOV AH,4CHINT 21HARRAY DW 2,-9,8,0,12,16,1,-10,18,11N DW ($-ARRAY)/2SORT ENDPCODE ENDSEND SORT程序功能:把ARRAY中的数从小到大排序2.仔细阅读下面程序,说明该程序的功能。

DATA SEGMENTBUFF DB 128,?,128 DUP(?)CRLF DB 0DH,0AH,24HDATA ENDSSTACK SEGMENT STACKDW 100H DUP(?)TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:DATA MAIN PROC FARMOV AX,STACKMOV SS,AXLEA SP,TOPPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,BUFFMOV AH,0AHINT 21HMOV AH,9LEA DX,CRLFINT 21HLEA SI,BUFFINC SIMOV CL,[SI]XOR CH,CHADD SI,CXSTDNEXT: LODSBMOV DL,ALMOV AH,2INT 21HLOOP NEXTRETMAIN ENDPCODE ENDSEND MAIN程序功能:从键盘输入一段字符串,然后再下一行逆序输出3. 仔细阅读下面程序,说明该程序的功能。

汇编语言复习题附答案

汇编语言复习题附答案

汇编语言复习题附答案一、选择题1. 汇编语言是一种()。

A. 高级语言B. 机器语言C. 低级语言D. 面向对象语言答案:C2. 在汇编语言中,指令通常由()组成。

A. 操作码和操作数B. 操作数和地址C. 操作码和地址D. 操作码、操作数和地址答案:A3. 汇编语言中的寄存器通常用来()。

A. 存储数据B. 存储指令C. 存储程序D. 存储地址答案:A4. 汇编语言中的指令MOV AX, BX的作用是()。

A. 将AX寄存器的值移动到BX寄存器B. 将BX寄存器的值移动到AX寄存器C. 将AX和BX寄存器的值相加D. 将AX和BX寄存器的值相减答案:B5. 汇编语言中的循环结构通常使用()指令实现。

A. JZB. JNZC. LOOPD. CALL答案:C二、填空题1. 汇编语言中的指令ADD AX, BX表示将AX和BX寄存器的值相加,并将结果存入____寄存器。

答案:AX2. 汇编语言中的指令SUB AX, BX表示将AX寄存器的值减去BX寄存器的值,并将结果存入____寄存器。

答案:AX3. 汇编语言中的指令CMP AX, BX用于比较AX和BX寄存器的值,但不进行存储操作,结果影响____标志。

答案:标志寄存器4. 汇编语言中的指令JMP LABEL用于无条件跳转到标签____处执行。

答案:LABEL5. 汇编语言中的指令PUSH AX将AX寄存器的值压入____。

答案:堆栈三、简答题1. 简述汇编语言与机器语言的区别。

答案:汇编语言是一种低级语言,它使用助记符来表示机器语言的指令,更易于人类理解和编写。

机器语言则是由二进制代码组成的指令集,直接被计算机硬件执行,但对人类来说难以阅读和编写。

2. 描述汇编语言中如何实现条件跳转。

答案:汇编语言中实现条件跳转通常使用条件跳转指令,如JZ(跳转如果零)、JNZ(跳转如果非零)、JMP(无条件跳转)等。

这些指令根据CPU的状态寄存器中的条件码标志来决定是否跳转到指定的标签处执行。

汇编语言试题及答案

汇编语言试题及答案

汇编语言试题及答案一、选择题1. 汇编语言是一种:A. 高级语言B. 低级语言C. 机器语言D. 标记语言答案:B2. 汇编程序的编译过程包括:A. 预处理、编译、链接B. 编译、链接、运行C. 编译、预处理、链接D. 链接、编译、预处理答案:A3. 下列哪项是汇编语言的指令:A. MOV AX, BXB. int main()C. print "Hello, World!"D. System.out.println("Hello, World!");答案:A二、填空题4. 在汇编语言中,指令______用于将数据从内存传送到寄存器。

答案:MOV5. 汇编语言中的______指令用于实现无条件跳转。

答案:JMP6. 汇编语言中的______指令用于实现条件跳转。

答案:JZ 或 JE(零标志跳转)三、简答题7. 简述汇编语言的特点。

答案:汇编语言是一种低级语言,它非常接近机器语言,通常用于编写硬件操作和系统软件。

其特点是执行效率高,但编程复杂度高,可读性和可移植性较差。

8. 汇编语言与机器语言有何区别?答案:汇编语言是一种符号化的机器语言,它使用助记符代替机器语言中的二进制代码,更易于人类理解和编写。

机器语言则是计算机硬件直接执行的指令集,通常以二进制形式存在。

四、编程题9. 编写一段汇编语言程序,实现将AX寄存器的值加1。

答案:INC AX10. 编写一段汇编语言程序,实现将内存地址[100]处的值与BX寄存器的值相加,并将结果存回内存地址[100]。

答案:MOV AX, [100]ADD AX, BXMOV [100], AX五、论述题11. 论述汇编语言在现代计算机系统中的作用和局限性。

答案:汇编语言在现代计算机系统中主要用于系统底层开发、硬件驱动编写、嵌入式系统编程等领域。

其作用在于能够直接控制硬件,实现高效的资源利用。

然而,由于其复杂度高、可读性差、可移植性低,它在高级应用开发中的使用受到限制。

汇编语言期末试卷(B卷)

汇编语言期末试卷(B卷)

华南农业大学期末考试试卷(B卷)2005学年第2学期考试科目:汇编语言考试类型:(闭卷)考试时间:120 分钟学号姓名年级专业一、简答题(20分,每小题4分)1、Intel 8086/8088 CPU为程序员提供的8个16位的通用寄存器的名称分别是什么?AX BX CX DX SI DI SP BP2、下列指令中,源操作数是什么寻址方式 ? 操作数的物理地址如何表达 ?MOV AX , 10H [DI] 寄存器相对寻址方式MOV DX , [BX][SI] 基址变址寻址方式3 .下列语句在存储器中分别为变量分配多少个字节 ?①AD1 DW 10H DUP(?) , 10H 34d②COUNT EQU 100 2d③AD2 DB 3 DUP(2 DUP (3)) 6d④AD3 DD COUNT DUP(?)400d4.下列程序段完成什么功能?D1 DD 12345678HD2 DD 9ABCDEF0HD3 DD ?┆MOV DX,D1MOV AX,D1+2MOV BX,D2MOV CX,D2+2ADD AX,CXADC DX,BXMOV D3,AXMOV D3+2,DX┆D1与D2带符号相加,把结果存放到D3寄存器中5、对于这样的程序段:CMP AX,BXJAE NEXTXCHG AX,BXNEXT: CMP AX,CXJAE DONEXCHG AX,CXDONE: ┆试回答:①上述程序执行后,原有AX,BX,CX中最大数存放在那个寄存器?AX②这三个数是带符号数还是无符号数?无符号!二、程序填空(15分,每空3分)要求:在下划线上填写合适内容,使程序完成所要求的功能,不能增加语句行。

1、下面过程将BX的值以2进制形式显示出来p1 proc nearjmp beginbegin: push axpush cxpush dxmov cx,16rotate: CMP BX,CXjc onemov dl,30hjmp dispone: mov dl,31hdisp: mov ah,2int 21hloop rotateRETpop cxpop axint 20hp1 endp2、数据段地址LIST开始存储一组字数据,其中首元素为数组长度,下列程序删除数组中的“零”元素。

华农C语言教材习题答案

华农C语言教材习题答案

注:答案仅供参考分期还款:#include <stdio.h>#include <math.h>int main(){double d, p,r;scanf("%lf%lf%lf",&d,&p,&r);printf("%.1f", log10(p/(p-d*r))/log10(1+r));return 0;}计算分段函数函数值:#include <stdio.h>int main(){double x;scanf("%lf",&x);if(x<1) printf("%.2f", x);else if(x>=1 && x<10) printf("%.2f", 2*x-1);else printf("%.2f", 3*x-11);}成绩等级评分:#include <stdio.h>#include <math.h>int main(){int score;scanf("%d", &score);if(score>100 || score<0)printf("error");else if(score>=90)printf("A");else if(score>=80)printf("B");else if(score>=70)printf("C");else if(score>=60)printf("D");elseprintf("E");return 0;}20秒后时间:#include <stdio.h>#include <stdlib.h>int main(){int h,m,s;scanf("%d:%d:%d", &h,&m,&s);s=s+20;if(s>59){s=s%60;m++;if(m>59){m=m%60;h++;if(h>23)h=0;}}printf("%02d:%02d:%02d\n", h, m, s);return 0;}分期还款(加强版):#include <stdio.h>#include <math.h>int main(){double d, p,r;scanf("%lf%lf%lf",&d,&p,&r);if(d==0)printf("0.0\n");else if(d*(1+r)-p>d)printf("God\n");else{printf("%.1f", log10(p/(p-d*r))/log10(1+r));}return 0;}字母分类统计:#include <stdio.h>#include <math.h>int main(){char ch;int nL=0, nN=0, nS=0, nO=0;while((ch=getchar())!='\n'){if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')nL++;else if (ch>='0'&&ch<='9')nN++;else if (ch==' ')nS++;elsenO++;}printf("%d %d %d %d\n", nL, nN, nS, nO);return 0;}计算数列和:#include<stdio.h>main(){ int i,n;double a=2,b=1,s=0;scanf("%d",&n);for(i=1;i<=n;i++){ s=s+a/b;a=a+b;b=a-b;}printf("%.4f\n",s);}自由落体:#include <stdio.h>#include <math.h>int main(){double sum=-100, d=100;int i,n;scanf("%d", &n);for(i=1; i<=n; i++){sum+=2*d;d/=2;}printf("%.3f %.3f", sum, d);return 0;}迭代法求平方根:#include <stdio.h>#include <math.h>int main(){double a, x0, x1=1;scanf("%lf", &a);do{x0=x1;x1=1.0/2*(x1+a/x1);}while(fabs(x1-x0)>=1e-5);printf("%.4lf\n", x1);return 0;}打印三角形:#include <stdio.h>#define abs(x) ((x)>=0?(x):-(x))int main(){int n,i,j;scanf("%d", &n);for(i=-(n-1); i<=(n-1); i++){for(j=0; j<abs(i); j++)printf(" ");for(j=0; j<n-abs(i); j++)printf("*");printf("\n");}return 0;}勾股数:#include <stdio.h>#include <math.h>int main(){int i,j,k,n;scanf("%d", &n);for(i=1; i<=n; i++)for(j=i; j<=n; j++){k=(int)sqrt(i*i+j*j);if(k*k==i*i+j*j && k<=n)printf("%d %d %d\n", i,j,k);}return 0;}插入数据:int n,i;scanf("%d", &n);for(i=14; i>=0; i--)if(a[i]>n) a[i+1]=a[i];else break;a[i+1]=n;输出不同的数:#include"stdio.h"main(){ int a[20];int i,t,p=0;for(i=0;i<10;i++){ scanf("%d",&a[i]);for(t=0;t<i;t++)if(a[t]==a[i])break;if(t==i)printf("%d\n", a[i]);}}鞍点:#include <stdio.h>#include <stdlib.h>int main(){int i,j,a[3][4],flag=0,col,r;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){col=0;for(j=1;j<4;j++)if(a[i][j]>a[i][col]) col=j;for(j=0;j<4;j++){if(a[i][j]==a[i][col]){for(r=0;r<3;r++)if(a[r][j]<a[i][j]) break;if(r==3){printf("%d\n", a[i][j]);flag=1;}}}}if(!flag)printf("NO\n");return 0;}回文串:#include "stdio.h"#include "string.h"main(){ int i, j;char buf[100];scanf("%s",buf);for(i=0, j=strlen(buf)-1;i<j; i++, j--)if(buf[i]!=buf[j]) break;if(i>=j)printf("Y");elseprintf("N");}ASCII码值之和的差:#include <stdio.h>int sum(char *s){int t=0,i=0;while(s[i]!='\0')t+=s[i++];return t;}int main(){char s1[81],s2[82];gets(s1);gets(s2);printf("%d", sum(s1)-sum(s2));return 0;}所有数字之和:#include "stdio.h"int sum(int n){int ret=0;while(n>0){ret+=n%10;n/=10;}return ret;}main(){int n;scanf("%d", &n);printf("%d", sum(n));}元音字母:#include "stdio.h"void yuan(char *s,char *s2){while(*s!='\0'){if(*s=='a' ||*s=='o' ||*s=='e' ||*s=='i' ||*s=='u' || *s=='A' ||*s=='O' ||*s=='E' ||*s=='I' ||*s=='U'){*s2=*s; s2++;}s++;}*s2='\0';}main(){char str[81], str2[81];gets(str);yuan(str,str2);printf("%s", str2);}字符统计:#include <stdio.h>#include <string.h>#include <math.h>int nL=0, nN=0;int statistics(char *s){int ret=0;while(*s!='\0'){if(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z')nL++;else if (*s>='0'&&*s<='9')nN++;else if (*s==' ')ret++;s++;}return ret;}int main(){char s[81];int nS;gets(s);nS = statistics(s);printf("%d %d %d\n", nL, nN, nS);return 0;}选择排序:#include <stdio.h>int sort(int a[], int n){int i,j,k,tmp;for(i=0;i<n-1; i++){k=i;for(j=i+1; j<n; j++)if(a[k]>a[j]) k=j;tmp=a[k];a[k]=a[i];a[i]=tmp;}}int main(){int a[10];int i;for(i=0; i<10; i++) scanf("%d", &a[i]);sort(a,10);for(i=0; i<10; i++) printf("%d\n", a[i]);return 0;}x的n次方:#include <stdio.h>int F(int x, int n){if(n==1) return x;else return F(x, n-1)*x;}int main(){int x, n;scanf("%d%d", &x, &n);printf("%d", F(x, n));return 0;}行列互换:#include <stdio.h>void s *a, int *b){int temp;temp=*a;*a=*b;*b=temp;}void col(int a[][4], int i, int j){int k;for(k=0; k<4; k++)s[k][i], &a[k][j]);}void row(int a[][4], int i, int j){int k;for(k=0; k<4; k++)s[i][k], &a[j][k]);}int main(){int a[4][4];int i,j;for(i=0; i<4; i++)for(j=0; j<4; j++)scanf("%d", &a[i][j]);col(a,0,2);row(a,0,2);col(a,1,3);row(a,1,3);col(a,0,3);row(a,0,3);for(i=0; i<4; i++){for(j=0; j<4; j++)printf("%d ", a[i][j]);printf("\n");}return 0;}学生信息统计:#include <stdio.h>void average(double a[][5], int n) {int i,j;double sum;for(i=0; i<n; i++){sum=0;for(j=0; j<5; j++)sum+=a[i][j];printf("%.2f ", sum/5);}printf("\n");}void average2(double a[][5], int n){int i,j;double sum;for(j=0; j<5; j++){sum=0;for(i=0; i<n; i++)sum+=a[i][j];printf("%.2f ", sum/n);}printf("\n");}void top(double a[][5], int n){int i,j; double max;for(j=0; j<5; j++){max=a[0][j];for(i=1; i<n; i++)if(a[i][j]>max) max = a[i][j];printf("%.2f ", max);}printf("\n");}int main(){double a[10][5];int i, j;for(i=0; i<10; i++)for(j=0; j<5; j++)scanf("%lf", &a[i][j]);average(a,10);average2(a,10);top(a,10);return 0;}一年的第几天:#include <stdio.h>struct DATE{int year;int month;int day;};int days(struct DATE date){int day,sum;if(date.year%4==0&&date.year%100!=0||date.year%400==0) {day=29;}else{day=28;};switch(date.month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=31+day;break;case 4:sum=62+day;break;case 5:sum=92+day;break;case 6:sum=123+day;break;case 7:sum=153+day;break;case 8:sum=184+day;break;case 9:sum=215+day;break;case 10:sum=245+day;break;case 11:sum=276+day;break;case 12:sum=306+day;break;};return(sum+date.day);}int main(){struct DATE d;scanf("%d-%d-%d", &d.year, &d.month, &d.day);printf("%d", days(d));}学生成绩表:#include <stdio.h>struct data{int num;char name[20];double score[3];double average;};int main(){int i,j;struct data stu[10],tmp;for(i=0; i<10; i++){scanf("%d%s%lf%lf%lf", &stu[i].num, stu[i].name, stu[i].score, stu[i].score+1, stu[i].score+2);stu[i].average=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; } for(i=0; i<9; i++)for(j=0; j<9-i; j++){if(stu[j].average<stu[j+1].average){tmp=stu[j];stu[j]=stu[j+1];stu[j+1]=tmp;} }for(i=0; i<10; i++){printf("%d %s %.0lf %.0lf %.0lf\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}return 0;}。

华农C语言教材习题答案

华农C语言教材习题答案

华农C语言教材习题答案注:答案仅供参考分期还款:#include#includeint main(){double d, p,r;scanf("%lf%lf%lf",&d,&p,&r);printf("%.1f", log10(p/(p-d*r))/log10(1+r)); return 0;}计算分段函数函数值:#includeint main(){double x;scanf("%lf",&x);if(x<1) printf("%.2f", x);else if(x>=1 && x<10) printf("%.2f", 2*x-1); else printf("%.2f", 3*x-11);}成绩等级评分:#include#includeint main(){int score;scanf("%d", &score);if(score>100 || score<0)printf("error");else if(score>=90)printf("A");else if(score>=80)printf("B");else if(score>=70)printf("C");else if(score>=60)printf("D");elseprintf("E");return 0;}20秒后时间:#include#includeint main(){int h,m,s;scanf("%d:%d:%d", &h,&m,&s); s=s+20;if(s>59){s=s%60;m++;if(m>59){m=m%60;h++;if(h>23)h=0;}}printf("%02d:%02d:%02d\n", h, m, s); return 0;}分期还款(加强版):#include#includeint main(){double d, p,r;scanf("%lf%lf%lf",&d,&p,&r);if(d==0)printf("0.0\n");else if(d*(1+r)-p>d)printf("God\n");else{printf("%.1f", log10(p/(p-d*r))/log10(1+r)); }return 0;}字母分类统计:#include#includeint main(){char ch;int nL=0, nN=0, nS=0, nO=0;while((ch=getchar())!='\n'){if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')nL++;else if (ch>='0'&&ch<='9')nN++;else if (ch==' ')nS++;elsenO++;}printf("%d %d %d %d\n", nL, nN, nS, nO); return 0;}计算数列和:#includemain(){ int i,n;double a=2,b=1,s=0;scanf("%d",&n);for(i=1;i<=n;i++){ s=s+a/b;a=a+b;b=a-b;}printf("%.4f\n",s);}自由落体:#include#includeint main(){double sum=-100, d=100; int i,n;scanf("%d", &n);for(i=1; i<=n; i++){sum+=2*d;d/=2;}printf("%.3f %.3f", sum, d); return 0;}迭代法求平方根:#include#includeint main(){double a, x0, x1=1;scanf("%lf", &a);do{x0=x1;x1=1.0/2*(x1+a/x1);}while(fabs(x1-x0)>=1e-5); printf("%.4lf\n", x1); return 0;}打印三角形:#include#define abs(x) ((x)>=0?(x):-(x)) int main(){int n,i,j;scanf("%d", &n);for(i=-(n-1); i<=(n-1); i++) {for(j=0; j<="" p="">printf(" ");for(j=0; j<="" p="">printf("*");printf("\n");}return 0;}勾股数:#include#includeint main(){int i,j,k,n;scanf("%d", &n);for(i=1; i<=n; i++)for(j=i; j<=n; j++){k=(int)sqrt(i*i+j*j);if(k*k==i*i+j*j && k<=n) printf("%d %d %d\n", i,j,k);}return 0;}插入数据:int n,i;scanf("%d", &n);for(i=14; i>=0; i--)if(a[i]>n) a[i+1]=a[i]; else break;a[i+1]=n;输出不同的数:#include"stdio.h"main(){ int a[20];int i,t,p=0;for(i=0;i<10;i++){ scanf("%d",&a[i]);for(t=0;t<i;t++)< p=""> if(a[t]==a[i])break;if(t==i)printf("%d\n", a[i]);}}鞍点:#include#includeint main(){int i,j,a[3][4],flag=0,col,r; for(i=0;i<3;i++)for(j=0;j<4;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++){col=0;for(j=1;j<4;j++)if(a[i][j]>a[i][col]) col=j; for(j=0;j<4;j++){if(a[i][j]==a[i][col]) {for(r=0;r<3;r++)if(a[r][j]<="" p="">if(r==3){printf("%d\n", a[i][j]); flag=1;}}}}if(!flag)printf("NO\n");return 0;}回文串:#include "stdio.h"#include "string.h" main(){ int i, j;char buf[100];scanf("%s",buf);for(i=0, j=strlen(buf)-1;i<="" p=""> if(buf[i]!=buf[j]) break;if(i>=j)printf("Y");elseprintf("N");}ASCII码值之和的差:#includeint sum(char *s){int t=0,i=0;while(s[i]!='\0')t+=s[i++];return t;}int main(){char s1[81],s2[82];gets(s1);gets(s2);printf("%d", sum(s1)-sum(s2)); return 0;}所有数字之和:#include "stdio.h"int sum(int n){int ret=0;while(n>0){ret+=n%10;n/=10;}return ret;}main(){int n;scanf("%d", &n);printf("%d", sum(n));}元音字母:#include "stdio.h"void yuan(char *s,char *s2){while(*s!='\0'){if(*s=='a' ||*s=='o' ||*s=='e' ||*s=='i' ||*s=='u' || *s=='A' ||*s=='O' ||*s=='E' ||*s=='I' ||*s=='U'){*s2=*s; s2++;}s++;}*s2='\0';}main(){char str[81], str2[81];gets(str);yuan(str,str2);printf("%s", str2);}字符统计:#include#include#includeint nL=0, nN=0;int statistics(char *s){int ret=0;while(*s!='\0'){if(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z')nL++;else if (*s>='0'&&*s<='9') nN++;else if (*s==' ')ret++;s++;}return ret;}int main(){char s[81];int nS;gets(s);nS = statistics(s);printf("%d %d %d\n", nL, nN, nS); return 0;}选择排序:#includeint sort(int a[], int n){int i,j,k,tmp;for(i=0;i<="" p="">{k=i;for(j=i+1; j<="" p="">if(a[k]>a[j]) k=j;tmp=a[k];a[k]=a[i];a[i]=tmp;}}int main(){int a[10];int i;for(i=0; i<10; i++) scanf("%d", &a[i]); sort(a,10);for(i=0; i<10; i++) printf("%d\n", a[i]); return 0;}x的n次方:#includeint F(int x, int n){if(n==1) return x;else return F(x, n-1)*x;}int main(){int x, n;scanf("%d%d", &x, &n); printf("%d", F(x, n));return 0;}行列互换:#includevoid s *a, int *b){int temp;temp=*a;*a=*b;*b=temp; }void col(int a[][4], int i, int j) {int k;for(k=0; k<4; k++)s[k][i], &a[k][j]);}void row(int a[][4], int i, int j) {int k;for(k=0; k<4; k++)s[i][k], &a[j][k]);}int main()int a[4][4];int i,j;for(i=0; i<4; i++)for(j=0; j<4; j++)scanf("%d", &a[i][j]);col(a,0,2);row(a,0,2);col(a,1,3);row(a,1,3);col(a,0,3);row(a,0,3);for(i=0; i<4; i++){for(j=0; j<4; j++)printf("%d ", a[i][j]);printf("\n");}return 0;}学生信息统计:#includevoid average(double a[][5], int n) { int i,j;double sum;for(i=0; i<="" p="">{sum=0;for(j=0; j<5; j++)sum+=a[i][j];printf("%.2f ", sum/5);printf("\n");}void average2(double a[][5], int n) {int i,j;double sum;for(j=0; j<5; j++){sum=0;for(i=0; i<="" p="">sum+=a[i][j];printf("%.2f ", sum/n);}printf("\n");}void top(double a[][5], int n) {int i,j; double max;for(j=0; j<5; j++){max=a[0][j];for(i=1; i<="" p="">if(a[i][j]>max) max = a[i][j]; printf("%.2f ", max);}printf("\n");}int main(){double a[10][5];int i, j;for(i=0; i<10; i++)for(j=0; j<5; j++)scanf("%lf", &a[i][j]);average(a,10);average2(a,10);top(a,10);return 0;}一年的第几天:#includestruct DATE{int year;int month;int day;};int days(struct DATE date){int day,sum;if(date.year%4==0&&date.year%100!=0||date.year%400== 0) {day=29;}else{day=28;};switch(date.month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=31+day;break;case 4:sum=62+day;break;case 5:sum=92+day;break;case 6:sum=123+day;break;case 7:sum=153+day;break;case 8:sum=184+day;break;case 9:sum=215+day;break;case 10:sum=245+day;break;case 11:sum=276+day;break;case 12:sum=306+day;break;};return(sum+date.day);}int main(){struct DATE d;scanf("%d-%d-%d", &d.year, &d.month, &d.day); </i;t++)<>。

(完整版)汇编语言习题详解(全部)(免费)

(完整版)汇编语言习题详解(全部)(免费)

《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

华南农业大学编译原理题库

华南农业大学编译原理题库

华南农业大学期末考试题库(含参考答案)考试科目: 编译原理 考试时间: 120 分钟学号 姓名 年级专业 题号 一 二 三 四 五 总分 得分评阅人 一、本题共6小题,每小题5分,共30分。

1、写出下面右线性正规文法所对应的正规式。

2、给出下面语言集合的上下文无关文法。

(2010 2014)L 1={ a n b m2、为正规集L 2={a n b m c k | n ≥1,m ≥1,k ≥1}构造一右线性正规文法。

(2010)3、按照编译过程的5个阶段得到编译程序的逻辑结构框图如下:得分S → aDD → bD | aA | b A → aD文法所对应的正规式为: a(b|aa)*b文法: S → aS | DD → aDb | abS → aS | aA A → bA | bB B → cB | c4、简述编译过程的5个阶段及各阶段的主要功能。

(多年必考)编译过程即编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串组合成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其含义并进行初步翻译;④代码优化,对代码进行等价变换,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。

这句话是错的。

优化不是编译程序必须的一个部分,含有优化的编译程序功能更强、算法更复杂,因而开发效率和执行效率低些,但得到的目标代码的效率通常更高。

6、简述语法制导翻译技术的基本思想。

(2013)语法制导翻译技术的基本思想是,对文法中的每个产生式都附加一个语义动作或语义子程序,在执行语法分析的过程中,当运用该产生式进行推导或归约时,就执行相应的语义动作,从而完成预定的翻译工作。

7、简述算符优先分析方法。

《汇编语言》习题及解答

《汇编语言》习题及解答

第1章基础知识检测点(第9页)(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。

(2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。

(3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。

~(4)1GB是24(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。

(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。

则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。

(7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

解题过程:'(1)1KB=1024B,8KB=1024B*8=2^N,N=13。

(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。

(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。

(4)1GB=24B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。

(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。

这样的CPU最多可以寻找2的N次方个内存单元。

(一个内存单元=1Byte)。

(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。

(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。

(8)在存储器中指令和数据没有任何区别,都是二进制信息。

《汇编语言程序设计》考试练习题及答案

《汇编语言程序设计》考试练习题及答案

《汇编语言程序设计》考试练习题及答案一、单选题1. 计算机中存取信息或数据的最小单位为()A 、位B 、字节C 、字D 、双字答案:B2. 调用子程序的指令为()A 、CALLB 、RETC 、HLTD 、NOP答案:A3. DOS功能调用是通过()指令去调用DOS系统提供的软件中断处理程序A 、INT 21HB 、INT 23HC 、INT 12HD 、INT 11H答案:A4. 满足()时,CPU允许中断A 、IF=0B 、IF=1C 、DF=0D 、DF=1答案:B5. 完成对CL寄存器的内容乘以4的正确操作是()。

A 、ROL CL,1 ROL CL, 1B 、MUL 4C 、SHL CL, 1 SHL CL, 1D 、MOV CL , 2 SHL CL, CL答案:C6. 下面寄存器中可以分为两个独立8位寄存器的是()A 、AXB 、DIC 、CSD 、SI答案:A7. ()是用二进制编码的机器指令的集合及一组使用机器指令的规则,是CPU能直接识别的唯一语言。

A 、汇编语言B 、机器语言C 、JAVA语言D 、C语言答案:B8. 源程序模块结束语句为()A 、ORGB 、ENDC 、SEGMENTD 、START答案:B9. 8位补码表示的有符号数的表示范围是()A 、0~255B 、-128~+127C 、0~65535D 、-32768~+32767答案:B10. 在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来,下列说法正确的是()A 、占内存空间小,但速度慢B 、占内存空间大,但速度快C 、占内存空间相同,但速度快D 、占内存空间相同,但速度慢答案:B11. 与LEABX ,BUF指令完全等效的指令是()。

A 、MOV BX ,BUFB 、LDS BX ,BUFC 、MOV BX ,OFFSET BUFD 、MOV BX ,WORD PTR BUF答案:C12. 14的非压缩BCD码为()A 、00010100B 、01000001C 、0000000000010100D 、0000000100000100答案:D13. 要实现使BETA的值为56,应采用的语句是()A 、BETA DB 56B 、BETA DB 56HC 、BETA EQU 56HD 、BETA EQU 56答案:D14. ()不可以做目的操作数A 、立即数B 、寄存器C 、存储器操作数D 、累加器答案:A15. 计算机一般由中央处理器、存储器和输入/输出子系统组成,其中()可以存放程序、数据、信息及中间结果。

汇编语言程序设计练习题及参考答案

汇编语言程序设计练习题及参考答案

一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。

1.用来存放下一条将要执行的指令地址的寄存器是(B)A.SP B.IP C.BP D.CS2.要使串处理从低地址向高地址进行,应把标志位置为(D)A.IF=1B.TF=0C.DF=1D.DF=03.使状态标志位CF清零的错误指令是(C)A.OR AX,AX B.SUB AX,AXC.MOV CF,0D.CLC4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B)A.SP=1112H B.SP=110EHC.SP=1111H D.SP=110FH5.汇编源程序出现语法错误的指令有(D)A.MOV[BX+SI],AL B.MOV AX,[BP+DI]C.MOV DS,AX D.MOV CS,AX6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D)A.STOSW B.LODSWC.SCASW D.CMPSW7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B)A.SHR BL,1B.SHL BL,1C.SAR BL,1D.RCR BL,18.执行PUSH AX指令的正确步骤是(A)A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-12.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+12.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+19.CF=1时转移到目标地址的条件转移指令是(B)A.JNC B.JC C.JZ D.JS10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C)A.对正数求补时,CF=0B.对负数求补时,CF=0C.对非零数求补时,CF=1D.对零求补时,CF=111.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A)A.目的操作数最高位为0B.目的操作数最高位为1C.目的操作数为任意情况D.无论什么情况都不可能相同12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D)A.AX=0032H B.AX=00E0HC.AX=03E0H D.AX=0FFE0H13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)A.MOV AX,BUFl*BUF2B.MOV AX,BUF1/BUF2C.MOV AX,BUF1+ES:BUF2D.MOV AX,BUF2-BUF114.下面指令中,操作数的寻址方式为寄存器间接寻址的指令是(C )A.INC WORD PTR [BX+SI]B.INC CX,[SI+COUNT]C.NEG BYTE PTR [BX]D.ADD AX,B15.NUM EQU 80HDA DB 34HAND DA,NUM上述语句执行后,DA 中的内容是(D )A.0B4H B.80H C.34H D.016.直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(A )A.立即、直接、间接B.直接、间接、立即C.直接、立即、间接D.不一定17.语句DA1DB 2DUP(3,5,7)汇编后,该语句可等同于的语句是(D )A.DA1DB 3,5,7B.DA1DB 2,3,5,7C.DA1DB 3,5,7,2D.DA1DB 3,5,7,3,5,718.MOV AL,80HMOV CL,2SAR AL,CL上述指令序列执行后,结果是(D )A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H19.下面是实现将AL 内容加1的压缩型BCD 码加法程序段,其中正确的指令序列是(A )A.INC AL B.ADD AL,1DAA DASC.ADD AL,1D.STCDAA AAA20.现有数据存储如图所示:30100H 30101H 30102H 30103H 设AL=01H,BX=0100H,DS=3000H 执行换码指令XLAT 后正确的结果是(B )A.AL=20H B.AL=38HC.AL=00H D.AL=41H21.若定义DAT DW 'A',则(DAT)和(DAT+1)两个相邻的内存中存放的数据是(B )A.0041H B.4100H 20H38H41H55HC.xx41H D.41xxH[注]选项C.和D.中的XX表示任意数据。

汇编语言考试题库及答案

汇编语言考试题库及答案

汇编语言考试题库及答案一、选择题1. 在汇编语言中,以下哪个指令用于将数据从内存加载到寄存器中?A. MOVB. ADDC. SUBD. MUL答案:A2. 假设寄存器AX的值为1234H,执行指令“AND AX, 0F0H”后,AX 的值是多少?A. 1230HB. 0F34HC. 0F30HD. 1234H答案:C二、填空题1. 在汇编语言中,________指令用于将立即数加载到寄存器中。

答案:MOV2. 寄存器EAX的高16位是_______。

答案:AX三、简答题1. 解释汇编语言中的“段”是什么概念?答案:在汇编语言中,“段”是内存管理的一个概念,用于将程序的不同部分(如代码、数据、堆栈)分隔开来。

每个段都是内存中的一个区域,它有一个段基址,程序中的地址由段基址和偏移量组合而成。

2. 描述汇编语言中循环结构的实现方式。

答案:循环结构在汇编语言中通常通过标签和跳转指令实现。

首先定义一个循环的开始标签,然后在循环体中执行需要重复的操作。

循环结束前使用条件跳转指令(如JE、JNE等)跳回循环开始的标签,直到满足跳出循环的条件。

四、编程题1. 编写一个汇编程序,实现将两个16位无符号数相加,并将结果存储在寄存器AX中。

答案:```MOV AX, 1234HMOV BX, 5678HADD AX, BX```上述程序首先将1234H加载到AX寄存器中,然后将5678H加载到BX寄存器中,最后使用ADD指令将BX中的值加到AX中,结果存储在AX寄存器中。

2. 编写一个汇编程序,实现将字符串"Hello, World!"存储在内存中。

答案:```.DATAString DB 'Hello, World!', 0```上述程序在数据段定义了一个字符串"Hello, World!",后面跟着一个空字符作为字符串的结束标记。

汇编语言试题及答案

汇编语言试题及答案

汇编语言试题及答案一、选择题1. 下列汇编指令中,用于加载立即数至寄存器的是:A. MOVB. ADDC. SUBD. XOR答案:A. MOV2. MOV指令中,源操作数与目的操作数的位数必须相同吗?A. 是B. 否答案:B. 否3. 下列指令中,用于从内存读取数据的是:A. MOVB. JMPC. ADDD. LEA答案:D. LEA4. 下列寻址方式中,可以直接给出操作数的地址的是:A. 直接寻址B. 间接寻址C. 寄存器寻址D. 寄存器间接寻址答案:A. 直接寻址5. CPU中的程序计数器(PC)用于保存:A. 下一条指令的地址B. 当前指令的地址C. 上一条指令的地址D. 中断服务程序的地址答案:A. 下一条指令的地址二、填空题1. 8086处理器的数据总线位数是_________。

答案:162. MOV AX, BX 汇编指令是将______的值复制到______。

答案:BX,AX3. 寻址方式LEA BX, [SI+DI]的含义是将_______与_______的和作为BX的值。

答案:SI,DI4. 8086处理器的寻址空间大小是_________。

答案:1MB5. 标志寄存器中的ZF标志位表示_________。

答案:零标志位,表示结果为零三、简答题1. 简述什么是汇编语言?汇编语言是一种底层的程序设计语言,通过使用助记符来代替具体的操作码,使得编写的代码易于阅读和理解。

汇编语言直接操作计算机硬件,与机器语言密切相关,最终会被翻译成机器语言运行在计算机上。

2. 什么是寄存器?寄存器是计算机内部用于存储数据和执行操作的高速存储器。

不同的计算机体系结构会有不同的寄存器数量和用途。

寄存器的访问速度非常快,因此在编写汇编语言代码时,经常使用寄存器来进行数据的操作和传递。

3. 请举例说明MOV指令的用法及其作用。

MOV指令用于将数据从一个位置复制到另一个位置。

它可以将立即数、寄存器或内存中的数据复制到目标寄存器或内存位置。

华农汇编期末试卷test1(有答案版)

华农汇编期末试卷test1(有答案版)

汇编语言1一、简答题1.下面程序段执行后,寄存器BX的值发生什么变化?(不考虑溢出)SAL BX,1PUSH BXMOV CL,4SAL BX,CLPOP CXSUB BX,CX答:寄存器BX的值变为原来的30倍2.对于这样的程序段:CMP AX,BXJGE NEXTXCHG AX,BXNEXT: CMP AX,CXJGE DONEXCHG AX,CXDONE: ┆试回答:①上述程序执行后,原有AX,BX,CX中最大数存放在哪个寄存器?答:AX②这三个数是带符号数还是无符号数?答:带符号数3.已知寄存器(DS)=1000H,(SS)=1110H,(BX)=100H,(BP)=100H,(SI)=0002H,(SP)=100H;内存单元中的(10100H)=12H,(10101H)=34H,(10102H)=56H,(10103H)=78H,(11200H)=0ABH,(11201H)=0CDH,(11202H)=0EFH,(11203H)=0D3H。

试说明下列各指令执行完后AX寄存器的内容。

指令 AX的内容① MOV AX,1200H ① 1200H② MOV AX,BX ② 100H③ MOV AX,[1200H] ③ CDABH④ MOV AX,[B P] ④ CDABH⑤ MOV AX,1100H[BX] ⑤ CDABH⑥ MOV AX,[BX][SI] ⑥ 7856H⑦ MOV AX,1100H[BX][SI]⑦ D3EFH⑧ POP AX⑧ CDABH4. A DB 0F8HB DB 3 DUP(?)┇LEA DI,BMOV CX,3MOV AL,ALOP:SAR AL,1MOV [DI],ALINC DILOOP LOP上述程序段运行后,从B单元开始依次存放的数据是多少?答:FCH、FEH、FFH5.执行下面的程序段后,AX和BX寄存器的内容各是多少?MOV AX,1MOV BX,23MOV SI,10XCHG AX,BXMUL SIADD BX,AX答:AX和BX寄存器的内容分别是231和230二、程序填空题下面是一个.com文件格式的程序,完成从键盘上输入一个4位以内的16进制数,并以10进制形式显示出来。

汇编语言课后习题及答案 按章节 超全面

汇编语言课后习题及答案 按章节 超全面

`00第一章课外练习题一、单项选择题:1.从键盘输入的字符,在计算机内存储的是它的(A)(A)二进制编码(B)四进制编码(C)八进制编码(D)十六进制编码2.6位无符号二进制数能表示的最大十进制数是(B)。

(A)64 (B)63 (C)32 (D)31 3.十进制数269变换为十六进制数是(C)。

(A)10B (B)10C (C)10D (D)10E 4.8位的微型计算机系统是以16位来表示地址,则该微机系统有(C)个地址空间。

(A)255 (B)65535 (C)65536 (D)1048576 5.8位有符号二进制数能表示的最大十进制数是(D)。

(A)256 (B)255 (C)128 (D)127 6.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。

(A)无符号十进制数136 (B)带符号十进制数-120(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示7.有一个数值152,它与十六进制数6A相等,那么该数值是(B)。

(A)二进制数(B)八进制数(C)十进制数(D)四进制数8.7位ASCII总共可表示(C)个符号。

(A)256 (B)127 (C)128 (D)255 9.4B的字长是(C)。

(A)8位(B)16位(C)32位(D)64位二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.字节通常用英文单词“Bit”来表示(×)。

2.目前广泛使用的Pentium计算机其字长为5个字节(×)。

3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节(√)。

4.微型计算机的字长并不一定是字节的整数倍(×)。

三、填空题1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F)/(00~~FF)。

2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表(a)字符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华南农业大学汇编语言8086习题(附答案) 2————————————————————————————————作者:————————————————————————————————日期:2题目名称实验一汇编语言程序结构题目关键字源程序结构 debug题目录入时间2013-3-13 22:45:26题目内容一、实验目的1.掌握汇编语言程序上机过程。

2.掌握汇编语言结构。

3.了解汇编程序、连接程序、DOS系统装入和返回功能。

4.掌握用DEBUG调试汇编语言程序的方法二、实验要求1. 编写完整的汇编语言程序:(1)逆序输出字符串“BASED ADDRESSING”。

(2)从键盘上输入2个一位的正数,求出它们的和(假设和不超过1 位)。

(3)试编写一段程序,要求在长度为100H字节的数组中,找出大于42H 的无符号数的个数并存入字单元UP中;找出小于42H的无符号数的个数并存入字单元DOWN中。

2.在DEBUG下查看程序执行的过程,以及变量值的变化。

3.演示程序运行结果,请指导教师检查。

三、思考1.汇编语言程序中语句END后的标号作用是什么?2.采用标准序结构编制源程序,用ret结束程序运行返回操作系统时,可否将语句main proc far中的far属性去掉,为什么?3.一个段的大小为多少?一定是64KB吗?如何在DEBUG下查看程序在内存的存放情况?四、提交内容将各个源程序代码、exe文件压缩为RAR后提交到作业系统。

题目创建人题目注释DA TAS SEGMENTString db "BASED ADDRESSING"count dw $-StringDA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov cx,count ;循环次数lea si,count-1 ;将最后一个字符‘G’的地址给si L:mov ah,2mov dl,[si]dec siint 21hloop LMOV AH,4CHINT 21HCODES ENDSEND START1.2.asmDA TAS SEGMENTx db "x=$"y db "y=$"z db "x+y=$"DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov ah,9 ;显示"x="lea dx,xint 21hmov ah,1 ;输入Xint 21hsub al,30hmov cl,al ;将X放在CLmov ah,9 ;显示"y="lea dx,yint 21hmov ah,1 ;输入Yint 21hsub al,30hadd cl,al ;两数字相加mov ah,9 ;显示"z="lea dx,zint 21hmov ah,2 ;显示结果mov dl,cladd dl,30hint 21hMOV AH,4CHINT 21HCODES ENDSEND START1.3.asmDA TAS SEGMENTarray db 128 dup(41h,43h)up dw 0down dw 0DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXlea di,arraymov cx,256L:mov al,[di]cmp al,42hjl L1ja L2L1:inc downjmp L3L2:inc upjmp L3L3:inc diloop LMOV AH,4CHINT 21HCODES ENDSEND START题目名称实验二程序结构与简单程序设计题目关键字简单程序设计题目录入时间2013-4-1 22:45:55题目内容一、实验目的1.掌握汇编语言源程序结构。

2.掌握汇编语言调试方法。

二、实验要求1.编写完整的汇编语言程序:(1) 试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。

(2) 编写程序,从键盘接收一个小写字母,然后找出它的前导字母和后续字母,再按顺序显示这三个字符。

(3) 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NOMATCH”.(4) 编写程序,将一个包含有20个数据的数组M分成2个数组:正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。

2.在DEBUG下查看程序执行的过程,以及变量值的变化。

3.演示程序运行结果,请指导教师检查。

三、思考对输入的非字母字符如何处理?2. 字母“a”和“z”边界字符的处理方法是什么?3. 显示结果为多位数的时候如何输出?四、提交内容将各个源程序代码、exe文件,思考题的WORD文档压缩为RAR后提交到作业系统。

题目创建人题目注释2.1.asmDA TAS SEGMENTcrlf db 0ah,0dh,'$'DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ah,1 ;输入数据会ALint 21hpush ax ;将AX存进栈里lea dx,crlf ;换行mov ah,9int 21hpop dx ;栈里数据放进DX,即将原先AX放进DXsub dl,20h ;小写变大写要减去20hmov ah,2 ;输出int 21hMOV AH,4CHINT 21HCODES ENDSEND START2.2.asmDA TAS SEGMENTString db 'zabcdefghijklmnopqrstuvwxyza'DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXlea di,Stringmov ah,1 ;输入字母int 21hL:inc di ;先DI自加1,第一次就是‘a’的地址,不是‘z’cmp al,[di] ;直到找到字母和输入的相匹配jnz Ldec di ;推前成为前端字母的地址mov cx,3 ;循环次数3L2:mov dl,[di]inc dimov ah,2int 21hloop L2MOV AH,4CHINT 21HCODES ENDSEND START2.3.asmDA TAS SEGMENTString1 db "this is a program"count1 dw $-String1String2 db "this is a program"count2 dw $-String2answer1 db 'match','$'answer2 db 'no match','$'DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ax,count1mov bx,count2cmp ax,bx ;比较两个字符串的长度,如果不等就是不匹配jnz nextmov cx,count1 ;字符串长度lea si,string1lea di,string2L:mov al,[si]cmp al,[di] ;比较两个字符串的字符,如果不等就跳jnz nextinc siinc diloop Llea dx,answer1 ;能到这里说明都匹配mov ah,9int 21hjmp finally ;跳去finally,避免顺序执行了nextnext: ;显示不匹配lea dx,answer2mov ah,9int 21hfinally:MOV AH,4CHINT 21HCODES ENDSEND START2.4.asmDA TAS SEGMENTM db 5 dup(-1,1,2,3)P dw 0N dw 0DA TAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKS START:MOV AX,DATASMOV DS,AXlea si,Mmov cx,20 ;循环次数L:mov al,[si]cmp al,0 ;和0比较判断正负jl L1jg L2L1:inc Njmp L3L2:inc Pjmp L3L3:inc siloop Lmov ax,P ;输出Pmov bl,10 ;设置除数10div blmov bh,ah ;将ah(余数放在bh保留) mov dl,al ;将商显示add dl,30hmov ah,2int 21hmov dl,bh ;将余数显示add dl,30hmov ah,2int 21hmov ax,N ;输出Nmov bl,10div blmov bh,ahmov dl,aladd dl,30hmov ah,2int 21hmov dl,bhadd dl,30hmov ah,2int 21hMOV AH,4CHINT 21HCODES ENDSEND START题目名称实验三分支程序设计题目关键字分支结构题目录入时间2013-4-14 20:14:57题目内容一、实验目的1. 掌握汇编语言源程序结构。

2. 掌握汇编语言分支结构程序设计方法。

二、实验要求1.编写完整的汇编语言程序:(1) 试编写一段程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。

(2) 编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。

(3) 键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。

相关文档
最新文档