微机原理:顺序、分支、循环、子程序设计_第1页
微机原理:顺序、分支、循环、子程序设计_第2页
微机原理:顺序、分支、循环、子程序设计_第3页
微机原理:顺序、分支、循环、子程序设计_第4页
微机原理:顺序、分支、循环、子程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上公司名称实验二 顺序、分支、循环、子程序设计微机原理上机实验作者姓名日期预习报告零、相关知识1,LEA指令和MOV指令的区别一、顺序结构计算m*n-w,最终结果保存在AX其中m=12, n=12, w=4最终结果为AX=008CH=140Dname "sequence strcture"org 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000H MOV SI, 12MOV SI+1, 12MOV SI+2, 4MOV AL, SIMOV BL, SI+1MUL BLMOV BX, 0MOV BL, SI+2SUB AX

2、, BX HLT二、分支结构在DS数据段偏移地址为DATA开始的顺序80个单元中,存放着某班80个同学的微机原理考试成绩。现欲编程序统计>=90、8970、6960和<60分的人数,并将统计的结果存放在当前数据段偏移地址为BUFFER的顺序单元中name “branch structure”START:MOV DX, 0000HMOV BX, 0000HMOV CX, 80LEA SI, DATALEA DI, BUFFERGOON:MOV AL, SICMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP

3、 STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV DI, DHMOV DI+1, DLMOV DI+2, BHMOV DI+3, BLHLT三、循环结构在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数。现欲编程序将这100个数按大小顺序排序(以下程序使用的是快速排序算法,也可以使用冒泡排序,嵌套两层循环)name “circle structure”LEA DI, BUFFERMOV BL, 99NEXT0:MOV SI, DIMOV CL, BLNEXT3

4、:MOV AX, SIADD, SI, 2CMP AX, SIJNC NEXT 5MOV DX, SIMOV SI-2, DXMOV SI, AXNEXT5:DEC CLJNZ NEXT3DEC BLJNZ NEXT0HLT四、子程序编写程序,完成将一组BCD数转换成16位二进制数。(BCD数转换成16位二进制数用子程序实现)下面提供三种方案,分别用寄存器、储存器和堆栈传递参数使用寄存器传递参数name "text subprogram using register"STACK SEGMENT STACK DB 256 DUP(?)STACK ENDSDATA SEGMEN

5、T BCD1 DB 07H, 06H, 07H, 02H, 03H LENG1 DB 5 RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CODEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX LEA SI, BCD1 MOV CX, LENG1 CALL FAR PTR BCD-16B MOV RESULT, DX MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B P

6、ROC FAR PUSH BX PUSH AX ADD SI, CX MOV DX, 0 BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX RET BCD-16B ENDPCODES ENDSEND START使用储存器传递参数name "text subprogram using store"STACK SEGMENT STACK DB 256

7、 DUP(?)STACK ENDSDATA SEGMENT BCD1 DB 07H, 06H, 07H, 02H, 03H ADSEG DW ? ADOFST DW ? LENG1 DW ? RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CODEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX ;entrance parameter MOV AX, SEG BCD1 MOV ADSEG, AX MOV AX, OFFSET BCD1 MOV ADOFST, AX MOV LENG1, 5 CALL

8、FAR PTR BCD-16B MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BX PUSH AX PUSH SI PUSH DS MOV DS, ADSEG MOV SI, ADOFST MOV CX, LENG1 XOR DX, DX ADD SI, CX BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX

9、 MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX POP DS POP SI RET BCD-16B ENDPCODES ENDSEND START使用堆栈传递参数name "text subprogram using stack"STACK SEGMENT STACK DB 256 DUP(?)STACK ENDSDATA SEGMENT BCD1 DB 07H, 06H, 07H, 02H, 03H LENG1 DW ? RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CO

10、DEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX ;push PUSH DS LEA SI, BCD1 PUSH SI MOV CX, LENG1 PUSH CX CALL FAR PTR BCD-16B POP DX MOV RESULT, DX MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BP MOV BP, SP PUSH DS PUSH SI PUSH CX PUS

11、H BX PUSH AX MOV CX, BP+6 MOV SI, BP+8 MOV DS, BP+10 ADD SI, CX MOV DX, 0 BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX POP CX POP DS POP SI POP BP RET A BCD-16B ENDPCODES ENDSEND START正式实验报告一、实验要求1教材P74例1

12、。m=6,n=4,w=7。结果Q也放在内存中。2教材P75例3。3从键盘上输入1个数,判断其奇偶性,如果是奇数,屏幕上显示”It is odd”,否则显示”It is even”。4从键盘上输入N个字符(N<16),求这N个字符中A的个数,并将A的个数显示在屏幕上。5. 已知BUF1中有N1个按从小到大的顺序排列的互不相等的无符号数,BUF2中有N2个从小到大的顺序排列的互不相等的无符号数。编写程序将BUF1和BUF2中的数合并到BUF3中,使在BUF3中存放的数互不相等且按从小到大的顺序排列。6. 需要预习报告。二、实验目的学习顺序、分支、循环结构以及子程序的编程设计。三、实验过程(调

13、试分析)3.1 textbook page74-1最后的计算结果应该为AX=6*4-7=17D=11Horg 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000H MOV SI, 6MOV SI+1, 4MOV SI+2, 7MOV AL, SIMOV BL, SI+1MUL BL; 6*4->ALMOV BX, 0MOV BL, SI+2SUB AX, BX HLT3.2 textbook page75-3用"0","1","C","D","E","

14、O","P","Q","R","S","$"的ASCII值代表10位学生的分数,分别为48/49/67/68/69/79/80/81/82/83分name "textbook page75-3"data segment SCORES DB "0","1","C","D","E","O","P","Q",&qu

15、ot;R","S","$" ;48/49/67/68/69/79/80/81/82/83ends code segmentstart: ASSUME DS:DATA, CS:CODE MOV AX, DATA MOV DS, AX MOV CX, 10 MOV SI, OFFSET SCORES;<-> MOV SI, OFFSET SCORES MOV DI, 0000H GOON:MOV AL, SICMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP

16、 STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV DI, DHMOV DI+1, DLMOV DI+2, BHMOV DI+3, BLendsend start由结果可知:DH=0,DL=5,BH=3,BL=2说明90以上0人,8970有5人,6960有3人,小于60有2人3.3 experiment 2-3name "experiment 2-3" data segment HEX1 DB 0AH,0DH,"It is even$" HEX2 D

17、B 0AH,0DH,"It is odd$"0AH,0DH换行+回车 endscode segment start: ASSUME DS:DATA MOV AX, DATA MOV DS, AX ;read from the keyboard MOV CX, 16 DO: MOV AH, 01H INT 21H CMP AL, 13 JZ NEXT0 MOV BL, AL LOOP DO NEXT0: SUB BL, 48 MOV AL, BL MOV BL, 2 DIV BL CMP AH, 1 JNZ NEXT1 JZ NEXT2 NEXT1: LEA DX, HEX1

18、 MOV AH, 09H INT 21H HLT NEXT2: LEA DX, HEX2 MOV AH, 09H INT 21H endsend start若输入的为偶数若输入的为奇数3.4 experiment 2-4name "experiment 2-4"data segment HEX DB 16 DUP(0) endscode segmentstart: ASSUME DS:DATA MOV AX, DATA MOV DS, AX MOV CX, 16;read from keyboardread: CMP CX, 1 JZ STOP MOV AH, 01H IN

19、T 21H CMP AL, 65 JZ count CMP AL, 13 JZ STOP LOOP read ;count 'A' characterscount: INC BL LOOP read STOP: MOV AH, 02H MOV DL, 0AH INT 21H; 打印换行 MOV DL, 0DH INT 21H;打印回车 ADD BL, 48 MOV DL, BL INT 21Hendsend start3.5 experiment 2-5冒泡排序,没有在BUF3中除去重复的字符此题设两个字符串为BUF1 = ”ACEGIK”BUF2 = ”BDFJLHMN”na

20、me "experiment 2-5"此程序不需要压入堆栈保护的数据data segment BUF1 DB "ACEGIK$" BUF2 DB "BDFJLHMN$" BUF3 DB 14 DUP(0) ends stack segment DB 256 DUP(0)endscode segmentstart: ASSUME DS:DATA, CS:CODEL, SS:STACK MOV AX, DATA MOV DS, AX LEA BX, BUF1 LEA SI, BUF2 LEA DI, BUF3 CALL remove CA

21、LL reorder;段内转移,若段间转移,测试一下格式 ;print on the screen LEA DX, BUF3 MOV AH, 09H INT 21H HLT remove proc near MOV CX, 6 DO1: MOV AX, BX MOV DI, AX INC BX INC DI LOOP DO1 MOV CX, 8 DO2: MOV AX, SI MOV DI, AX INC SI INC DI LOOP DO2 RET remove endp reorder proc near MOV CX, 13;注意是13,思考清楚 JUDGE1: LEA DI, BUF3 PUSH CX MOV CX, 13 JUDGE2: MOV AL, DI MOV BL, DI+1 CMP AL, BL JC NEXT1 MOV DI+1, AL MOV DI, BL NEXT1: INC DI LOOP JUDGE2 POP CX LOOP JUDGE1 RET reorder endpend start采用串的合并的算法,可以除去BUF3中重

温馨提示

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

评论

0/150

提交评论