汇编指导书范文.doc_第1页
汇编指导书范文.doc_第2页
汇编指导书范文.doc_第3页
汇编指导书范文.doc_第4页
汇编指导书范文.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

汇编指导书范文 2掌握8088/8086指令系统-数据传送指令、算术指令。 3掌握用DEBUG调试程序的方法。 4掌握8088/8086CPU寄存器的用途和存储器组织及它们之间的关系。 5掌握内存操作数及寻址方法。 6掌握汇编语言伪操作:BYTE PTR,WORD PTR。 【实验性质】验证性实验(学时数2H)【实验内容】 一、DEBUG命令的使用1.敲DEBUG进入DEBUG环境,显示提示符_。 2.用命令D10010F观察内存中的16进制码及屏幕右边的ASCII字符。 3.用命令E1003031323F将30H3FH写入地址为100H开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?4.用命令F100L0FA将A的ASCII码填入内存,用D命令查看结果。 5.用命令F11011F41将41H填入内存,用D命令观察结果并比较。 6.用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。 7.用R命令将AX,BX内容改写为1234H及5678H。 8.用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 二、8088/8086常用指令练习1.传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BX MOV AH,34MOV AL,56MOV CX,75AB XCHG AX,CX2)用U命令检查键入的程序,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。 并注意标志位有无变化。 2.加减法指令:1)用A命令在内存200H处键入下列内容:MOV AH,34MOV AL,2E ADD AL,AH SUB AL,78MOV CX,1234MOV DX,5678ADD CX,DX SUBSUB CX,AX CX,CX2)用U命令检查键入的程序及对应的机器码。 3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。 思考题这次运行还是打入T,行不行?如何单步运行上述小程序?用R命令检查一下IP的内容。 注意T命令与IP的关系。 3.带进位加减法:1)用A命令在内存300H处键入下列内容,并用U命令检查:MOV AH,12MOV AL,89MOV CH,56MOV CL,98ADD AL,CL ADCAH,CH MOVDH,A7MOV DL,58SUB DL,7F SBBDH,342)用T命令逐条运行这些指令,检查并记录有关寄存器及CF内容。 3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。 4.BCD码加减法1)内容:MOV ADDDAA2)要求:用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。 AL,58AL,25 三、内存操作数及各种寻址方式使用:1)用A命令在内存400H处键入下列内容,并用U命令检查:MOV AX,1234MOV1000,AX MOV BX,1002MOV BYTE PTRBX,20MOV DL,39INC BX MOVBX,DL DECDL MOV SI,3MOVBX+SI,DL MOVBX+SI+1,DL MOVWORD PTRBX+SI+2,28462)用T命令逐条运行这些指令,每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。 注意D命令显示结果中右边的ASCII字符及双字节数存放法。 思考题:有关指令中BYTEPTR及WORD PTR伪操作不加行不行?试一试。 四、DEBUG环境下汇编运行程序方法用A命令汇编程序,编程完成将DS:1000开始的10个字节的内存单元的内容相加,并把相加结果存放在DS100A内存单元中,用DEBUG调试运行该程序,并察看运行结果。 内容MOV CX,0AH MOV AL,0MOV BX,1000LL:ADD AL,BXINC BXDEC CXJNZ LLMOVBX,AL INT3步骤1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LL的实际地址,在键入JNZ指令时LL用实际地址值代替。 2)用U命令检查键入的程序及对应的机器码。 3)用E10000102030405060708090A将1000H开始的前10个内存单元的内容修改为01,02,03,04,050A,用D命令查看修改结果。 4)用T命令逐条运行上述小程序指令,检查并记录有关寄存器、存储单元内容及ZF情况。 5)用F2000L0A020304050B将1000H开始的10个内存单元的内容修改为02,03,04,050B。 用D命令查看修改结果。 6)用G=100全速运行上述小程序,用D1000100F查看运行结果。 思考题可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?【报告要求】1.列出8086常用指令练习部分的逐条运行记录。 2.列出DEBUG下调试运行小程序的运行步骤和运行结果。 3.回答思考题。 附:DEBUG命令1.打DEBUG进入DEBUG,显示提示苻_。 2.退出DEBUG命令:Q3.显示内存命令:D起始地址结束地址4.修改内存命令:E起始地址,连续修改打空格键。 打回车键退出E命令。 5.检查寄存器命令:R标志位显示10CF CYNC ZFZR NZSF NGPL AFAC NAOF OVNV PFPE PODF DNUP IFEI DI6.修改寄存器命令:R寄存器名7.小汇编命令:A起始地址,不输入指令打回车键退出A命令。 8.反汇编命令:U起始地址结束地址9.文件命名命令:N盘号:文件名10.读文件命令:L内存地址11.写文件命令:W内存地址10.读扇区命令:L内存地址盘号(0-A:,1-B:)扇区号扇区数11.写扇区命令:W内存地址盘号扇区号扇区数12.运行命令:G=起始地址结束(断点)地址13.单步命令:T=起始地址运行指令数,进入子程序内部。 14.单步命令:P=起始地址运行指令数,不进入子程序内部。 15.内存搬家命令:M起始地址结束地址目的地址实验二数制转换程序【实验目的】1掌握汇编语言程序结构。 2掌握建立、汇编、链接、调试和运行汇编程序的过程。 3掌握DOS功能调用INT21H02号功能字符显示输出方法。 4掌握INT21H4C号功能返回系统的方法。 【实验性质】验证性实验(学时数2H)【实验内容】 一、完成一个十六位二进制数到十六进制数的转换操作程序设计。 ;参考程序代码DATA SEGMENTBUFA DW0001001000110100B;1234H BUFBDB4dup(?)DBH,0DH,0AH,$;输出缓冲区DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOVDS,AX MOV DX,BUFA MOVSI,OFFSET BUFBMOV CH,4;循环控制十六进制数显示位数MOV CL,4ROTATE:ROL DX,CL;循环左移4位,将高位十六进制数移到低位MOV BX,DX;保护移动后的数AND DX,0FH;屏蔽掉高位保留该低位数CMP DL,9JG LADD DL,30H MOVSI,DL INCSI JMPNEXT L:ADD DL,37H MOVSI,DL INCSI NEXT:DEC CH MOVDX,BX JNZROTATE MOV AH,9LEA DX,BUFB INT21H MOV AH,4CH INT21H CODE ENDS END START操作步骤:1)从开始菜单/程序/附件选则c:命令提示符进入DOS环境。 2)敲cd退回到根目录。 3)敲cdmasm进入masm子目录。 4)敲dir列出masm目录下文件。 5)敲edit进入全屏幕环境,输入以上程序,存盘命名退出(如abc.asm)。 6)敲masm abc.asm汇编源程序,如无语法错误就会生成abc.obj形式的二进制目标代码文件,如有错误就回到全屏幕环境修改错误,再重新汇编,直到汇编通过为止。 7)敲link abc.obj链接二进制目标代码文件,生成abc.exe文件。 8)敲DEBUG abc.asm调入DEBUG和文件abc.exe,然后用U命令检查调入程序。 9)调试程序,观察结果。 二、把上题改造成文件的编程格式,汇编、链接和运行调试该程序。 思考题1)若在源程序中把INT21H的H省去,会产生什么现象?2)把INT21H4CH号功能改为INT20H,行不行?【实验要求】1.列出自编程序的程序清单,并加适当注释。 2.写出汇编,连接及调试程序时产生的错误,其原因及解决办法。 3.总结EXE文件和文件的编程格式。 4.回答思考题。 实验三数组排序程序【实验目的】通过实验掌握下列知识:1.循环控制条件的设计。 2.存储器操作数的寻址方式。 3.对内存的数据处理方法。 4.掌握数据的插入、删除操作程序设计方法。 【实验性质】验证性实验(学时数2H)【实验内容】1.将一批无序的整数按照从小到大的顺序进行排序,并按从小到大的顺序显示输出。 2.完成在一批有序字数组中,插入一个数据的操作。 完成在一批有序字数组中,删除一个数据的操作。 【操作步骤】1.进入windows桌面,点击“我的电脑”,进入C盘,找到CMASM2文件夹打开,点击CMASM.EXE进入汇编集成环境。 2.按任意键进入主菜单,选择1建立源程序文件名(不需送扩展名)。 如图3.1所示。 图3.1汇编集成环境3选择2进入全屏幕环境,输入汇编源程序,存盘退出。 如图3.2所示。 图3.2全屏幕环境4.选择3产生EXE文件(包括汇编和链接过程),如有语法错误,返回2查找和修改错误,存盘退出,再重新产生EXE文件,直到成功为止。 如图3.3所示。 图3.3汇编和链接5.选择5进入DEBUG环境,调试运行该程序。 图3.4DEBUG动态调试环境6.用T命令逐条运行程序,观察并记录每次运行结果。 7.用G命令将此程序运行到结束,并用D命令检查所转换的结果。 【参考程序代码】;从小到大排序输出DATAS SEGMENT;此处输入数据段代码NUM DW13,52,21,30,234,76,24,57,38COUNT EQU($-NUM)/2;N个数DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码DW40H DUP(?)TOP LABELWORD STACKSENDS CODESSEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS MAIN PROC FARSTART:MOV AX,DATAS MOVDS,AX MOV AX,STACKS MOVSS,AX LEASP,TOP;此处输入代码段代码MOV CX,COUNT DECCX LEA SI,NUM CLDL2:CALL SORT;冒泡排序,按从小到大排序LOOP L2MOV CX,COUNT LEA SI,NUM CLDL3:CALL OUTPUT;输出一个十进制有符号数MOV DL,MOV AH,6INT21H;输出分隔符LOOP L3MOV AH,4CH INT21H MAIN ENDP;传入参数CX,比较次数;SI,数组起始位置;数组;返回值数组;功能将最大的数移到数组末尾SORT PROEAR PUSHCX PUSHSI L4:LODSW CMPAX,SIJNA L5XCHG AX,SIMOVSI-2,AX L5:LOOP L4POP SIPOP CXRET SORTENDP;传入参数SI,数字存储位置;返回值数组;功能从存储位置上取出一个数,以十进制有符号数输出OUTPUT PROEAR PUSHCX PUSHDI MOVDI,10XOR CX,CX LODSWMOV BX,AX TESTBX,8000H JZL12MOV DL,-MOV AH,2INT21H DECBX NOTBX L12:MOV AX,BX L13:XOR DX,DX DIVDI ADDDX,30H PUSHDX INCCX CMPAX,0JNE L13MOV AH,2L14:POP DXINT21H LOOPL14POP DIPOP CXRET OUTPUTENDP CODESENDS END START【报告要求】1.给出数据的插入、删除操作的算法2.给出程序的流程图。 3.总结地址指针的正确用法4.给出调试通过的自编程序清单和调试记录5.写出实验体会。 实验四子程序设计【实验目的】掌握一般子程序的调用和返回方法,掌握定义过程的伪指令的用法。 【实验性质】设计性实验(学时数2H)【实验内容】完成一个四位十进制数相加的程序设计,形式为2345+7869=?【实验要求】1.设计一个子程序,完成从键盘输入一个四位十进制数的操作。 2.设计一个子程序,完成将缓冲区中的数据送屏幕显示功能。 3.设计一个子程序,完成两个数相加操作。 【参考程序】参考程序1;固定数据字缓存,完成两个数相加操作。 ;加数低于五位输入时最高位要补0;相加结果用ASCII码存储在DATA1中STACK SEGMENTSTACKSTACKDB20DUP(?)STACK ENDSDATA SEGMENTDATA1DB02345DATA2DB07869SYM1DBDATA1=SYM2DBDATA2=SYM3DBSUM=BUFFER DB30DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START:MOVAX,DATA MOVDS,AX MOVES,AX;显示加数和被加数LEA SI,SYM1LEA DI,BUFFER MOV CX,6CLD REPMOVSB LEASI,DATA1CALL DISPLEASI,SYM2LEA DI,BUFFER MOV CX,6CLD REPMOVSB LEASI,DATA2CALL DISP;两数相加MOV CX,5MOVSI,0AGAIN1:MOV AL,DATA1SISUB AL,30H MOV DATA1SI,AL MOV AL,DATA2SISUBAL,30H MOVDATA2SI,AL INCSI LOOPAGAIN1MOV CX,5AGAIN2:DEC SIMOVAL,DATA1SIMOV BL,DATA2SIADC AL,BL AAAMOVDATA1SI,AL LOOPAGAIN2MOVCX,5AGAIN3:MOVAL,DATA1SIADD AL,30H MOVDATA1SI,AL MOVAL,DATA2SIADDAL,30H MOVDATA2SI,AL INCSI LOOPAGAIN3;显示结果LEASI,SYM3LEA DI,BUFFER MOVCX,6CLD REPMOVSB LEASI,DATA1CALL DISPMOV AH,4CH INT21H DISPPROC LEADI,BUFFER+6MOVCX,5CLD REPMOVSB MOVAL,0DH MOVDI,AL INCDI MOVAL,0AH MOVDI,AL INCDI MOVAL,$MOVDI,AL LEA DX,BUFFER MOV AH,09H INT21H RETDISP ENDPCODE ENDSENDSTART参考程序2;键盘输入数据,完成两个数相加操作。 DATA SEGMENTOP1DW?OP2DW?STR1DBPLEASE INPUTTHE1ST WORD,13,10,$STR2DBPLEASE INPUTTHE2ST WORD,13,10,$STR3DBTHE ANSWERIS:,$DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA START:MAINPROCFAR PUSHDS SUBAX,AX PUSHAX MOVAX,DATA MOVDS,AX LEADX,STR1MOVAH,9INT21H CALLDEC2BIN MOVOP1,BX LEADX,STR2MOVAH,9INT21H CALLDEC2BIN MOVOP2,BX ADDBX,OP1LEADX,STR3MOVAH,9INT21H CALLBIN2DEC RETFMAINENDPDEC2BIN PROEAR MOVBX,0NEWCHAR:MOVAH,1INT21H SUBAL,30H JLEXIT CMPAL,9D JGEXIT CBWXCHGAX,BX MOVCX,10D MULCX XCHGAX,BX ADDBX,AX JMPNEWCHAR EXIT:RET DEC2BIN ENDPBIN2DEC PROEAR MOVCX,10000D CALLDECDIV MOVCX,1000D CALLDECDIV MOVCX,100D CALLDECDIV MOVCX,10D CALLDECDIV MOVCX,1D CALLDECDIV RETBIN2DEC ENDPDECDIV PROEAR MOVAX,BXMOVDX,0DIV CXMOVBX,DX MOVDL,AL ADDDL,30HMOVAH,2INT21H RETDECDIV ENDPCODEENDSENDSTART【报告要求】1.给出该程序设计的方案步骤。 2.列出自编程序清单并加注释。 3.写出心得体会。 实验五宏调用程序设计【实验目的】1.熟悉宏定义的一般结构。 2.掌握宏指令的编写方法和调用方法。 3.能区别宏调用和子程序调用的不同之处。 4.了解LOCAL伪操作的用法。 5.熟悉无参数宏指令和有参数宏指令的定义与调用。 【实验性质】验证性实验(学时数2H)【实验内容】1.设计一个子功能,完成显示一串文字信息。 2.设计一个子功能,能实现多个字或字节数据连加或连减的功能。 【参考程序】;汇编实现由键盘输入的3个数(最多4位)求和,输出如a+b+c=d的形式,(不考虑溢出)同时将结果保存在磁盘上。 data segmentwele dbWele usethree numbersum program!$,0dh,0ah tishidbPlease enterthree number:$,0dh,0ah overdbsum savein D:Fname.txt$,0dh,0ah edbpress anykey exit.$,0dh,0ah fnamedbd:fname.txt,0number db12dup(?),0dh,0ah handledw?data ends;-code segment;-main procfar assumecs:code,ds:data start:push dssub ax,ax push ax mov ax,data movds,ax;主过程下lea dx,wele callpstring call crlf lea dx,tishi callpstring call crlf;-call cin3;接收3个数,并显示call add3;3数相加mov bx,dx callbinidec;将dx转换成十进制数call coutdx;输出dx callcreath;建立文件call writh;将dx写入文件call clseh;关闭文件;-callcrlf lea dx,over callpstring callcrlflea dx,e callpstring mov ah,1int21h;住过程上ret mainendp;-;接收数字函数decibin proc near mov cx,4;设置循环次数为4次mov bx,0newchar:movah,1int21h subal,30h jlexit;9,退出cbw xchg ax,bx movdx,10d;将接收到的数称上10并加上下一个数,实现多位数的接收mul dx;xchgax,bx;-;add bx,ax;loop newchar;用loop循环接收最多4位数字,可用回车推出exit:callcrlfret decibinendp;-;接收3个四位数数字,分别存放在ax,bx,cx中,并显示ax+bx+cx=?cin3proc nearcall decibin;接收一个4位数,放到ax mov ax,bx pushax calldecibin;接收一个4位数,放到bx pushbx calldecibin;接收一个4位数,放到cx mov cx,bx pushcx;-在屏幕显示a+b+c=?pop cx;将ax,bx,cx出栈pop bxpop ax pushax;保存ax,bx,cx pushbx pushcx;-mov si,bx movdi,cx mov bx,ax;输出ax callbinidec callcoutadd;+mov bx,si;输出bx callbinidec callcoutadd;+mov bx,di;输出cx callbinidec callcoutel;=;-;-显示完毕pop cxpop bxpop axret cin3endp;-;将输入的数字输出在屏幕上binidec proc near movcx,1000d calldec_div movcx,100d calldec_div movcx,10d calldec_div movcx,1d calldec_div retdec_div proear;转换成10进制在屏幕上显示mov ax,bx movdx,0div cx mov bx,dx movdl,al adddl,30h callcout retdec_div endpbinidec endp;-;这两个模块基本相同,完全可以合并成一个函数,然后分别调用,同学们可以考虑下如何实现。 ;-;将dx内容存入缓冲区pushdx proear leasi,number movcx,1000d callde movcx,100d callde movcx,10d callde movcx,1d callde retde proear;转换成10进制在屏幕上显示movax,bx movdx,0div cxmov bx,dx movdl,al adddl,30h movsi,dl incsi retde endppushdx endp;-;ax+bx+cx=dx加add3proearadd ax,bx addax,cxmovdx,axpushdx movbx,dx callpushdx;将dx的内容写入缓冲区pop dxret add3endp;-;输出字符串pstring proear movah,9h int21h retpstring endp;-;在屏幕显示输出一个字符cout proear movah,2int21h retcout endp;-;显示加号coutadd proear movdl,2bh movah,2h int21h retcoutadd endp;-;显示等号coute

温馨提示

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

评论

0/150

提交评论