当前位置:文档之家› 汇编实验报告1

汇编实验报告1

汇编语言上机实验报告时间:地点:实验人员:实验二一、题目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) 使用10号功能调用输入字符串;(2) 使用9号功能调用输出提示信息;提示:先比较长度是否相等。

5 选做题输入一个无符号的数字串,然后以16进制形式显示出串的值。

例如:INPUT A NUMBER : 59RESULT : 3BH其中下划线上的内容(59)为程序运行时输入的串。

6.已知X、Y、Z、W、Q、T为五个定义在数据段中的字变量(X,Y,Z,W,Q的内容由编程者自己给出),请计算(X-Y*Z+W)/Q,并将商→T、余数→T+4,并判断:①若结果大于0,则显示“T=(X-Y*Z+W)/Q>0!”②若结果等于0,则显示“T=(X-Y*Z+W)/Q=0!”③若结果小于0,则显示“T=(X-Y*Z+W)/Q<0!”要求:算术运算指令的使用;分支程序的设计;结果(商和余数)的组合判断方法;要尽量避免运算结果的溢出。

给出测试数据、预期结果。

7. 《80X86汇编语言程序设计》教材中的习题4.7 (P147)8. 设缓冲区中有一组有符号字数据(数据的个数及具体数值由编程者自己给定)。

对该组数进行排序,按照按从大到小的顺序输出排序后的结果。

例如:BUF DW 123, 0, -100, -50, 300, 25输出结果:-100 -50 0 25 123 300要点:循环程序的设计;内存中数据的操纵方法;数据到串的转换,观察排序的执行过程。

要求:画出程序流程图,给出寄存器、存储单元的分配方法。

9.选做题输入一个字符串,统计在该字符串中各个字母(不区分大小写字母)出现的次数。

显示出现次数不为0的字母及其出现的次数。

二、实验要求1、掌握分支循环程序的设计方法;2、掌握循环程序的设计方法;3、熟悉相关汇编指令的使用;4、熟练掌握TD的使用。

5、加深对一些常用的汇编指令的理解;6、加深对常用DOS功能调用指令的理解;三、实验过程1、《80X86汇编语言程序设计》教材中 P95的 3.7 题。

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

.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16BUF DB 50DB 0DB 50 DUP(0)DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA, SS:STACKSTART:MOV AX,0DEC AXADD AX,07FFFHADD AX,2NOT AXSUB AX,0FFFFHADD AX,8000HOR AX,0BFDFHAND AX,0EBEDHXCHG AH,ALSAL AX,1RCL AX,1CODE ENDSEND START(2)请事先指出依次执行每条程序指令后(AX)的内容。

0000 FFFF 7FFE 80007FFF 8000 0000 BFDFABCD CDAB 9B56(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。

CF、ZFADD AX,07FFFH 0,0ADD AX,2 1,0SUB AX,0FFFFH 0,0ADD AX,8000H 1,0SAL AX,1 0,0RCL AX,1 1,0(4)记录上机执行后与(2)、(3) 中对应的内容。

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

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

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

.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16STR1 DB 0,1,2,3,4,5STR2 DB '012345'COUNT EQU 30NUMB DB 3 DUP(2)NUMW DW 10H,-60HPOIN DW 0DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,OFFSET STR1+3MOV SI,OFFSET STR2MOV CL,COUNTMOV DX,WORD PTR NUMBMOV BP,NUMW+2MOV AL,3[SI]MOV AH,[SI+BX+1]MOV CH,BYTE PTR NUMW+3MOVSX EAX,AXCODE ENDSEND START(2(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。

mov bx,offset str1+3 bx 0003mov si,offset str2 si 0006mov cl,count cx 001Emov dx,word ptr numb dx 0202mov bp,numw+2 bp FFA0mov al,3[si] ax 5B33mov ah,[si+bx+1] ax 3433mov ch,byte ptr numw+3 cx FF1Emovsx eax,ax eax 00003433(4)请事先给出各调指令在汇编后的形式。

MOV AX,DATA MOV AX,5B56MOV DS,AX MOV DS,AXMOV BX,OFFSET STR1+3 MOV BX,0003MOV SI,OFFSET STR2 MOV SI,0006MOV CL,COUNT MOV CL,1EMOV DX,WORD PTR NUMB MOV DX,[000C] MOV BP,NUMW+2 MOV BP,[0011] MOV AL,3[SI] MOV AL,[SI+03] MOV AH,[SI+BX+1] MOV AH,[BX+SI+01] MOV CH,BYTE PTR NUMW+3 MOV CH,[0012] MOVSX EAX,AX MOVE AX,AX(5)比较上机执行后,看到的各项内容是否与(2)、(3) ,(4)内容一致。

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

第一次程序段没有加入MOV AX,DATA 和 MOV DS,AX,致使DS段的内容与原数据不一致。

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

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

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

将NUM定义为NUM DB 59后屏幕中出现“,”,原因在于在10进制转换为16进制过程中,未定义16进制中的10h-15h转换为相应的A-F的ASC码。

因此,输出产生错误。

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

要求:(1) 使用10号功能调用输入字符串;(2) 使用 9号功能调用输出提示信息;提示:先比较长度是否相等。

源程序.386DATA SEGMENT USE16BUF1 DB 50DB 0DB 50 DUP(0)BUF2 DB 50DB 0DB 50 DUP(0)CRLF DB 0DH,0AH,'$'INFO1 DB 0DH,0AH,'MATCH!$'INFO2 DB 0DH,0AH,'NO MATCH!$'DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF1MOV AH,10INT 21HLEA DX,CRLFMOV AH,9INT 21HLEA DX,BUF2MOV AH,10INT 21HLEA DX,CRLFMOV AH,9INT 21HMOV BL,BUF1+1MOV BH,0MOV DL,BUF2+1MOV DH,0CMP BL,DLJNE EXITLEA SI,BUF1+2LEA DI,BUF2+2MOV CX,BXLOPA:MOV AL,[SI]CMP AL,[DI]JNE EXITINC SIINC DIDEC CXJNZ LOPA LEA DX,INFO1 MOV AH,9INT 21H MOV AH,4CH INT 21H EXIT:LEA DX,INFO2 MOV AH,9INT 21H MOV AH,4CH INT 21H CODE ENDS END STARTMatch:No match:5 选做题输入一个无符号的数字串,然后以16进制形式显示出串的值。

相关主题