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

下载本文档

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

文档简介

实验1 简单汇编语言程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握简单汇编语言程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的地址。试编写汇编程序,完成Z(W-X) 5-Y)(R+ 2) 。2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0位置1,否则将该位置0。三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。实验2 分支及循环程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握分支程序和循环程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定)三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。实验3 子程序程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握子程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下:EXAMSCORE DB 01 ;学号DB 89,76,54,77,99 ;单科成绩DW ? ;该学生的总分DB 02 ;学号DB 79,88,64,97,92 ;单科成绩DW ? ;该学生的总分三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。实验4 综合程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握汇编语言程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1. 编写汇编程序接收用户从键盘键入的月份数,在终端上显示该月的英文缩写名。当用户按下ESC键时,程序退出,返回DOS。参考程序执行过程如下: month?5 MAY month?9 SEP month?2. 按15行16列的表格形式显示ASCII码为10HFFH的所有字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。3.在第2题程序的基础上进行修改。将显示表格的行、列数由固定的15行16列改为由用户从键盘输入。然后,按用户输入的行列值进行显示。4.编写汇编程序将内存数据区保存的若干个带符号16位数据按从大到小的顺序排列后,以十进制真值的形式在屏幕上显示。三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。源程序:1.1*DATA SEGMENTx DB 3y DB 1z dw ?w db 23r db 6DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov al,wsub al,xcbwmov bl,5idiv blsub al,ymov bl,radd bl,2imul blmov z,axMOV AH,4CHINT 21HCODE ENDSEND START1.2*DATA SEGMENTx db 63y db ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov al,xshr dl,1shr al,1rcl dl,1mov y,dlMOV AH,4CHINT 21HCODE ENDSEND START2.1*DATA SEGMENTSTRING DB g3tRfdtf TR34MESSAGEONE DB Please input the number of string(10):$MESSAGETWO DB The number of string is:$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov ah,9mov dx,offset messageoneint 21hMOV AH,1INT 21HMOV BL,ALMOV DL,10MOV AH,2INT 21HSUB BL,30HCBWMOV CX,BXMOV AL,0MOV BX,OFFSET STRINGBEGIN:MOV DL,BXCMP DL,aJB RECMP DL,zJA REINC ALRE:INC BXLOOP BEGINADD AL,30Hmov bl,almov ah,9mov dx,offset messagetwoint 21hMOV DL,BLMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.2*DATA SEGMENTMAXLEN DB 32ACTLEN DB ?STRINGONE DB 32 DUP(?)STRINGTWO DB 32 DUP(?)MESSAGEONE DB Please input the string(31):$MESSAGETWO DB The encryptic string is:$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov ah,9mov dx,offset messageoneint 21hMOV DX,OFFSET MAXLENMOV AH,0AHINT 21HSUB CH,CHMOV CL,ACTLENADD DX,2MOV BX,DXMOV BP,OFFSET STRINGTWOMOV DL,10MOV AH,2INT 21HBEGIN:MOV DL,BXSUB DL,20HMOV BP,DLINC BXINC BPLOOP BEGINmov AL,$MOV BP,ALmov ah,9mov dx,offset messagetwoint 21hMOV AH,9MOV DX,OFFSET STRINGTWOINT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.1*CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:PUSH DSSUB AX,AXPUSH AXMOV AX,0101111010010101BCALL DISPDECCALL CRLFCALL DISPHEXRETMAIN ENDPDISPDEC PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSHFMOV BX,AXMOV CX,10000DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVPOPFPOP DXPOP CXPOP BXPOP AXRETDEC_DIV PROC NEARMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,2INT 21HRETDEC_DIV ENDPDISPDEC ENDPDISPHEX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSHFMOV BX,AXMOV CH,4MOV CL,4ROTATE:ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AHJL PRINTITADD AL,7HPRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATEPOPFPOP DXPOP CXPOP BXPOP AXRETDISPHEX ENDPCRLF PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDPCODE ENDSEND START3.2*DATA SEGMENTEXAMSCORE DB 01 DB 89,76,54,77,99 DW ? DB 02 DB 79,88,64,97,92 DW ? DB 03 DB 43,45,67,87,98 DW ? DB 04 DB 76,65,27,76,98 DW ? DB 05 DB 67,78,23,87,87 DW ?DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,5MOV BX,OFFSET EXAMSCORERE:INC BXCALL SUMCALL DISPDECCALL CRLFADD BX,2LOOP RERETMAIN ENDPSUM PROC NEARPUSH CXPUSH DXPUSHFMOV AX,0MOV CX,5BEGAIN:MOV DL,BXMOV DH,0ADC AX,DXINC BXLOOP BEGAINMOV BX,AXPOPFPOP DXPOP CXRETSUM ENDPDISPDEC PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSHFMOV BX,AXMOV CX,10000DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVPOPFPOP DXPOP CXPOP BXPOP AXRETDEC_DIV PROC NEARMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,2INT 21HRETDEC_DIV ENDPDISPDEC ENDPCRLF PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDPCODE ENDSEND START实验3扩展*;*data segmentstring0 db error!$string1 db input dec number:$string2 db input hex number:$string301 db output dec number(1):$string302 db output dec number(2):$X DB 5 DUP(?)string4 db output hex number:$data ends;*;*CODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXCALL KEY_DECCALL CRLFCALL DISPDECCALL CRLFCALL DISPDECZCALL CRLFCALL DISPHEXCALL CRLFCALL KEY_HEXCALL CRLFCALL DISPDECCALL CRLFCALL DISPDECZCALL CRLFCALL DISPHEXRETMAIN ENDP;*;*;输入十进制数并用二进制存储在BX中KEY_DEC PROC NEARPUSH AXPUSH CXPUSH DXPUSHFREERR:MOV DX,OFFSET STRING1MOV AH,9INT 21HMOV BX,0DEC_RE:MOV AH,1INT 21HCMP AL,0DHJE DEC_EXITSUB AL,30HJL DEC_ERRCMP AL,9JG DEC_ERRCBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP DEC_REDEC_ERR:CALL ERRORJMP REERRDEC_EXIT:POPFPOP DXPOP CXPOP AXRETKEY_DEC ENDP;*;*;输入十六进制数并用二进制存储在BX中KEY_HEX PROC NEARPUSH AXPUSH CXPUSH DXPUSHFHEX_REERR:MOV DX,OFFSET STRING2MOV AH,9INT 21HMOV BX,0HEX_RE:MOV AH,1INT 21HCMP AL,0DHJE HEX_EXITSUB AL,30HJL HEX_ERRCMP AL,0AHJL NEXTSUB AL,7CMP AL,0AHJL HEX_ERRCMP AL,10HJL NEXTSUB AL,20HCMP AL,0AHJL HEX_ERRCMP AL,10HJNL HEX_ERRNEXT:MOV CL,4SHL BX,CLMOV AH,0ADD BX,AXJMP HEX_REHEX_ERR:CALL ERRORJMP HEX_REERRHEX_EXIT:POPFPOP DXPOP CXPOP AXRETKEY_HEX ENDP;*;*;用十进制输出BX中二进制的数方法一DISPDEC PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSHFMOV DX,OFFSET STRING301MOV AH,9INT 21HMOV CX,10000DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVPOPFPOP DXPOP CXPOP BXPOP AXRETDEC_DIV PROC NEARMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,2INT 21HRETDEC_DIV ENDPDISPDEC ENDP;*;*;用十进制输出BX中二进制的数方法二DISPDECZ PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSHFMOV DX,OFFSET STRING302MOV AH,9INT 21HMOV AX,BXmov BX,0dispdecz_re:MOV DX,0MOV CX,10DDIV CXMOV XBX,DLINC BXcmp ax,0JNE DISPDECZ_REdispdecz_next:CMP BX,0JE DISPDECZ_EXITDEC BXMOV DL,XBXADD DL,30HMOV AH,2INT 21HJMP DISPDECZ_NEXTDISPDECZ_EXIT:POPFPOP DXPOP CXPOP BXPOP AXRETDISPDECZ ENDP;*;*;用十六进制输出BX中二进制数DISPHEX PROC NEARPUSH AXPUSH CXPUSH DXPUSHFMOV DX,OFFSET STRING4MOV AH,9INT 21HMOV CH,4MOV CL,4ROTATE:ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AHJL PRINTITADD AL,7HPRINTIT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATEPOPFPOP DXPOP CXPOP AXRETDISPHEX ENDP;*;*;输出换行符CRLF PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDP;*;*;输出错误提示ERROR PROC NEARPUSH AXPUSH DXPUSHFCALL CRLFMOV DX,OFFSET STRING0MOV AH,9INT 21HCALL CRLFPOPFPOP DXPOP AXRETERROR ENDP;*;*CODE ENDSEND START4.1*DATA SEGMENTMONTH DB JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DECNUM DB 2 DUP(?)STRONE DB month?,10,$STRTWO DB month ERROR!,10,$DATA ENDSCODE SEGMENTASSUME CS:CODE,D

温馨提示

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

评论

0/150

提交评论