北邮微机原理软件实验报告_第1页
北邮微机原理软件实验报告_第2页
北邮微机原理软件实验报告_第3页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理软件实验报告实验二分支、循环程序设计一. 实验目的1. 开始独立进行汇编语言程序设计。2. 掌握基本分支,循环程序设计。3. 掌握最简单的DOS功能调用。二实验内容1. 安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过 92. 编写一个程序统计数据区中正数,负数和零的个数。3. 将统计结果在屏幕上显示。三流程图开始DS,SS,CX,BXU 始化数送入AXBX=BX+2四.源代码DATA SEGMENTZB=B+1N >果1小7Y 1A=A+1与0相比NCX=0Y显示数据数据中” 0的个数 数据中大于0的个数 数据中小"结束NUM DW 9,8,0,-7,

2、6,-5,-4,3,2,-1,0,-8匕9,01;个0,7个正数,6个负数,符合题目要求N DW ($-NUM)/2;TYPE0 DBTYPE1 DBDW 0DW 0DW 0TYPE2 DBLOCATE DW0DH, OAH, 'Number of zeros : $'0DH, 0AH, 'Number of greater than 0 : $'0DH, 0AH, 'Number of less than 0 : $' TYPEO, TYPE1, TYPE20Z=Z+1设定的一组数据,其中4该组数据的个数DATA ENDSSTACK SEGME

3、NT STACKDW 128 DUPSTACK ENDSCODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODESTART: MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AX;初始化DS SS指向STAMOV BX, OFFSET NUM ; 将NUM中第一个数字的地址送入 BXMOV CX, N;将N中数字个数送入CXLOOP1: MOV AX, BX;取出NUM中的第一个数字CMP AX, 0;与零相比JZ IFZ;判断结果为是0,跳转到IFZ处继续执行SAL AX, 1JC IFL;判断结果是小于 0,跳转到IF

4、LINC WORD PTR A;否则,A自加,然后继续执行程序JMP CONTINUEIFL:INC WORD PTR B;B计数加 1JMP CONTINUEIFZ:INC Z;Z计数加1CONTINUE:ADD BX, 2;指针+2,继续送入下一数字LOOP LOOP1;循环CX次判断MOV CX, 3;共显示3个字符串XOR BX, BXDISP:MOV DX, LOCATEBXMOV AH, 09H;DOS 09号功能调用,显示字符串INT 21HMOV DX, ZBXADD DX, 'O'转换为ASCII码MOV AH, 02H;DOS 02号功能调用,显示字符INT

5、 21HADD BX, 2;指针+2( DvyLOOP DISPMOV AX, 4C00HINT 21H;返回DOS系统CODE ENDSEND START五.运行结果六.预习题1. 十进制数0 - 9 所对应的ASCII码是什么?如何将十进制数0 - 9 在屏 幕上显示出来?答:09 的 ASCII 码值依次为:30H,31H,32H,33H,34H,35H,36H,37H,38H,39H。 用待显示数加30H即可得到对应ASCII码,将待显示数的ASCII码值赋给DX,使 用“ INT 21H” 02号DOS能调用显示字符。2. 如何检验一个数为正,为负或为零?你能举出多少种不同的方法?答

6、:方法1:用test指令检查该数最高位。若为0,则为正数。否则,检测其余 位判断为负数或0。方法2:用cmp指令将该数与0相比,判断标志寄存器。SF® OF=0为正数或0。 否则为负数。实验三代码转换程序设计一. 实验目的1. 掌握几种最基本的代码转换方法。2. 运用子程序进行程序设计。二. 实验内容1. 从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来。2. 两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明。3. 对输入要有检错措施,以防止非法字符输入,并有适当的提示。4. 将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图。三.

7、模块层次图及流程图开始四源代码DATA SEGMENTA DB 100 DUP (0)B DB 100,0,'$'STRING DB ODH,OAH,'ERROR INPUT ',0DH,0AH, '$'STRING1 DB 0DH,0AH,'the min number is ',0DH,0AH, '$'DATA ENDSSTACK SEGMENT STACKDW 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKINPUT PROC;子程

8、序PUSH AX;保护寄存器内容PUSH BX;保护寄存器内容PUSH CX;保护寄存器内容PUSH DX;保护寄存器内容STAR: MOV CX,0;开始,表示输入的数是否可以构成两位十进制数MOV BX,OFFSET AAGAIN: MOV AH,01HINT 21HCMP AL,30H ; JB SHOWCMP AL,39H JA SHOWMOV BX,AL 则向下运行输入比较是否合法存储,判断是否一个字,不是继续输入,否INC BXINC CXAND CX,1JNZ AGAIN ;CX 数MOV CX,0MOV AH,01HINT 21HMOV BX,ALINC BX若为0,输入了两个

9、数,可以构成一个两位十进制判断下一输入字符输入CMPAL,20H ;判断是否空格:是,继续输入;否,判断是否为回车JZ AGAINCMP AL,0DH ;JNZ SHOW;JMP OKEY ;SHOW: MOV AH,09H ;MOV DX,OFFSET STRINGINT 21HJMP STAROKEY: MOV BX,AL ;POP DXPOP CXPOP BXPOP AXRETINPUT ENDPCHANGE PROCPUSH AXPUSH BXPUSH DXMOV BX,OFFSET AONCE: MOV AL,BX;SUB AL,30H;INC BX判断是否为回车都不是,就输入错误,

10、重新输入是回车,就输入结束。否则结束子程序调用不合法显示错误重新输入输入结束读数转化为16进制数转化为16进制数MOV DL,1O;MUL DLMOV DH,BXSUB DH,30HINC BXADD AL,DH ;结果CMP AL,B ;比较哪个最小JB YESCMP BYTE PTR BX,0DH ;判断是否是回车JZ LASTJMP ONCEYES: MOV B,AL最小数存于BCMP BYTE PTR BX,0DH JZ LASTINC BXJMP ONCELAST: NOPMOV AL,B ;将数的个位和十位分别存储 AH存个位AL存十位MOV AH,0MOV DL,10DIV DL

11、ADD AH,30H ;ADD AL,30HMOV B,AL;MOV B+1,AHPOP DX;popPOP BXPOP AXRETCHANGE ENDPSTART PROC FARMOV AX,DATAMOV DS,AXCALL INPUT;MOV AH,09HMOV DX,OFFSET STRING1转换为ASCII码存到内存中出原保存的寄存器数据主程序调用输入子程序;显示提示性语句调用比较子程序显示最小数INT 21HCALL CHANGEMOV AH,09HMOV DX,OFFSET BINT 21HMOV AX,4C00HINT 21HSTART ENDPCODE ENDSEND S

12、TART五.运行结果W CA'Ad&bjg c.exeSoiree listing NUL.LST:Cross-reference MJL.CRF1:i981A ftlA93SJ Bytw symbol space free0 Warning Frrnrs0 Severe FrroirsD;masH5>1 ink c.objMicrosoft (R (Jwerlay Linker yersiori 3.64JCopyright (C) Hicrosoft Corp 1963 1987. fill rights reserved.Run FiU C.tXhJ :List r

13、ile ENUL.MAP1:Libraeies -LIB:C:nasMS>dhug c.nxo-g恥 67 37 加 11 B7the rin number is04卩rogran ternioritrd nornri 1六.预习题1. 如何将输入的两个字符(0 - 9)变为十进制或二进制数?答:将数的ASCII码值减去30H,即可得到对应的十进制数。2. 如何将选出的最小值(二进制或十进制)变为ASCII码再进行显示?答:用DE定义一个字节型数据存放十进制数(高四位表示十位,低四位表示个位)。使用cmp指令,先比较高四位,若小于,则和已存的数交换;若等于,则 继续比较低四位,小于则交换

14、。若等于,数不变。3你觉得采用二进制运算还是十进制运算更适合于这个实验?答:十进制更合适。实验四子程序设计一. 实验目的1. 进一步掌握子程序设计方法。2. 进一步掌握基本的DOS功能调用。二. 实验内容1. 从键盘上输入某班学生的某科目成绩输入按学生的学号由小到大的顺序输 入2. 统计检查每个学生的名次。3. 将统计结果在屏幕上显示。4. 为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.尽 可能考虑美观。5. 输入要有检错手段。流程图四源代码DATA SEGMENTBUFFER DB 100 DB ?DB 10 DUP (?)in put the score of the

15、 stude nts:',0DH,0AH,'$'STR1 DB 'pleaseSTR2 DB 'error,please in put the score agai n:',0DH,0AH,'$'STR3 DB 'num rank scor ',0DH,0AH,'$'提示语句的字符串VAR1 DW?VAR2 DW?CK DB ?TAB DB 100 DUPDATA ENDSSTACK SEGMENT STACK 'stack'DB 100 DUP ('s')STACK

16、 ENDSCODE SEGMENT PARA 'code'ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AX;初始化DSLEADX,STR1MOVAH,09H ;调用DOS 09号功能显示字符串STR1INT 21HINPUT: LEA DX,BUFFERMOVAH,0AH ;调用DOS 0A号功能,从键盘输入字符串并存储INT21HLEADI,TABXORCX,CXMOVAH,30HMOVDH,31HLEABX,BUFFER+2CALLCHECK;调用检错子程序

17、CMPCK,1JZINPUTCALLCOM;调用排序子程序MOVDL,0DHMOVAH,02H;调用DOS 02号功能,显示DL字符INT21HMOVDL,0AHMOVAH,02HINT21HLEADX,STR3;调用DOS09号功能,显示字符串STR3MOV AH,09HINT 21HCALL DISPY RETSTART ENDPCHECK PROC调用送显程序检验子程序NEXT1: MOVCK,0MOVDI,AHINCDIMOVDI,DHINCDICMPDH,39HJZL1INCDHJMPL2L1: MOVDH,30HINCAHL2: MOVAL,BXCMPAL,30HJBERRORCM

18、PAL,39HJAERRORMOVDI,ALINCDIINCBXMOVAL,BXCMPAL,30HJBERRORCMPAL,39HJAERRORMOVDI,ALINCDIINCBXINCCXMOVAL,BXCMPAL,0DHJZFINISH1INCBXJMPNEXT1ERROR: LEADX,STR2STR2MOVAH,9INT21HMOVCK,1FINISH1:调用DOS 09号功能,显示字符串RETCHECK ENDPCOM PROC;调用排序子程序COMP1: PUSH CXMOVVAR1,CXSHLCX,1SHLCX,1SUBCX,4MOVVAR2,CXPOPCXDECDIDECDIJ

19、MPCOTICOMP2: ADDDI,VAR2COTI: MOVBL,0MOVCX,VAR1DECCXAGAN: MOVAL,DICMPAL,DI-4JAGOON1JBGOON3INCDIMOVAL,DICMPAL,DI-4PUSHFDECDIPOPFJAGOON1JBEGOON3GOON1: MOVBL,-1PUSHCXMOVCX,4DECDIDECDIGOON2: MOVAL,DIXCHGAL,DI-4MOVDI,ALINCDILOOPGOON2POPCXDECDIDECDIGOON3: DEC DIDEC DIDECDIDECDILOOPAGANCMPBL,0JNZCOMP2DECDID

20、ECDIMOVCX,VAR1MOVBH,30HMOVBL,31HRETCOM ENDPDISPY PROC;送显子程序DISPY1: MOVDL,BHMOVAH,02H ;调用DOS02号功能,显示DL字符(学号)INT21HMOVDL,BLMOVAH,02HINT21HMOVDL,''调用DOS 02号功能,显示DL字符(空格)MOVAH,02HINT21HINT21HINT21HMOVDL,DIMOVAH,02H ;调用DOS02号功能,显示DL字符(排名)INT21HINCDIMOVDL,DIMOVAH,02HINT21HINCDIMOVDL,''MOVA

21、H,02H ;调用DOS02号功能,显示DL字符(空格)INT21HINT21HINT21HMOVDL,DIMOVAH,02HINT21HINCDIMOVDL,DIMOVAH,02H ;调用DOS02号功能,显示DL字符(成绩)INT 21HINC DIMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HCMP BL,39HJZ L3INC BLJMP NEXT2L3: MOV BL,30HINC BHNEXT2: LOOP DISPY1;循环显示RETDISPY ENDPCODE ENDSEND START五.运行结果S CA'

22、Ax.亡=debug d.exir?2O0? M|icr0S0H Corpordtion?C: LlsersSophie>cd .,C:Users>cJ,C: >cd NfisnSD:ndSi>J>>dE;biiy-0 ,please input the score of the students: urrorinput the score dUdin:用 83 65 59 9i 2h ?4nthrankscor0105%a?02S3的0178鬧077i0503備f!6财59070626Prcigran tcrnindtrri nor«ri 1 y

23、六.预习题1. 如何确定一个学生在这门科目中的名次 ?答:将学生成绩按照学号依次存放在一个数据区内,设BX为指针指向首地址,使用数据结构中的排序算法进行比较(比如冒泡排序法)。2你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单 ? 答:使用排序算法,通过指针排序好成绩后,其对应的学号也相应排好。3.准备好模块层次图.StartINPUT输入4.给出输出显示的形式*CHECK检错COM排序Num rank , scor分别表示学生的学号,排名和分数。实验五子程序设计一. 实验目的1. 初步掌握中断程序的设计方法。2. 初步掌握修改DOS系统中断,以适应实际使用的方法。二. 实验内容

24、1. 编写一个32位二进制数除以16位二进制数的除法程序观察当除数为0, 或超过相应寄存器范围时,程序执行的结果。2. 修改零号中断服务程序,使它具有以下功能:(1) 判断除数是否为0,当除数为0时,显示相应的结果。(2) 当除数不为0时,采用适当的方法完成商超过 16位的二进制数的除法运 算。3. 注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复。三. 流程图message db OAH,ODH,'divisor equals O.',Odh,Oah,'$'messagel DB 0AH,0DH,' in put error',0

25、DH,0AH,'$'message2 DB 'PLEASE INPUT THE DIVIDEND (32)',0AH,0DH,'$'message3 DB OAH,ODH,'PLEASE INPUT THE DIVISOR (16)',0AH,0DH,'$'message4 DB 0AH,0DH,'THE QUOTIENT IS:','$'message5 DB 0AH,0DH,'THE REMAINDER IS:','$'DATA ENDSSTACK

26、 SEGMENT STACK 'STACK'STACK ENDSCODE SEGMENT;代码段ASSUME CS:CODE, SS:STACK ,DS:DATAstart proc farpush dsmov ax,0push axmov ax,datamov ds,axsti;TF中断标志置1mov al,0;保存原中断向量mov ah,35hint 21hpush espush bxpush dx;写中断向量mov ax,seg in tOOmov ds,axmov dx,offset in t00mov al,0mov ah,25hint 21hpop dsmov ah

27、,09hmov dx,seg message2 mov ds,dxmov dx,offset message2 int 21hmov cx,1Oh mov ax,OOOOh push ax a1: mov ah,01hint 21hcmp al,'O'jz a2cmp al,'1' jnz error1 stcrcl dx,1 loop a1 jmp a3 a2: clcrcl dx,1loop a1a3:mov cx,10h a4: mov ah,01hint 21hcmp al,'0'jz a5cmp al,'1' jnz e

28、rror2 stc pop ax rcl ax,1 push ax loop a4 jmp a6 a5: pop axclcrcl ax,1 push ax loop a4 a6: mov ah,09hmov dx,seg message3mov ds,dx;提示输入32位二进制0或1;输入数字与0比较;输入数字与1比较;输入有误则跳错误显示程序;为1则将CF置1;dx左移,移进一个1;为0则将CF置0;dx左移,移进一个0;提示输入16位0或1除数mov dx,offset message3 int 21hmov cx,1Oha7: mov ah,01hint 21hcmp al,'

29、0'jz a8cmp al,'1'jnz error2stcrcl bx,1loop a7jmp a9a8: clcrcl bx,1loop a7;输入错误提示jmp a9error1: mov ah,09hmov dx,seg message1 mov ds,dxmov dx,offset message1 int 21h jmp a1 error2: mov ah,09hmov dx,seg message1 mov ds,dxmov dx,offset message1 int 21h jmp a6a9: mov cx,OOOOhpop axdiv bxcmp b

30、x,20hjz a14push dxpush axmov ah,09hmov dx,seg message4 mov ds,dxmov dx,offset message4int 21hmov bx,08hcall xia nshimov bx,08hpop excall xia nshimov ah,09hmov dx,seg message5mov ds,dxmov dx,offset message5 int 21hmov bx,08hpop cx;恢复中断向量表call xia nshia14:pop dxpop cxpush ds mov ds,cx mov al,0 mov ah,25h int 21h pop ds ret start endp xia nshi proc n ear a11:test cx,10000000bjz a10mov ah,02hmov dl,'1'int 21hsal cx,1dec bxjnz a11j

温馨提示

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

评论

0/150

提交评论