华北电力大学汇编实验报告_第1页
华北电力大学汇编实验报告_第2页
华北电力大学汇编实验报告_第3页
华北电力大学汇编实验报告_第4页
华北电力大学汇编实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华北电力大学实验报告|实验名称汇编语言程序设计实验课程名称IBM-PC汇编语言程序设计|专业班级:计科1103学生姓名:李庆贺学号: 0307成绩:指导教师:王保义实验日期 :1 月1实验一用表格形式显示字符一、实验要求按 15*16 列的表格形式显示 ASC码为 10H 100H 的所有字符,即以行为主的顺序及 ASC码递增的次序依次显示对应的字符。每 16 个字符为一行,每行中的相邻两个字符之间用空白符隔开。二、设计说明( 1) 显示每个字符可使用功能号为 02 的显示输出功能调用:Mov ah,02hMovdl,输出字符的 ASC码Int21h将 dl 初始化为 10H,然后使用其加 1

2、 以取得下一个字符的 ASC码。( 2) 显示空白符是, 用其 ASC 码置 0 入 dl 寄存器。每行结束时,用回车和换行来结束本行并开始下一行。( 3) 由于逐个显示相继的 ASC 码字符是,需要不断修改 dl 寄存器的内容,而显示空白、回车、换行也需要使用 dl 寄存器,为此可使用堆栈保存 dx。三、实验程序及调试结果prognam segmentmainprocfarassume cs:prognamstart:mov ah, 02hmov dl, 10h; 设置初始输出为 ASCII 的 10hmov bl, 15; 输出显示为 15行e:mov cx, 16; 设置循环次数,16,

3、表示输出显示为16列l:int21h; 显示输出push dx; 推入堆栈mov ah, 02hmov dl, 0int21hmov ah, 02hmov dl, 0int21h; 显示空白符popdx; 将栈顶元素推出incdl; 设置下一个元素loop l; 循环输出每行的16个 ASCII 元素push dx; 将下一行的首元素推入堆栈mov ah, 02hmov dl, 0dhint21h2movah, 02hmovdl, 0ahint21h; 输出换行popdx ; 将栈顶元素推出decblcmpbl, 0; 比较确定是否已经输出15行元素jnee; 若还未完成输出,则跳转至e,继续

4、进行下一行元素的输出jeexit; 否则退出程序exit:movax, 4c00hint21hmainendpprognam endsend; start实验二查找匹配字符串一、实验要求程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示 “ No match!”;如果句子中包含关键字则显示“ match!”,且把该字在句子中的位置用十六进制数显示出来。要求程序的执行过程如下:Enter keyword:abcEnter sentence:we are studying abcMatch at location:11H of the sentenceEnter sentenc

5、e:xyzNo match!Enter sentence:二、设计说明程序由三部分组成:( 1) 输入关键字和一个句子,分别存入相应的缓冲区中。( 2) 在句子中查找关键字( 3) 输出信息。用功能调用 09h 分找到和未找到两种情况分别显示不同的信息。在“找到”时,显示关键字在字符串中位置。三、使用说明根据提示输入关键字和句子,按回车键结束输入。程序将显示字符串中是否含有关键字,有则提示 match并显示关键字位置,无则提示 no match。四、实验程序datareasegment; 输入数据段keyadrlabelbytekeymaxdb 20keyactdb ?3keystringdb

6、20 dup( ?) ; 定义能放入 50个字符缓存空间的大小,带输入数据长度未知senadr labelbytesenmaxdb50senactdb?secstringdb 50 dup( ?)messkeydbEnter keyword:, $messsendb0dh,0ah,Enter Sentence:, $nomatchdb0dh,0ah,No match., $matchdb0dh,0ah,Match at location:, $restdbH of the sentence., $datareaends; 设置 dos显示端内容prognam segmentmain proc

7、farassume cs:prognam,ds:datarea,es:datareastart:push dsxor ax,ax ;ax 寄存器清 0push axmov ax,datareamov ds,axmov es,axlea dx,messkeymov ah,09hint 21h; 显示 messkey字符内容lea dx,keyadrmov ah,0ahint 21h; 是实现 DOS调用中的 0a号功能,就是在屏幕上显示keyadr 字符串lea dx,messsenmov ah,09hint 21hlea dx,senadrmov ah,0ahint 21hmov al,sen

8、actsub al,keyactjl nmatch; 长度比较,句子长度短,没有找到跳到nmatch 子语句call searchjmp short e0; 无条件跳转; 以上均为 DOS上让其显示这些内容nmatch:lea dx,nomatchmov ah,09hint 21he0:4retmain endp; 结束search proc nearxor cx,cx;cxqinglingmov dx, offsetsenadr ; 句子地址到 dxadd dl,senact; 句子 changduinc dl ; 置长度加 1得到句子最后一位mov cl,keyact; 关键字长度到 cl

9、cld; 清除方向标志lea di,secstringr0:lea si,keystringrepz cmpsb ; 如果 si 和 di 所指向的两个字节相等,则继续比较。所以如果相等的话,就停止循环。但是这时候si 和 di 已经自动加 1了,如果要找不相等的那两个数,就要把si 和 di 减 1。mov al,byte ptr si-1cmp al,byte ptr di-1; 把那两个不相等的字节放到ptr 数组中去jnz next; 为 0?,跳到 next 子语句sub si,offsetkeystring; 获得操作数 keystring的偏移地址mov ax,sicmp al,

10、keyact; 将关键字与 secstring长度比较je showpnext:mov cl,keyactcmp di,dxjnz r0shown:lea dx,nomatchmov ah,09hint 21h; 在屏幕上显示 nomatch字符串jmp short e1showp:lea dx,matchmov ah,09hint 21h; 在屏幕上显示 match字符串dec di; 句子与关键字匹配最后一位的下一位,所以要见1位mov bx,di ;xor ax,axmov al,keyactsub bx,ax ; 句子长度减去关键字长度mov ax, offset senadrsub

11、bx,axcall binihexlea dx,restmov ah,09hint 21h5e1:retsearch endpbinihex proc nearmov ch,4r1:mov cl,4; 左移 4位rol bx,clmov dl,bland dl,0fhadd dl,30hcmp dl,39hjle dispadd dl,07hdisp:mov ah,02hint 21hdec chjnz r1retbinihex endpprognam endsend main五、程序框图实验三分类统计字符个数一、实验要求程序接受用户键入一行字符(字符个数不超过80 个,该字符串用回车符结束)

12、 ,并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit 和 other 为名的存储单元中。二、设计说明( 1)程序可采用 01H 功能调用把键入字符先分类计数再存入缓冲区中。( 2)程序进入 debug 运行并查看计数结果。三、实验程序DATA SEGMENTPARSDB80; 准备接收 80个字符 .NNNDB ?; 用于存放实际输入的个数 .IIIDB80 DUP( ?);80 字节的空间 .D_NDB ?6C_NDB ?O_NDB ?MESG1DB 13, 10,Input STR : $; 用于提示 .MES_CDB 13, 10,Char N is : $;

13、用于提示 .MES_DDB 13, 10,DigitN is : $; 用于提示 .MES_ODB 13, 10,Other N is : $; 用于提示 .MES_TDB 13, 10,AllN is : $; 用于提示 .DATA ENDS;-CODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOVDS, AXMOVD_N, 0MOVC_N, 0MOVO_N, 0MOVDX,OFFSETMESG1MOVAH, 9;9 号功能调用,显示提示.INT 21HMOVDX,OFFSETPARSMOVAH, 10;10 号功能调用,接收键盘输入.IN

14、T 21H;-MOVCL, NNN; 收到字符的个数.MOVCH, 0CMPCX, 0JNZ DO_ITJMP EXITDO_IT:LEA SI, III; 收到字符的起始地址.;-下面开始循环统计.AGAIN:MOVAL, SID_num:CMPAL,:;- :JNC N_C_B; 9CMPAL,0JCN_C_B; ZCMPAL,A7JCN_C; zCMPAL,aJCOTHER; aINC C_N; 小写,加一 .JMP NEXTOTHER:INC O_N; 其它 .NEXT:INC SILOOP AGAIN;-统计结束MOVDX,OFFSETMES_DMOVAH, 9;9 号功能调用,显示

15、提示.INT 21HMOVAL, D_NCALL DISP_ALMOVDX,OFFSETMES_CMOVAH, 9;9 号功能调用,显示提示.INT 21HMOVAL, C_NCALL DISP_ALMOVDX,OFFSETMES_OMOVAH, 9;9 号功能调用,显示提示.INT 21HMOVAL, O_NCALL DISP_ALMOVDX,OFFSETMES_TMOVAH, 9;9 号功能调用,显示提示.INT 21HMOVAL, NNNCALL DISP_AL;-显示结束 .EXIT:MOVAH, 4CHINT 21H;=DISP_AL:; 以 3位十进制数形式显示AL中的内容 .MO

16、VAH, 0MOVBL, 100DIV BL8ADD AL, 30HMOVDL, ALMOVBH, AHMOVAH, 2INT 21HMOVAH, 0MOVAL, BHMOVBL, 10DIV BLADD AL, 30HMOVDL, ALMOVBH, AHMOVAH, 2INT 21HADD BH, 30HMOVDL, BHMOVAL, AHMOVAH, 2INT 21HRET;=CODE ENDSEND START四、使用说明程序进入后提示输入字符,可以输入任意字符,输入完成后键入回车键表示完成,则会在下一行输出实验结果。五、程序框图实验心得体会:这次汇编实验历时一周,但我用了 3 天时间完成了 3 个编程实验:用表格形式显示字符、查找匹配字符串、分类统计字符个数,由于期间要考试所以就没有做第四个。用表格形式显示字符和查找匹配字符串是使用了循环程序设计思想。 显示字符实验较为简单,只需要一些基础知识即可完成。而查找字符串较耗费时间,这个实验主要难点就在从句子中查找关键字。查找关键字是使用的串比较指令。这个指令只能进行比较,查找就需要移动指针,将整个句子都与关键字比较一遍,才能确定是否找到了关键字。分类统计字符个数与查找电话号码较难, 花费了我最多的时间。 分类统计字符个数是应用了分支程序设计,而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论