资源描述:
《2019汇编实验报告(适合初学者)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、汇编实验报告(适合初学者) 汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。试编写汇编程序,完成Z=3否是输出-1否X0O++(0数加1)是F++(负数个数加1)Z++(正数个数加1)i=i+1否循环计数值=0?是结束②.源
2、程序清单。 DATASEGMENT XDB5,6,7,8,0,-1,-2,-3,-4;数据定义 YDB9;存放循环计数值 ZDB0;存放正数个数 ODB0;存放0个数 FDB0;存放负数个数 MESSAGE1DB'positivenumber:$';输出正数个数提示符 MESSAGE2DB'negativenumber:$';输出负数个数提示符 MESSAGE3DB'zeronumber:$';输出数为0个数提示符DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA 6 START:MOVAX,D
3、ATA MOVDS,AX;段寄存器定义 LEADI,X;将X数组放到DI寄存器 MOVCL,Y;初始化循环计数值 NEXT: MOVAL,[DI];开始取数组里的值 CMPAL,0;与0比较 JE ZERO;等于0则转ZERO JG ZHENG;大于0则转ZHENG JMPFUSHU;小于0则转FUSHU ZERO: INC[O];0的个数加一 ADDDI,1;到数组下一个数 JMPLOOP_HERE ZHENG: INC[Z];正数个数加一 ADDDI,1;到数组下一个数 JMPLOOP_HERE FUSHU
4、: INC[F];负数个数加一 ADDDI,1;到数组下一个数 LOOP_HERE: LOOPNEXT;循环计数自动减一,循环计数不为0继续循环 MOVAH,9;输出正数个数 MOVDX,OFFSETMESSAGE1 INT21H MOVDL,Z ADDDL,30H MOVAH,2 INT21H MOVDL,0AH MOVAH,2 INT21H MOVAH,9;输出0个个数 MOVDX,OFFSETMESSAGE3 INT21H MOVDL,O ADDDL,30H MOVAH,2 INT21H MO
5、VDL,0AH 7 MOVAH,2 INT21H MOVAH,9;输出负数个数 MOVDX,OFFSETMESSAGE2 INT21H MOVDL,F ADDDL,30H MOVAH,2 INT21H MOVDL,0AH MOVAH,2 INT21H MOVAH,4CH;退出 INT21H CODEENDS ENDSTART③.程序运行结果。 ④.调试过程中遇到的问题和解决的方法。 对loop指令的跳转不熟悉,以至程序出错;一开始使用BX来缓存数据,但数组不跳转,使用DI指针寄存器来解决。 5.编程求无符号
6、数字节序列中最大值和最小值。①.程序算法流程图。 8 开始初始化数循环计数值i=0BL=X[i](最大值)DL=X[i](最小值)是X[i]>BL否BL=X[i]X[i]=’A’是是X[i]>’Z’否否X[i]>=’a’是否num++是i++X[i]>’z’循环计数值=0?否是输出最大值,最小值结束 11 ②.源程序清单。 DATASEGMENT SDB'Y1j3q4';定义字符串 COUNTEQU$-S;获得字符串的字符数 NUMDB0;用于记录字母的个数 MESSAGEDB'englishalphabetnumber:$';输出
7、英文字母个数提示符 DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX;段寄存器定义 MOVDI,OFFSETS;获得s首地址 MOVCX,COUNT;初始化循环计数值 BEGIN: MOVAL,[DI];开始取字符 CMPAL,'A' JGE NEXT;比A大于等于继续 JMPRE;比A小,取下一个字符NEXT: CMPAL,'Z';和Z比较 JG NEXT2;大于Z,得跟a比较 INCNUM;在到Z之间为大写字母,num加1
8、JMPRE;取下一个字符NEXT2: CMPAL,'a';跟a比较 JGE NEXT4;大于等于a,得