华北电力大学实验报告标准格式——大标题和实验数据可以打印,标题下的内容要手写

时间:2024.4.21

实验名称______________________

课程名称_______________________

院 系 部:                        专业班级:

学生姓名:                       学    号:

同 组 人:                         实验台号:

指导教师:                     成    绩:

    实验日期:

华北电力大学

一、实验目的及要求:

二、仪器用具:

三、实验原理

四、实验方法与步骤:

五、实验结果与数据处理:

  六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。)

七、实验打印输出结果:


第二篇:华北电力大学汇编实验报告


华北电力大学

|

|

                实验名称    汇编语言程序设计实验                 

课程名称    IBM-PC汇编语言程序设计              

|

|

                 专业班级:      学生姓名:

                 学    号:    成    绩:

指导教师:         实验日期


实验一用表格形式显示字符

一、     实验要求

按15*16列的表格形式显示ASCⅡ码为10H—100H的所有字符,即以行为主的顺序及ASCⅡ码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。

二、     设计说明

(1)    显示每个字符可使用功能号为02的显示输出功能调用:

       Mov  ah,02h

       Mov  dl,输出字符的ASCⅡ码

        Int     21h

      将dl初始化为10H,然后使用其加1以取得下一个字符的ASCⅡ码。

(2)    显示空白符是,用其ASCⅡ码置0入dl寄存器。每行结束时,用回车和换行来结束本行并开始下一行。

(3)    由于逐个显示相继的ASCⅡ码字符是,需要不断修改dl寄存器的内容,而显示空白、回车、换行也需要使用dl寄存器,为此可使用堆栈保存dx。

三、     实验程序及调试结果

CODES SEGMENT

;**********************************************

main proc far

    ASSUME CS:CODES

START:

  push ds

  sub ax,ax

  push ax

    mov di,15

    mov dl,10h

loo:

    mov cx,16

next:

    mov ah,02h

    int 21h

    inc dl

    push dx

    mov dl,0

    mov ah,02h

    int 21h

    pop dx

    loop next

    push dx

    mov dl,0dh

    mov ah,02h

    int 21h

    mov dl,0ah

    mov ah,02h

    int 21h

    pop dx

    dec di

    jne loo

    je exit

    exit:  ret

  main endp 

CODES ENDS

    END START

实验二查找匹配字符串

一、     实验要求

程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“No match!”;如果句子中包含关键字则显示“match!”,且把该字在句子中的位置用十六进制数显示出来。要求程序的执行过程如下:

Enter keyword:abc

Enter sentence:we are studying abc

Match at location:11H of the sentence

Enter sentence:xyz

No match!

Enter sentence:

二、     设计说明

程序由三部分组成:

(1)    输入关键字和一个句子,分别存入相应的缓冲区中。

(2)    在句子中查找关键字

(3)    输出信息。用功能调用09h分‘找到’和‘未找到两种情况分别显示不同的信息。在“找到”时,显示关键字在字符串中位置。

三、     使用说明

根据提示输入关键字和句子,按回车键结束输入。程序将显示字符串中是否含有关键字,有则提示‘match’并显示关键字位置,无则提示‘no match’。

四、     实验程序

DATAS SEGMENT para 'data'

   mess1 db 'match!',13,10,'$'

   mess2 db 'no match!',13,10,'$'

   mess3 db 'enter keyword:','$'

   mess4 db 'enter sentence:','$'

   mess5 db 'match at location:','$' 

   mess6 db ' H of the sentence','$'

   stoknim label byte

   max db 10

   act db ?

   stokn db 10 dup(?)

   sentence label byte

   ma db 100

   ac db ?

   sto db 100 dup(?)

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

;*****************************************

CODES SEGMENT para 'code'

    ASSUME CS:CODES,DS:DATAS,es:datas

main proc far

START:

    push ds

    sub ax,ax

    push ax

    MOV AX,DATAS

    MOV DS,AX

    mov es,ax

;*****************输入关键字和一个句子***********

k:

    lea dx,mess3

    mov ah,09

    int 21h      ; 显示字符串‘enter word’

    lea dx,stoknim

    mov ah,0ah

    int 21h   ;输入关键字到缓冲区Word

    push dx

    mov dl,0dh

    mov ah,02h

    int 21h

    mov dl,0ah

    mov ah,02h

    int 21h     ;回车换行

    pop dx

d:  lea dx,mess4

    mov ah,09

    int 21h      ;显示字符串‘enter sentence’

    lea dx,sentence

    mov ah,0ah

    int 21h      ;输入句子到缓冲区sentence

    push dx

    mov dl,0dh

    mov ah,02h

    int 21h

    mov dl,0ah

    mov ah,02h

    int 21h     ;回车换行

    pop dx

;****************比较查找信息********************

    lea si,stoknim    ;si指向关键字

    lea di,sentence      ;di指向句子

    mov ax,0

    mov bl,1         ;初始化bx

    mov cl,0         ;初始化外循环计数单元

    mov al,act

    mov ah,ac 

    sub ah,al

    add ah,1        

    mov cl,ah    ;cl中循环次数

    cmp cl,0

    je nomatch

a:

    push cx

    mov cl,al

    repnz cmpsb

    jz match

    sub di,1

    sub si,2

    add bl,1

    pop cx

    dec cl

    cmp cl,0

    jne a

    je nomatch

;***************输出信息*************************

match:

     lea dx,mess1

     mov ah,09h

     int 21h     ;显示match

     push dx

     mov dl,0dh

     mov ah,02h

     int 21h

     mov dl,0ah

     mov ah,02h

     int 21h     ;回车换行

     pop dx

     lea dx,mess5

     mov ah,09h

     int 21h     ;显示match at location    

     mov al,bl

     and al,0fh

     add al,30h

     cmp al,3ah

     jl p

     add al,7h    

 p:  mov dl,al

     mov ah,02h

     int 21h   

   lea dx,mess6

     mov ah,09h

     int 21h

     push dx

     mov dl,0dh

     mov ah,02h

     int 21h

     mov dl,0ah

     mov ah,02h

     int 21h     ;回车换行

     pop dx

     jmp wer

nomatch:    

     lea dx,mess2

     mov ah,09h

     int 21h     ;显示no match

     push dx

     mov dl,0dh

     mov ah,02h

     int 21h

     mov dl,0ah

     mov ah,02h

     int 21h     ;回车换行

     pop dx

wer: jmp d   

    main endp

CODES ENDS

    END START

五、     程序框图

实验三分类统计字符个数

一、     实验要求

程序接受用户键入一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。

二、     设计说明

(1)程序可采用01H功能调用把键入字符先分类计数再存入缓冲区中。

(2)程序进入debug运行并查看计数结果。

三、     实验程序

datarea segment

     tou db 'enter word  ',13,10,'$'

     letter db 'letter:','$'

     number db 'number:','$'

     other db 'other:','$'

datarea ends

;***************************************************

codes segment

main proc far

     assume cs:codes,ds:datarea

start:

               push ds

               sub ax,ax

               push ax

               mov ax,datarea

               mov ds,ax

        mov bx,0

        mov cx,0

        mov di,0

        lea dx,tou

        mov ah,09h

        int 21h       

input:       

        mov ah,1

        int 21h       

        cmp al,0dh

        je disp              

        cmp al,30h

        jae n1    

o:

    inc di

    jmp short input

n1:

    cmp al,39h

    ja n2

    inc cx

    jmp short input

n2:

    cmp al,41h     

    jae n3      

    jmp o

n3:

    cmp al,5ah

    ja n4     

    inc bx          

    jmp short input 

n4:

    cmp al,61h    

    jae n5     

    jmp short o

n5:

    cmp al,7ah     

    ja short o      

    inc bx          

    jmp short input

disp:   

    push ax

    mov dl,0dh

    mov ah,09h

    int 21h

    mov dl,0ah

    mov ah,09h

    int 21h

    pop ax       

    lea dx,letter   

    push ax

    mov ah,09h   

    int 21h

    pop ax   

    call binihex   

    push ax

    mov dl,0dh

    mov ah,09h

    int 21h

    mov dl,0ah

    mov ah,09h

    int 21h

    pop ax      

    lea dx,number

    push ax

    mov ah,09h   

    int 21h

    pop ax   

    mov bx,cx

    call binihex   

    push ax

    mov dl,0dh

    mov ah,09h

    int 21h

    mov dl,0ah

    mov ah,09h

    int 21h

    pop ax     

    lea dx,other

    mov ah,09h  

    int 21h       

    mov bx,di

    call binihex   

    push ax

    mov dl,0dh

    mov ah,09h

    int 21h

    mov dl,0ah

    mov ah,09h

    int 21h

    pop ax

ret

main endp

;******************************

binihex proc near

    push cx

    push ax

    push dx   

    mov ch,4

rotate:

    mov cl,4

    rol bx,cl

    mov dl,bl

    and dl,0fh

    add dl,30h

    cmp dl,3ah

    jl printin

    add dl,07h

printin:

    mov ah,02h

    int 21h

    dec ch

    jnz rotate

    pop dx

    pop ax

    pop cx

    ret

binihex endp

codes ends

end start

四、     使用说明

程序进入后提示输入字符,可以输入任意字符,输入完成后键入回车键表示完成,则会在下一行输出实验结果。

五、     程序框图

实验四查找电话号码

一、     实验要求

(1)       要求程序建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;

(2)       程序可接受输入人名及相应的电话号码,并把它们加入电话号码表中;

(3)       凡有新的输入后,程序可按人名对电话号码表重新排序;

(4)       程序可接受需要查询电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

       Name         tel

     ××××      ××××

二、     设计说明

(1)显示提示符 ’Input name:’;

(2)调用子程序 input_name 接收人名;

(3)调用子程序 stor_name 把人名存入电话号码表 tel_tab 中:

(4)显示提示符 ’Input a telephone number:’;

(5)调用子程序 inphone 接收电话号码,并把它存入电话号码表tel_tab中;

(6)如输入已结束则调用 name_sort 子程序对电话号码表接人名排序;

(7)显示提示符 ’Do you want a telephone number ?(Y/N)’;

(8)回答N收退出程序;

(9)回答Y则再显示提示符 ’name ?’;

(10)调用子程序 input_name接收人名;

(11)调用子程序 name_search 在电话号码表中查找所要的电话号码;

(12)调用子程序 printline 按要求格式显示人名及电话号码;

(13)重复查号提示符直至用户不要求查号为止。

三、     实验程序

dataseg   segment

    namepar   label    byte

     maxnlen   db     21

     actnlen   db     ?

     _name    db     21 dup(?) 

    phonepar  label    byte

     maxplen   db     9

     actplen   db     ?

     phone    db     9 dup(?)

    crlf    db     13,10,'$'  

    endaddr   dw     ?  

    mess1    db     'enter name:','$'

    mess2    db     'enter a telephone number:','$'

    mess3    db     'Do you want a telephone number?(Y/N)','$'

    mess4    db     'name?','$'

    mess5    db     'name',16 dup(' '),'tel',0dh,0ah,'$'

    mess6    db     'Not in the table.',0dh,0ah,'$'

    mess7    db     'Invalid input!',0dh,0ah,'$'

    count    db     0

    tel_tab   db     50 dup(20 dup(' '),8 dup(' '))

    temp    db     20 dup(' '),8 dup(' '),0dh,0ah,'$'

    swapped   db     0

dataseg   ends

;**********************************************************************

codeseg   segment

main proc far

   assume cs:codeseg,ds:dataseg,es:dataseg

start:

      push     ds

      sub      ax,ax

      push     ax    

      mov        ax,dataseg

      mov         ds,ax

      mov        es,ax;

      cld

      lea     di,tel_tab      ;di中存放表首地址

inputloop:     

      mov     ah,09h

      lea     dx,mess1

      int     21h    

      call    input_name

      cmp     actnlen,0  ;没有输入人名时

      jz     a1        ;直接跳到提示是否查找的地方

      cmp     count,50   ;输入上限

      je     a1

      call    stor_name   ;保存人名到tel_tab                

      mov     ah,09h

      lea     dx,mess2

      int     21h     

      call    input_stor_phone ;输入并保存电话号码

      jmp     inputloop

a1:

      cmp     count,1

      jbe     searchloop ;如果没有输入或者输入一个

      call    name_sort  ;排序

      call    disp_all  ;显示所有

searchloop:

      lea     dx,mess3

      mov     ah,09h

      int     21h     

      mov     ah,01h

      int     21h           

      cmp     al,'N'

      je     exit

      cmp     al,'n'

      je     exit

      cmp     al,'Y'

      je     showname

      cmp     al,'y'

      je     showname     

      mov     ah,09

      lea     dx,crlf

      int     21h

      lea     dx,mess7 ;非法输入

      mov     ah,09h

      int     21h           

      jmp     searchloop

showname:     

      mov     ah,09

      lea     dx,crlf

      int     21h             

      lea     dx,mess4 ;当输入Y时,显示'name?'

      mov     ah,09

      int     21h      

      call    input_name ;输入要查找的人名

      call    name_search ;查找

      call    printline

      jmp     searchloop    

exit:

      ret

main    endp

;******************************************************

input_name proc    near     

      mov     ah,0ah

      lea     dx,namepar

      int     21h           ;输入名字     

      mov     dl,0ah

      mov     ah,02h

      int     21h     ;换行     

      mov     bh,0         ;bx高位置0

      mov     bl,actnlen   ;bx低位置输入名字个数

      mov     cx,21        

      sub     cx,bx        ;计算剩下的长度

i1:

      mov     _name[bx],20h

      inc     bx

      loop    i1          ;把bx之后剩下的填充空格

      ret

input_name endp           

;*********************************************************

stor_name  proc    near

      inc     count         ;有人名输入所以个数加1

      cld    

      lea     si,_name      ;把si指向刚才输入名字的位置

      mov     cx,10        ;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中

      rep     movsw         ;把si所指名字赋值给di所指地方tel_tab

      ret

stor_name  endp  

;*****************************************************                  

input_stor_phone proc  near     

      mov     ah,0ah

      lea     dx,phonepar

      int     21h            ;把电话号码存入phonrpar

      mov     ah,02h

      mov     dl,0ah ;换行

      int     21h   

      mov     bh,0

      mov     bl,actplen

      mov     cx,9

      sub     cx,bx ;计算剩下的长度

s2:

      mov     phone[bx],20h    ;剩下的地方填充空格

      inc     bx

      loop    s2     

      cld    

      lea     si,phone   ;再把名字放入之后di就已经移动到名字之后了

      mov     cx,4      ;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中

      rep     movsw     

      ret

input_stor_phone endp        

;*****************************************************************

name_sort  proc    near

      sub     di,56   

      mov     endaddr,di

n1:

      mov     swapped,0

      lea     si,tel_tab

n2:

      mov     cx,20

      mov     di,si

      add     di,28  ;下一个被比较的名字

      mov     ax,di

      mov     bx,si

      repe    cmpsb  ;比较20次

      jbe     n3     ;小于或等于不用交换

      call    npxchg

n3:

      mov     si,ax

      cmp     si,endaddr

      jbe     n2

      cmp     swapped,0

      jnz     n1

      ret                       

name_sort  endp

;*****************************************************

npxchg   proc    near

      mov     cx,14            ;交换名字和电话号码

      lea     di,temp

      mov     si,bx

      rep     movsw             ;move lower item to save     

      mov     cx,14

      mov     di,bx

      rep     movsw     

      mov     cx,14

       lea     si,temp

       rep     movsw

       mov     swapped,1

       ret      

npxchg   endp

;************************************************************

disp_all  proc    near

      mov     ah,09h

      lea     dx,mess5

      int     21h

      lea     si,tel_tab

d1:

      lea     di,temp

      mov     cx,14

      rep     movsw

      mov     ah,09h

      lea     dx,temp

      int     21h

      dec     count

      jnz     d1

      ret          

disp_all  endp    

;*********************************************

name_search proc    near           

      lea     si,tel_tab

      mov     bx,si

      add     endaddr,28

e1:          

      lea     di,_name     ;存放待查找的人名地址

      mov     cx,10

      repe    cmpsw

      jcxz    exit3   ;相等     

      add     bx,28       ;表中下一个比较的人名

      mov     si,bx

      cmp     si,endaddr

      jbe     e1

      mov     cx,-1

      ret

exit3:

      mov     si,bx

      lea     di,temp

      mov     cx,14

      rep     movsw    

      ret                 

name_search endp 

;*******************************************************

printline  proc    near

      cmp     cx,-1

      je     norecord     

      mov     ah,09h

      lea     dx,mess5

      int     21h           ;输出name和tel     

      mov     ah,09h

      lea     dx,temp    

      int     21h           ;输出名字和电话号码

      ret

norecord:

      mov     ah,09h

      lea     dx,mess6

      int     21h           ;输出没找到

      ret

printline  endp 

;************************************************************             

codeseg   ends

      end    start

四、     使用说明

根据提示输入人名及电话号码,使用回车键表示输入结束,如不需输入人名,则在提示后直接输入回车键,表示输入完成,程序将自动显示电话号码表。如需查询则可输入y(大小写均可),否则输入n(大小写均可)。

五、     模块层次图及说明

(1)       主函数main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程;

(2)       接收人名函数input_name:输入人名,将此人名保存至缓冲区,并用空格补足剩余空间;

(3)       保存人名函数stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中;

(4)       接收并且保存电话号码函数inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区(即人名区之后);

(5)       电话号码表排序函数name_sort:运用冒泡排序法,对电话号码表按人名ASCⅡ码递增方向的排序;

(6)       交换条目位置函数exchange:将不符合排序规律的条目的位置进行调整;

(7)       查找电话号码函数name_search:输入人名,在电话号码表中依次比较人名进行查找;

(8)       输出电话号码条目函数printline:查找到条目之后,将条目输出;

(9)       输出电话号码表函数printall:将整个电话号码表的所有条目依次输出。

实验心得体会:

这次汇编实验历时一周,五天时间完成了4个编程实验:用表格形式显示字符、查找匹配字符串、分类统计字符个数、查找电话号码。

用表格形式显示字符和查找匹配字符串是使用了循环程序设计思想。显示字符实验较为简单,只需要一些基础知识即可完成。而查找字符串较耗费时间,这个实验主要难点就在从句子中查找关键字。查找关键字是使用的串比较指令。这个指令只能进行比较,查找就需要移动指针,将整个句子都与关键字比较一遍,才能确定是否找到了关键字。

分类统计字符个数与查找电话号码较难,花费了我最多的时间。分类统计字符个数是应用了分支程序设计,而查找电话号码是应用了子程序设计。分类统计字符个数是将输入的字符与多个条件进行比较,找到符合条件的程序段就执行,否则就跳到下一个。查找电话号码是使用子程序较多,整个程序主要都有子程序组成,程序难点就在子程序调用条件,应当按照实验要求调整各个子程序的调用时间。

实验过程中遇到了很多问题,有许多问题是我自己无法解决的,只能通过向其他同学学习,才能将实验完成。这次实验培养了我的实践能力,使我将书本中的理论知识转变成了现实的程序,为今后的学习和使用打下了结实的基础。通过实验使我进一步巩固所学汇编课程内容并掌握汇编程序在程序设计中的应用方法,并对汇编程序设计及应用有整体的认识。

更多相关推荐:
大学物理实验报告格式

北京师范大学珠海分校大学物理实验报告实验名称杨氏弹性模量的测定院专业学号姓名同组实验者20xx年月日实验名称一实验目的二实验原理三实验内容与步骤四数据处理与结果五附件原始数据说明第五部分请另起一页将实验时的原始...

重庆大学实验报告格式

重庆大学学生实验报告实验课程名称开课实验室学院年级专业班学生姓名号开课时间至学期材料科学与工程学院实验报告实验报告打印格式说明1标题三号加粗黑体2开课实验室5号加粗宋体3表中内容1标题5号黑体2正文5号宋体4纸...

大学物理实验报告模板.

学院物理系大学物理学生实验报告实验项目实验地点班级姓名座号实验时间月物理系编制实验预习部分一实验目的二实验仪器设备三实验原理2实验预习部分四实验步骤教师签名3实验及数据处理部分五实验数据记录4实验及数据处理部分...

大学物理实验报告范本

Yls大学物理实验报告范本1Yls大学物理实验报告范本2Yls大学物理实验报告范本3Yls大学物理实验报告范本4Yls大学物理实验报告范本5Yls大学物理实验报告范本6

武汉大学实验报告格式

武汉大学教学实验报告学院专业年月日12345

大学化学实验报告格式

大学化学实验报告班级学号姓名资环学院实验报告一实验名称二实验目的三实验原理四实验内容五实验结果及问题讨论

电子科技大学实验报告格式

电子科技大学学生姓名王建林学号指导教师周海平日期实验报告20xx171020xx420xx年05月23日一实验室名称研究院大楼324A二实验项目名称磁控溅射实验紫外可见近红外分光光度计实验三实验原理一磁控溅射实...

广东工业大学实验报告格式

广东工业大学实验报告学院专业班成绩评定学号姓名合作者号教师签名实验题目第周星期第节附件10实验报告范本非设计性实验要求采用学校的实验报告书16开如打印也应采用实验报告书的版头A4纸如果实验是计算机上的程序或者设...

宁波大学 实验报告格式

宁波大学 实验报告格式,内容附图。

武汉大学实验报告格式

武汉大学教学实验报告信息管理学院信息管理与信息系统专业20xx年3月9日123456教务部制表7

广东工业大学实验报告格式

广东工业大学实验报告学院专业班成绩评定学号姓名合作者号教师签名实验题目第周星期第节

南昌大学 实验报告格式

南昌大学实验报告学生姓名学号专业班级实验类型验证综合设计创新实验日期实验成绩以下主要内容由学生完成一实验项目名称二实验目的三实验基本原理四主要仪器设备及耗材五实验步骤六实验数据及处理结果七思考讨论题或体会或对改...

大学实验报告格式(57篇)