汇编语言程序设计第二次实验题目

合集下载

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。

在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。

LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。

2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。

在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。

三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。

四、实验步骤1、使用循环指令实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

2、使用循环结构实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。

山东大学汇编语言上机实验——实验二

山东大学汇编语言上机实验——实验二

程序的基本结构练习一:循环程序设计一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

2.设STR字符串是以0结尾。

试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。

3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。

四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

1)输入源程序:DA TA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DWB DW DA TA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。

2、熟悉DEBUG程序的使用方法。

3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。

二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。

2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。

三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。

2、预习DEBUG调试程序的使用方法。

3、根据实验内容要求,编写好实验源程序。

四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。

2、汇编、连接源程序,产生.EXE可执行文件。

3、运行程序。

(1) 进入DEBUG。

打入DEBUGT MYPROG.EXE。

MYPROG为所编程序的文件名。

(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。

如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。

(3) 检查程序。

在程序中设置若干断点,以便杳出错误所在。

(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。

五、实验报告要求1、列出程序清单,并给出程序流程图。

2、总结实现数据传送的几种方法,指出它们的区别。

开始3、分析实验中所遇到的一些问题,分析错误原因。

4、说明本实验中是如何使用DEBUG进行调试的。

CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。

2020年中国石油大学北京网络学院 汇编语言程序设计-第二次在线作业 参考答案

2020年中国石油大学北京网络学院 汇编语言程序设计-第二次在线作业 参考答案

中国石油大学北京网络学院
汇编语言程序设计-第二次在线作业
参考答案
1.(
2.5分)下列叙述正确的是:
A、对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS 指令
B、对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP 指令
C、对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL 指令
D、对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB 指令
我的答案:C 此题得分:2.5分
2.(2.5分)在下列指令的表示中,不正确的是:
A、MOV AL,[BX+SI]
B、JMP SHORT DONING
C、DEC [BX]
D、MUL CL
我的答案:C 此题得分:2.5分
3.(2.5分)在进行二重循环程序设计时,下列描述正确的是:。

汇编语言第二次实验报告

汇编语言第二次实验报告

汇编语言实验报告姓名:王先海专业:网络工程班级:133班学号:139074347实验内容一:编写一个程序,用来显示AL寄存器中的两位十六进位制数程序清单:datas segmentdata db '0123456789ABCDEF'datas endscodes segmentassume cs:codes,ds:datasstart: mov ax,55hmov bx,datasmov ds,bxmov bx,offset datapush axmov cl,04hlab1: shr al,1 ;循环4次逻辑右移1位取高位16进制数dec cljnz lab1xlatmov dl,almov ah,2int 21hpop axmov cl,04hmov ch,7fhlab2: and al,ch ;循环4次and使al高四位清零ror ch,1dec cljnz lab2xlatmov dl,almov ah,02hint 21hmov ah,4chint 21hcodes endsend start1.运行结果:2.思考与体会:循环需要一个跳出条件。

XLAT指令用来将AL中的内容置换成以(BX)为首址(AL)为位移量的内存单元中的内容。

实验内容二:1.程序说明:本程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。

首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。

1-9字符,则显示之。

若是若小于0,则重新等待输入。

若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’。

2.程序清单:datas segmentstr db ?,0ah,0dh,'$',' input again!',0ah,0dh,'$'datas endscodes segmentassume cs:codes,ds:datasstart: mov ax,datasmov ds,axnext1: mov ah,01hint 21hcmp al,0dhjz exitlea dx,strmov bx,dxnext2: cmp al,'1'jb next7cmp al,'9'ja next3mov [bx],aljmp next6next3: cmp al,'a'jb next4cmp al,'z'ja next7jmp next5next4: cmp al,'A'jb next7cmp al,'Z'ja next7next5: mov [bx],byte ptr 'c'next6: mov ah,9int 21hjmp next1next7: lea dx,str+4mov ah,9int 21hjmp next1exit: mov ah,4chint 21hcodes endsend start3.运行结果:4.思考与体会:根据条件判定进入不同的分支程序。

汇编第二次上机实验

汇编第二次上机实验

汇编第二次上机实验班级:姓名:学号:时间:2012年11月2日题目:写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果放在D_SEG中的SUM中。

其中AUGEND,ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。

一、设计思路在数据段中分配两个双字AUGEND和SUM,AUGEND初始化为99251,在附加段中分配一个双字ADDEND并初始化为-15962。

然后利用寄存器AX对低位字相加,DX对高位字相加。

最后将结果放回SUM单元。

二、详细设计过程1.设计源代码新建一个文本文件,并把拓展名改为asm,我命名为“plus.asm”。

根据上述思路,设计出源代码。

写好之后先自行检查一下,更改语法错误并保存。

最终代码见附录。

2.对源程序进行汇编在命令提示符下,转到源文件plus.asm所在目录,输入命令“masm plus”。

若汇编有错误,根据错误提示修改源文件并重新汇编,直到显示“0 Waring Errors和0 Severe Errors”,汇编通过。

结果如图1。

图1 汇编结果3.用LINK程序产生EXE文件上一步产生的OBJ文件虽然是二进制的,但不是可执行的,还必须通过连接程序进行连接,使其转换成EXE可执行文件。

输入命令“link plus”,按ENTER,根据提示进行操作。

由于源程序中没有定义堆栈段,而是使用系统的堆栈段,连接程序给出无堆栈段的警告,但并不影响程序运行,如图2。

到此,已经得到了程序。

图2 连接结果4.执行和调试程序输入命令“plus”,发现并没显示结果如图3。

这是因为程序中没有调用中断把结果输出到屏幕上,其实程序已经瞬间执行完成并返回DOS了。

要看到执行的结果,只能使用命令调试程序了。

调用命令“debug plus.exe”,在调试模式下,输入“t d”执行13条指令,使程序停止在RETF指令处,用“d DS:0,LA”和“d ES:0,LA”显示数据段和附加段的前10个字节,如图4。

微机实验二

微机实验二

实验二:汇编语言(三种基本结构程序)设计与调试一、实验目的1.学习汇编语言(三种基本结构程序)设计与调试。

2.掌握多分支结构程序设计的方法。

3.掌握循环结构程序设计的方法。

4.熟悉在PC机上建立、汇编、连接和调试程序的方法。

二、实验内容(顺序结构的程序设计)程序一:设W、X、Y、Z均为16位带符号数。

要求完成计算表达式(W-(X*Y+Z-220))/X。

将表达式的商和余数存入数据区RESULT单元开始的区域中。

编程思路:该题目要求掌握乘除法运算中带符号数和无符号数运算的区别。

为了实现指定功能,应从以下几个方面考虑:(1)带符号数的乘除法运算应选用的指令。

(2)乘、除法运算中操作数的长度问题。

(3)带符号数的扩展问题。

参考程序清单DATA SEGMENTW DW -304X DW 1000Y DW -12Z DW 20RESULT DW 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,XIMUL YMOV CX,AxMOV BX,DXMOV AX,ZCWDADD CX,AXADC BX,DXSUB CX,220SBB BX,0MOV AX,WCWDSUB AX,CXSBB DX,BXIDIV XMOV RESULT,AXMOV RESULT+2,DXMOV AH,4CHINT 21HCODE ENDSEND START三、实验内容(分支结构的程序设计)程序二:在数据区中定义三个带符号字节变量,编写程序将其中的最大数找出送到MAX单元中。

该题目要求掌握多分支程序设计方法。

编程思路:为了实现指定功能,应从以下几个方面考虑:(1) 确定编程的算法思想。

(2) 确定带符号数比较大小转移应选择哪一组条件转移指令。

参考程序清单:DATA SEGMENTX DB 115Y DB 23Z DB -20MAX DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AL,XCMP AL,YJG NEXTMOV AL, YCMP AL,ZJG EXITMOV AL,ZJMP EXITNEXT:CMP AL,ZJG EXITMOV AL,ZEXIT:MOV MAX,ALMOV AH,4CHINT 21HCODE ENDSEND START ;返回DOS四、实验内容(循环结构的程序设计)程序三:编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。

2007_汇编第2次上机题

2007_汇编第2次上机题

《汇编语言程序设计》第二次上机一、目的1、加深对一些常用的汇编指令的理解;1、加深对常用DOS功能调用指令的理解;3、进一步熟悉TD的使用。

二、题目1、《80X86汇编语言程序设计》教材中 P95的 3.7 题。

要求:(1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。

(2)请事先指出依次执行每条程序指令后(AX)的内容。

(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。

(4)记录上机执行后与(2)、(3) 中对应的内容。

说明:MOV 指令不影响标志位,DEC指令不影响CF标志位,NOT 指令不影响标志位。

2、《80X86汇编语言程序设计》教材中 P94的 3.3 题。

要求:(1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以省略实验报告中的程序框图)。

(2)请事先画出数据段中数据的存储形式。

(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。

(4)请事先给出各调指令在汇编后的形式。

(5)比较上机执行后,看到的各项内容是否与(2)、(3) ,(4)内容一致。

不一致的应分析错误原因。

说明:MOV BX, OFFSET STR1+3 对应的汇编后的指令为:MOV BX, 3 MOV BX, STR1 对应的汇编后的指令为:MOV BX, [0000](上条指令等价于MOV BX, DS:[0000] )3、《80X86汇编语言程序设计》教材中 P96的 3.11 题。

要求:(1)请事先指出程序运行结束后,显示器显示的内容。

(2)若将NUM的定义改成如下形式:NUM DB 35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUM DB 59显示的结果是什么?(4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。

4. 从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH !”, 不相等显示“NO MATCH !”。

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

《汇编语言程序设计实验》
第二次上机实验任务
实验名称:实验二分支程序、循环程序的设计。

一.实验目的和要求
1、熟悉分支、循环程序的结构及控制方法,掌握分支、循环程序的调试方法;
2、加深对转移指令及一些常用的汇编指令的理解;
3、加深对常用DOS功能调用指令的理解,进一步熟悉TD的使用。

二.实验内容
设计实现一个学生成绩查询的程序。

1、实验背景
在以BUF为首址的字节数据存储区中,存放着n个学生的课程成绩表(百分制),每个学生的相关信息包括:姓名(占10个字节,结束符为数值0),语文成绩(1个字节),数学成绩(1个字节),英语成绩(1个字节),平均成绩(1个字节)。

例如:
N EQU 1000
BUF DB ‘zhangsan’,0,0 ;学生姓名,不足10个字节的部分用0填充
DB 100, 85, 80,? ; 平均成绩还未计算
DB ‘lisi’,6 DUP(0)
DB 80, 100, 70,?
DB N-3 DUP( ‘TempValue’,0,80,90,95,?) ;除了3个已经具体定义了学生信息的成绩表以
外,其他学生的信息暂时假定为一样的。

DB ‘wangwu’,0,0,0,0
DB 85, 85, 100, ?
2、功能一:提示并输入学生姓名
(1)使用9号DOS系统功能调用,提示用户输入学生姓名。

(2)使用10号DOS系统功能调用,输入学生姓名。

输入的姓名字符串放在以in_name为首址的存储区中。

(3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入字符q,则程序退出,否则,准备进入下一步处理。

3、功能二:以学生姓名查询有无该学生
(1)使用循环程序结构,在成绩表中查找该学生。

(2)若未找到,就提示用户该学生不存在,并回到“功能一(1)”的位置,提示并重新输入姓名。

(3)若找到,则将该学生课程成绩表的起始偏移地址保存到POIN字变量中。

提示:字符串比较时,当采用输入串的长度作为循环次数时,若因循环次数减为0而终止循环,则还要去判断成绩表中名字串的下一个字符是否是结束符0,若是,才能确定找到了。

4、功能三:计算所有学生的平均成绩
使用算数运算相关指令计算并保存每一个学生的平均成绩。

平均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩A乘以权重2、英语成绩C除以权重2后,与数学成绩B一起求和,再计算该生的平均成绩。

要求避免溢出。

提示:使用循环程序结构,注意寻址方式的灵活使用。

把小数3.5转换成分数后再运算避免使用浮点数指令。

5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。

(1)平均成绩等级显示方式:若平均成绩大于等于90分,显示“A”;大于等于80分,显示“B”;大于等于70分,显示“C”;大于等于60分,显示“D”;小于60分,显示“F”。

提示:使用分支程序结构,采用2号DOS系统功能调用显示结果。

(2)使用转移指令回到“功能一(1)”处(提示并输入姓名)。

6、思考与选做功能
(1)对输入的姓名进行合法性检查,比如:是否存在大小写字母之外的字符,等等;若存在非法的输入情形,则提示之后重新输入。

(2)对BUF中预先定义的课程成绩表中的所有成绩项进行合法性检查,判断是否符合实际(如超过100分等),不符合则提示并退出程序。

预先定义的学生姓名中,如果有重名如何处理?
(3)除了显示平均成绩的等级外,还将平均成绩同时显示。

(4)由于有些课程体系中,成绩的满分可能会达到300分,此时,成绩项的定义必须采用字类型,那么,如何改造程序呢?采用数据结构来定义BUF存储区是否会更好?
上述任务中,重要操作环节(纳入到学生自己写的实验步骤中)提示:。

相关文档
最新文档