汇编语言程序设计实验.doc_第1页
汇编语言程序设计实验.doc_第2页
汇编语言程序设计实验.doc_第3页
汇编语言程序设计实验.doc_第4页
汇编语言程序设计实验.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

目录目录1实验一 利用DEBUG熟悉常用指令的使用2一、实验目的2二、示例2三、实验题2实验二 汇编程序和连接程序的使用6一、实验目的。6二、示例。6三、实验题。8实验三 顺序结构程序设计11一、实验目的11二、示 例11三、实验题12四、实验报告15实验四 循环结构程序设计16一、实验目的16二、示 例16三、实验题18实验五 分支结构程序设计21一、实验目的21二、示 例21三、实验题22实验六 子程序设计29一、实验目的29二、实验题29 实验一 利用DEBUG熟悉常用指令的使用一、实验目的熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。二、示例请分别用一条汇编语言指令完成如下功能:(过程略)。1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。ADD AL,BXSI2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR 0520H,3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步P执行,观察执行结果。(设置存储器的值) .MOV AX,1200H .MOV AX,BX .MOV AX,1200H .MOV AX,BX .MOV AX,1100BX .MOV AX,BXSI .MOV AX,1100BXSI .MOV AX,BP+SI+042、上机调试、验证教材习题3.15。单步执行、观察运行结果并与自己的判断进行比较。 (1)1234(2)4321(3)CFA0(4)9D60 实验二 汇编程序和连接程序的使用一、实验目的。熟悉汇编语言的上机环境,学习 EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。二、示例。试编写一程序,要求比较两个字符串 STRING1和 STRING2所含字符是否相同,若相同则显示 MATCH,若不相同则显示 NO MATCH。用串比较功能来完成程序所要求的功能。上机步骤如下:1、调用 EDIT.COM程序建立汇编语言源程序.ASM建立好的源文件以 EX_1.ASM为文件名存盘 DATA SEGMENT STRING1 DB Visual Basic STRING2 DB Visual Basic COUNT EQU $-STRING2 MESS1 DB MATCH!,13,10,$ MESS2 DB NO MATCH!,13,10,$ DATA ENDS code segment assume cs:code,ds:data,es:data main proc far start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax ;main program mov cx,count lea si,string1 lea di,string2 cld repz cmpsb jz mes1 mov dx,offset mess2 jmp disp0 mes1:mov dx,offset mess1 disp0: mov ah,9 int 21h exit: ret main endp code ends end start修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为:NO MATCH!修改前:修改后:三、实验题。1、上机完成以上示例程序。2、完成课堂例题,并用 DEBUG运行,观察结果。 data segmentX db 6Y db ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al,xmov y,5add y,almov ah,4chint 21hcode endsend start程序:改变后:实验三 顺序结构程序设计一、实验目的学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。二、示 例试问如下程序执行到exit时,字单元A、B、D、D+1、D+2中的内容各是什么?源程序如下:data segment a db 10 b dw 20 d db 30,40,50 data endscode segment assume cs:code,ds:datastart: mov al,data mov ds,ax mov al,d+1 add al,d mov a,al mov al,d+1 add al,d+2 mov b,al add d,10 add d+1,20 add d+2,30exit: mov ah,4ch int 21hcode ends end start阅读以上程序,运行程序并用debug调试分析出结果。字单元A:4C5A。字单元B:2B5A。字单元D:3C2B。字单元D+1:503C。字单元D+2:0050。三、实验题1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DATAA、DATAB、DATAC字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。要求: 在DEBUG下多次修改X的值,观察执行结果Y; 修改原程序,从键盘上输入X的值,观察执行结果Y。(见书P471) data segment dataa db 1 datab db 3 datac dw 5 tabl db 7 result dw ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov al,tabl mul al mul dataa mov bx,ax mov al,tabl mul datab add ax,bx add ax,datac mov result,axexit: mov ah,4ch int 21hcode ends end start运行结果为16进制的4B,即75,计算正确。在修改X值为9后,运算结果为71,即113,计算正确。继续修改X值为3,运行结果为17,即23,计算正确。 data segment dataa db 1 datab db 3 datac dw 5 tabl db ? result dw ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov ah,01 int 21h sub al,30h mov tabl,al mul al mul dataa push ax mov al,tabl mul datab pop bx add ax,bx add ax,datac mov result,axexit: mov ah,4ch int 21hcode ends end start从键盘上输入X值为7,输出结果为4B。2、上机完成教材习题3.11(P108),写出正确结果。data segmenttable dw 10,20,30,40,50entry dw 3data endscode segmentASSUME DS:data,cs:codestart:mov ax,datamov ds,axmov bx,offset tableadd bx,entrymov ax,bxcode endsend startAX=1E00H。四、实验报告写出程序清单,记录运行结果;总结DEBUG中U、E、D、T、G命令的功能。U命令的功能:将主存内容按照机器代码形成汇编指令显示;E命令的功能:用于修改主存内容;D命令的功能:显示主存单元的内容;T命令的功能:每执行一条指令就显示运行结果;G命令的功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。实验四 循环结构程序设计一、实验目的理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。二、示 例1、单循环程序已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。【参考程序如下】DSEG SEGMENT;定义段。DATA1 DB ABCDEFG3;定义字符串赋值给变量。DATA2 DB ABCDEF3G;定义字符串赋值给变量。CNT DW 8;定义变量。DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG;赋值。 MOV DS,AX MOV DL,31H;赋值。 LEA SI,DATA1;取变量的偏移地址。 LEA DI,DATA2;取变量的偏移地址、首地址。 MOV CX,CNT DEC SI;SI自减。 DEC DI;DI自减。AGAIN:INC SI;自增。 INC DI;进行比较。 MOV AL,SI;地址的内容赋值给AL。 CMP AL,DI;进行比较。 LOOPZ AGAIN;如果相等,循环到AGAIN。 JZ DISP;若相等,则跳转到显示。 DEC DL;DL自减。DISP: MOV AH,2;赋值。 INT 21H;中断语句。 MOV AH,4CH INT 21HCSEG ENDSEND START输入相同数据时:DSEG SEGMENT;定义段。DATA1 DB ABCDEFGG;定义字符串赋值给变量。DATA2 DB ABCDEFGG;定义字符串赋值给变量。CNT DW 8;定义变量。DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG;赋值。 MOV DS,AX MOV DL,31H;赋值。 LEA SI,DATA1;取变量的偏移地址。 LEA DI,DATA2;取变量的偏移地址、首地址。 MOV CX,CNT DEC SI;SI自减。 DEC DI;DI自减。AGAIN:INC SI;自增。 INC DI;进行比较。 MOV AL,SI;地址的内容赋值给AL。 CMP AL,DI;进行比较。 LOOPZ AGAIN;如果相等,循环到AGAIN。 JZ DISP;若相等,则跳转到显示。 DEC DL;DL自减。DISP: MOV AH,2;赋值。 INT 21H;中断语句。 MOV AH,4CH INT 21HCSEG ENDS END START三、实验题课堂实验内容:教材习题5.2,习题5.17。5.2:DATAS SEGMENT;输入数据段代码。DATAS ENDSSTACKS SEGMENT;输入堆栈段代码。STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS;定义段。START:MOV AX,DATASMOV DS,AXMOV CX,2;定义循环次数。MOV AH,1;中断,从键盘输入字符。INT 21HMOV DL,AL;把AL赋值给DL。DEC DL;DL自减。MOV AH,2;中断指令,显示单个字符。INT 21HS:INC DL;自增1,CX自减1,CX不为0则继续循环。MOV AH,2INT 21HDEC CXJNZ S;输入代码段代码。MOV AH,4CHINT 21HCODES ENDSEND START输入k,前导字符j,后续字符l,输出jkl,正确。5.17:DATAS SEGMENT;输入数据段代码。MEM DB 4 DUP(?);定义数组。DATAS ENDSSTACKS SEGMENT;输入堆栈段代码。STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,2A49H;给AX赋值。LEA BX,MEM;把数组MEM的首地址赋值给BX。MOV CH,4;给CH赋值。即循环次数。S:MOV DX,AX;把AX的值赋给DX。MOV CL,4;给CL赋值。即移位位数。AND DX,000FH;相与,取出最低位。ADD DX,30HCMP DX,3AHJL NEXT;如果小于则跳转到NEXT。ADD DX,07H;如果大于就把DX加7。NEXT:MOV BX,DX;把DX赋值给BX下地址的内容,即数组。INC BX;BX自增1。ROR AX,CL;将AX循环右移CL位。DEC CH;CH自减。JNZ S;如果不为0则跳转。MOV AH,4CHINT 21HCODES ENDSEND START实验五 分支结构程序设计一、实验目的掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。二、示 例简单分支结构判断方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag置1,否则置0(假设a、b、c均为字节变量,表达-127+127的数据)。当a=1,b=3,c=1时有实根。程序如下:运行结果如下:当a=1,b=1,c=1时有实根。程序如下:三、实验题(1)教材习题5.21。程序如下:data segment array dw x,y,z data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov cx,0 mov si,0 mov di,2 call bj mov si,0 mov di,4 call bj mov si,2 mov di,4 call bj cmp cl, 3 jnz show mov cl,2 show: add cx,30h mov ah,02h mov dl,cl int 21h mov ah,4ch int 21hbj: mov ax,ds:arraysi mov bx,ds:arraydi cmp ax,bx jz xd ret xd:inc cx retcode endsend start 三个数都相等时的运行结果: 三个数中有两个数相等的运行结果: 三个数都不相等时的运行结果:(2)已知DATAX和DATAY单元各存放一个带符号字节数据,从键盘上接收加()、减()、乘(*)或除(/)符号,然后完成相应运算,结果存入RLT单元。程序如下:data segmentdatax db 4hdatay db 5hrlt db 1 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov bl,dataxmov bh,dataymov ah,01hint 21hcmp al,+je jiafacmp al,-je jianfacmp al,*je chfcmp al,/je chufachufa:mov al,blsub ah,ahdiv bhmov bl,aljmp q5chf:mov al,bhmul blmov bl,aljmp q5jianfa: sub bl,bhjmp q5jiafa: add bl,bhq5: mov al,blmov cl,4shr al,cladd al,30hcmp al,39hjbe xianshi1add al,07hxianshi1: mov dl,almov rlt,almov ah,02hint 21hmov al,bland al,0fhadd al,30hcmp al,39hjbe xianshi2add al,07hxianshi2: mov dl,almov rlt,almov ah,02hint 21hmov ah,4chint 21hcode endsend start运行结果: 加: 减: 乘: 除:实验六 子程序设计一、实验目的掌握子程序的设计方法;理解子程序调用与返回指令的执行过程及堆栈的变化情况;掌握子程序调用过程中主程序与子程序间的参数传递方式,掌握现场的保护与恢复方法,会编制嵌套子程序。二、实验题1、上机验证教材例6.3十进制到十六进制数的转换,仿照示例进行调试。decihex segmentassume cs:decihexmain proc farrepeat1:call decibincall crlfcall binihexcall crlfjmp repeat1main endpdecibin proc nearmov bx,0newchar:mov ah,1int

温馨提示

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

评论

0/150

提交评论