微机原理上机实验答案_第1页
微机原理上机实验答案_第2页
微机原理上机实验答案_第3页
微机原理上机实验答案_第4页
微机原理上机实验答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、实验01A将FFFFH送到AX,BX,CX,DX,SI,DI,BP寄存器程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,0FFFFH MOV BX,AX MOV CX,AX MOV DX,AX MOV SI,AX MOV DI,AX MOV BP,AX;= RETSTART ENDPCODE ENDSEND STT  实验01B将FFH送到内存1000H,1001H,1002H,1003H,1004H单元中程序如下:DATA SEGMENTORG 1000

2、HH1 DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AL,0FFH MOV DI,1000H MOV CX,5 ;循环5次LP1:MOV DI,AL ;FF放入1000H-1004H中 INC DI DEC CX JNZ LP1;= RETSTART ENDPCODE ENDSEND STT  实验02A编写 一个加法程序,在数据段偏移地址1000H处开始,存放有两个3字节长的数据(高位对应高地址,低位对应低地址

3、),求这两数据(十六进制数)的和,并将结 果放在两数据之后,利用DEBUG调试程序,并求解:CCBBAAH+223344H=?CCBBAA+554433H=?程序如下:DATA SEGMENTORG 1000HH1 DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AXPUSH AXMov ax,dsegMov ds,ax;=MOV SI,1000H;不带最高位进位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLCAA: MOV AL

4、,SI ADC AL,DI MOV BX,ALPUSHF;保护FR,这里其实没有必要,因为INC不会产生进位 INC SI INC DI INC BX POPF LOOP AA  MOV DL,0 ;最高位进位 ADC DL,0 MOV DI,1009H MOV DI,DL;= RETSTART ENDPCODE ENDSEND STT  实验02B用串传送指令把A程序的数据块(被加数、加数、和)偏移地址1000H开始的区域传递到同一数据段的偏移地址为1010H开始的区域,并利用DEBUG查看运行结果程序如下:DATA SEGMENTORG 1000HH1 DB

5、20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DS ;使ES段地址与DS相同 MOV ES,AX MOV SI,1000H;不带最高位进位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLCAA: MOV AL,SI ADC AL,DI MOV BX,ALPUSHF;保护FR,这里其实没有必要,因为INC不会产生进位 INC SI INC DI INC BX POPF LOOP AA

6、60; MOV DL,0 ;最高位进位 ADC DL,0 MOV DI,1009H MOV DI,DL  MOV SI,1000H ;串传送 MOV DI,1010H MOV CX,5 CLD REP MOVSW ;一次传送一个字;= RETSTART ENDPCODE ENDSEND STT  实验02C,选作编写一个两位十进制数加法程序,当从键盘上输入:n1n2+n3n4则在CRT上显示n1n2+n3n4=n5n6程序如下:DATA SEGMENTH1 DB "The addends all must be two figures, insuffic

7、ient adds 0 in front.",13,10,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  LEA DX,H1 ;打印注释:加数和被加数都必须为两位数,不够的前面补0 MOV AH,09H INT 21H  SUB CX,CX ;CX清零 SUB DX,DX ;DX清零 CLC ;清CF   MOV AH,1 ;输入第1个数 INT 2

8、1H MOV CH,AL ;放入CH SUB CH,30H ;ASCII码调整  INT 21H ;输入第2个数 MOV CL,AL ;放入CL SUB CL,30H ;ASCII码调整  MOV AH,2 ;打印加号 MOV DL,2BH INT 21H  MOV AH,1 ;输入第3个数 INT 21H MOV DH,AL ;放入DH SUB DH,30H ;ASCII码调整  INT 21H ;输入第4个数 MOV DL,AL ;放入DL SUB DL,30H ;ASCII码调整  ADD CL,DL ;ASCII码个位加法 

9、CMP CL,10;比较个位数结果是否大于10 JNC AA ;大于等于10则跳至AA ADD CH,DH;个位不向十位进位的十位加法  JMP BB AA: ADD CH,DH ;个位向十位有进位的十位加法 ADD CH,1 SUB CL,10 BB: MOV DL,3DH ;打印等号 MOV AH,2 INT 21H CMP CH,10 ;比较十位数结果是否大于10 JNC CC  MOV DL,0 ;打印十位不向百位进位的百位=0 INT 21H  JMP CCC CC: MOV DL,31H ;打印十位向百位进位的百位=1 I

10、NT 21H SUB CH,10 CCC:ADD CH,30H ;ASCII码调整 MOV DL,CH ;打印结果中的十位 INT 21H  ADD CL,30H ;ASCII码调整 MOV DL,CL ;打印结果中的个位 INT 21H  MOV AH,1 ;暂停 INT 21H;= RETSTART ENDPCODE ENDSEND STT  实验03A在数据段偏移地址0100H处开始,存放0-9的平方值(构成一个表格),任给一个自然数M在0110H单元中(0<=M<=9),查表求出M的平方值,并将结果放入0111H单元。程序如

11、下:DATA SEGMENTORG 0100HH1 DB 00,01,04,09,16,25,36,49,64,81ORG 0110HH2 DB 7,?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  MOV SI,OFFSET H2 MOV AL,SI MOV BX,OFFSET H1 XLAT INC SI MOV SI,AL;= RETSTART ENDPCODE ENDSEND STT实验03B从内存10

12、00H开始,建立19个自然递增然后又递减的数据串(0-9-0),用DEBUG查看运行结果。程序如下:DATA SEGMENTORG 1000HH1 DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV SI,OFFSET H1 MOV DI,OFFSET H1 ADD DI,12H MOV AL,0 MOV CX,10 AA: MOV SI,AL MOV DI,AL  INC SI DEC DI INC AL 

13、 LOOP AA ;= RETSTART ENDPCODE ENDSEND STT  实验03C,选作在数据段偏移地址1000H处,安排部分七段LED显示码表,要求从键盘上任给一个0F中的数,然后再屏幕上显示出其对应的码值。七段共阴极LED显示码表见实验册P14。程序如下:DATA SEGMENTORG 1000HH1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HH2 DB 1 DUP(?)TIP DB 13,10,"The input number must be a HEX

14、 (0F), press <ESC> to quit.",13,10,'$'ERR DB 13,10,"The input number must be a HEX (0F).",13,10,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  LEA DX,TIP ;打印TIP信息 MOV AH,09H INT 21H BEGIN: M

15、OV DL,13 ;打印换行 MOV AH,2 INT 21H  MOV DL,10 ;打印回行首 INT 21H MOV AH,1 ;等待从键盘输入 INT 21H  MOV SI,OFFSET H2 ;保护输入 MOV SI,AL  CMP AL,27 ;如果按下<ESC>键,跳至QUIT JZ QUIT  CALL DISPLAY0 ;调用DISPLAY0子程序 CALL ASCII2HEX ;调用ASCII2HEX子程序  CMP AL,0FFH ;如果AL不等于FF(出错码)则跳至CORRECT JNZ CORRECT L

16、EA DX,ERR ;打印错误信息 MOV AH,09H INT 21H JMP FINISH ;跳至FINISH CORRECT: MOV BX,OFFSET H1 ;查表 XLAT  MOV AH,0 MOV BX,0 MOV BL,AL ;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位 AND AL,0F0H MOV CL,4 SHR AL,CL AND BL,0FH  CALL HEX2ASCII ;调用HEX2ASCII CALL DISPLAY ;调用DISPLAY子程序 MOV AL,BL CALL HEX2ASCII CALL DISPLAY

17、  MOV DL,72 ;打印字母"H" MOV AH,2 INT 21H  JMP FINISH QUIT:CALL ESCAPE ;调用ESCAPE子程序 FINISH: JMP BEGIN;= RETSTART ENDP ASCII2HEX PROC NEAR CMP AL,30H ;ASCII转16进制子程序 JB ERROR ;如果AL<0则跳至ERROR CMP AL,39H JBE NUMBER ;如果AL<=9则跳至NUMBER CMP AL,46H JA ERROR ;如果AL>F则跳至E

18、RROR  SUB AL,07H NUMBER: SUB AL,30H JMP DONE ERROR: MOV AL,0FFH DONE: RETASCII2HEX ENDP HEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DISPLAY PROC NEAR PUSH DX ;显示结果子程序 MOV DL,AL MOV AH,2 INT 21H  POP DX RETDISPLAY ENDP DI

19、SPLAY0 PROC NEAR PUSH AX ;该子程序打印输入及":" PUSH DX PUSHF MOV DL,13 MOV AH,2 INT 21H  MOV DL,10 INT 21H  MOV DL,SI ;打印输入 INT 21H  MOV DL,58 ;打印":" INT 21H  POPF POP DX POP AX RETDISPLAY0 ENDP ESCAPE PROC NEAR MOV AH,4CH ;返回操作系统子程序 INT 21H RETESCAPE ENDP C

20、ODE ENDSEND STT  实验04A把BX中的“1”的个数放到AL中,并在屏幕上显示“1”的个数。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;=  CLC MOV AX,0 MOV DX,0  MOV BX,000FH MOV CX,16 CHECK: SHL BX,1 ADC DL,0 CMP DL,1 JZ COUNTCONTINUE: LOOP CHECK  JMP FINISH COUNT: ADD AL,1 DA

21、A CLC MOV DX,0 JMP CONTINUE FINISH:  MOV AH,0 MOV BX,0 MOV BL,AL ;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位 AND AL,0F0H MOV CL,4 SHR AL,CL AND BL,0FH  CALL HEX2ASCII ;调用HEX2ASCII CALL DISPLAY ;调用DISPLAY子程序 MOV AL,BL CALL HEX2ASCII CALL DISPLAY ;= RETSTART ENDP HEX2ASCII PROC NEAR CLC ;16进制转ASCI

22、I子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DISPLAY PROC NEAR PUSH DX ;显示结果子程序 MOV DL,AL MOV AH,2 INT 21H  POP DX RETDISPLAY ENDP CODE ENDSEND STT  实验04B,选作编写程序在CRT上显示图形(图形见实验册P17)。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;=  MOV B

23、L,14H MOV BH,1 MOV CX,0AH LP: PUSH BX CALL SPACE CALL STAR CALL CRLF POP BX DEC BL ADD BH,2 LOOP LP = RETSTART ENDP SPACE PROC NEAR;打印空格子程序 PUSH CX MOV CX,0 MOV AH,2 MOV DL,32 MOV CL,BLLP1:INT 21H LOOP LP1 POP CX  RETSPACE ENDP STAR PROC NEAR;打印"*"子程序 PUSH CX MOV C

24、X,0 MOV DL,2AH MOV AH,2 MOV CL,BHLP2:INT 21H LOOP LP2 POP CX RETSTAR ENDP CRLF PROC NEAR;回车换行子程序 MOV DL,13 MOV AH,2 INT 21H  MOV DL,10 INT 21H  RETCRLF ENDP CODE ENDSEND STT  实验04C,选作自动生成1至99BCD数并送屏幕显示,显示格式见实验册P19。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS

25、 SUB AX,AX PUSH AX;=  MOV BL,16 MOV AL,0  CALL PRINT  CALL CRLF = RETSTART ENDP PRINT PROC NEAR;打印数字子程序  MOV AH,2 MOV DH,1 MOV CX,10 MOV BH,30H LP2:PUSH CX MOV CX,10 MOV BL,30H LP0:CMP BH,30H JZ AA JMP BBAA: CMP BL,30H JZ CONBB: MOV DL,BH INT 21H   MOV DL,BL INT 21

26、H CALL SPACECON:INC BL LOOP LP0 INC BH POP CX LOOP LP2  RETPRINT ENDP SPACE PROC NEAR;打印空格子程序 PUSH CX MOV CX,0 MOV AH,2 MOV DL,32 MOV CL,2LP1:INT 21H LOOP LP1  INC DH CMP DH,17 JZ KK JMP LLKK: CALL CRLF MOV DH,1 LL: POP CX  RETSPACE ENDP CRLF PROC NEAR;回车换行子程序 MOV DL,13 MOV

27、AH,2 INT 21H  MOV DL,10 INT 21H  RETCRLF ENDP CODE ENDSEND STT  实验05A从首地址为BUF开始存放10个数(单字节无符号数),从这些数种找出最大值,存入MAX中,并显示到屏幕上。程序如下:DATA SEGMENTORG 1000HBUF DB 1H,2H,3H,4H,9H,5H,6H,0EH,8H,7HORG 1020HMAX DB 1 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH D

28、S SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  CALL CHAMAX CALL HEX2ASCII  MOV DL,AL MOV AH,2 INT 21H;= RETSTART ENDP CHAMAX PROC NEAR  MOV SI,OFFSET BUF MOV AL,SI MOV CX,9 INC SI F0: CMP AL,SI JGE F1 MOV AL,SIF1: INC SI LOOP F0  MOV DI,OFFSET MAX MOV DI,AL  RETCHAMA

29、X ENDP HEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP CODE ENDSEND STT  实验05B在BUF开始存放10个字节的带符号数组,分别统计正数、负数、零的个数,存放在数组的后面。程序如下:DATA SEGMENTORG 1000HBUF DW 1,2,3,0,-4,-5,-6,-7,-8,-9EZ DB 0HLZ DB 0HT1 DB "ZHENG SHU, LING, FU SHU:",13,10

30、,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  CLC MOV AX,0 MOV BX,0  MOV SI,OFFSET BUF MOV CX,10 CHECK: MOV AX,SI CMP AX,0 JZ EQALZERO SHL AX,1 ADC BL,0 CMP BL,1 JZ LESSZEROCONTINUE: ADD SI,2 CLC MOV BL,0 LO

31、OP CHECK  JMP FINISH EQALZERO: MOV DI,OFFSET EZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUE LESSZERO: MOV DI,OFFSET LZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUE FINISH: MOV BL,10 MOV DI,OFFSET EZ MOV AL,DI SUB BL,AL MOV DI,OFFSET LZ MOV AL,DI SUB BL,AL MOV AL,BL  PUSH DX PUSH AX L

32、EA DX,T1 MOV AH,09H INT 21H POP AX POP DX  CALL HEX2ASCII CALL DISPLAY MOV DI,OFFSET EZ MOV AL,DI CALL HEX2ASCII CALL DISPLAY MOV DI,OFFSET LZ MOV AL,DI CALL HEX2ASCII CALL DISPLAY ;= RETSTART ENDP HEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDP DIS

33、PLAY PROC NEAR PUSH DX MOV DL,AL MOV AH,2 INT 21H  MOV DL,2CH MOV AH,2 INT 21H  POP DX RETDISPLAY ENDP CODE ENDSEND STT  实验05CBUF开始存放10个16位有符号数(字),将其中的负数抹掉,把正数连续地重新存放在BUF数组之后。程序如下:DATA SEGMENTORG 1000HBUF DW 1,2,3,0,-4,-5,-6,-7,-8,-9GZ DW 10 DUP(?)DATA ENDSCODE SEGMENTASSUME

34、 CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  CLC MOV AX,0 MOV BX,0  MOV SI,OFFSET BUF MOV DI,OFFSET GZ MOV CX,10 CHECK: MOV AX,SI MOV DX,AX CMP AX,0 JZ LESSZERO SHL AX,1 ADC BL,0 CMP BL,1 JZ LESSZERO MOV DI,DX ADD DI,2CONTINUE: ADD SI,2 CLC MOV

35、BL,0 LOOP CHECK  JMP FINISH LESSZERO: MOV WORD PTR SI,0H JMP CONTINUE FINISH:;= RETSTART ENDPCODE ENDSEND STT  实验06,软件综合设计模拟温度测量软件设计,具体要求见实验册P22。程序如下:DATA SEGMENTORG 1000HTEMP DB 128,127,122,128,128,128,127,128,129,129,128,128,129,128,128,128ORG 1010HAVER DB 10 DUP(?)ORG 102

36、0HBCD1 DB 10 DUP(?)ORG 1030HBCD2 DB 10 DUP(?)ORG 1040HXLATED DB 10 DUP(?)ORG 1060HLEDA DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,7FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX  MOV AX,0 MOV BX,0 M

37、OV CX,0 MOV DX,0  CALL Z1 CALL Z2 CALL Z3 CALL Z4 CALL Z5;= RETSTART ENDP Z1 PROC NEAR;将首地址为1000H开始存放的16个单字节数组取平均值后,存放在1010H开始的单元中 MOV SI,OFFSET TEMP CLC MOV CX,15 MOV AL,SI LP1:INC SI MOV BL,SI ADD AX,BX ADC DX,0 LOOP LP1  MOV BX,16 DIV BX  MOV SI,OFFSET AVER MOV SI,DX ADD SI,2 MOV SI,AX RETZ1 ENDP Z2 PROC NEAR;将存放在1010H开始的数转换成压缩的BCD码,存放在1020H开始的单元中 MOV CX,SI MOV AX,0LP: ADD AL,1 MOV BL,AL DAA CMP BL,9AH JE LP2 JMP LP3LP2:ADD AH,1LP

温馨提示

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

评论

0/150

提交评论