收藏 分享(赏)

微机原理上机实验答案.doc

上传人:精品资料 文档编号:7929720 上传时间:2019-05-30 格式:DOC 页数:27 大小:182KB
下载 相关 举报
微机原理上机实验答案.doc_第1页
第1页 / 共27页
微机原理上机实验答案.doc_第2页
第2页 / 共27页
微机原理上机实验答案.doc_第3页
第3页 / 共27页
微机原理上机实验答案.doc_第4页
第4页 / 共27页
微机原理上机实验答案.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

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

2、UP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AL,0FFHMOV DI,1000HMOV CX,5 ;循环 5 次LP1:MOV DI,AL ;FF 放入 1000H-1004H 中INC DIDEC CXJNZ 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 DSSUB AX,AXPUSH AXMov ax,dsegMov ds,ax;=MOV SI,1000H;不带最高位进位的全加器MOV DI,1003HMOV BX,1006HMOV CX,3CLCAA: MOV AL,SIADC AL,DIMOV BX,ALPU

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

5、ODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DS ;使 ES 段地址与 DS 相同MOV ES,AXMOV SI,1000H;不带最高位进位的全加器MOV DI,1003HMOV BX,1006HMOV CX,3CLCAA: MOV AL,SIADC AL,DIMOV BX,ALPUSHF;保护 FR,这里其实没有必要,因为 INC 不会产生进位INC SIINC DIINC BXPOPFLOOP AAMOV DL,0 ;最高位进位ADC DL,0MOV DI,1009HMOV DI,DLMOV SI,1000H ;

6、串传送MOV DI,1010HMOV CX,5CLDREP MOVSW ;一次传送一个字;=RETSTART ENDPCODE ENDSEND STT实验 02C,选作编写一个两位十进制数加法程序,当从键盘上输入:n1n2+n3n4 则在 CRT 上显示n1n2+n3n4=n5n6程序如下:DATA SEGMENTH1 DB “The addends all must be two figures, insufficient adds 0 in front.“,13,10,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT

7、:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXLEA DX,H1 ;打印注释:加数和被加数都必须为两位数,不够的前面补 0MOV AH,09HINT 21HSUB CX,CX ;CX 清零SUB DX,DX ;DX 清零CLC ;清 CFMOV AH,1 ;输入第 1 个数INT 21HMOV CH,AL ;放入 CHSUB CH,30H ;ASCII 码调整INT 21H ;输入第 2 个数MOV CL,AL ;放入 CLSUB CL,30H ;ASCII 码调整MOV AH,2 ;打印加号MOV DL,2BHINT 21HMOV AH,1 ;输

8、入第 3 个数INT 21HMOV DH,AL ;放入 DHSUB DH,30H ;ASCII 码调整INT 21H ;输入第 4 个数MOV DL,AL ;放入 DLSUB DL,30H ;ASCII 码调整ADD CL,DL ;ASCII 码个位加法CMP CL,10;比较个位数结果是否大于 10JNC AA ;大于等于 10 则跳至 AAADD CH,DH;个位不向十位进位的十位加法JMP BBAA: ADD CH,DH ;个位向十位有进位的十位加法ADD CH,1SUB CL,10BB: MOV DL,3DH ;打印等号MOV AH,2INT 21HCMP CH,10 ;比较十位数结果

9、是否大于 10JNC CCMOV DL,0 ;打印十位不向百位进位的百位=0INT 21HJMP CCCCC: MOV DL,31H ;打印十位向百位进位的百位=1INT 21HSUB CH,10CCC:ADD CH,30H ;ASCII 码调整MOV DL,CH ;打印结果中的十位INT 21HADD CL,30H ;ASCII 码调整MOV DL,CL ;打印结果中的个位INT 21HMOV AH,1 ;暂停INT 21H;=RETSTART ENDPCODE ENDSEND STT实验 03A在数据段偏移地址 0100H 处开始,存放 0-9 的平方值(构成一个表格) ,任给一个自然数M

10、 在 0110H 单元中(0 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 DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXLEA DX,TIP ;打印 TIP 信息MOV AH,09HINT 21HBEGIN:MOV DL,13 ;打印换行MOV AH,2INT 21HMOV DL,10 ;打印回行首INT 21HMOV AH

11、,1 ;等待从键盘输入INT 21HMOV SI,OFFSET H2 ;保护输入MOV SI,ALCMP AL,27 ;如果按下 键,跳至 QUITJZ QUITCALL DISPLAY0 ;调用 DISPLAY0 子程序CALL ASCII2HEX ;调用 ASCII2HEX 子程序CMP AL,0FFH ;如果 AL 不等于 FF(出错码)则跳至 CORRECTJNZ CORRECTLEA DX,ERR ;打印错误信息MOV AH,09HINT 21HJMP FINISH ;跳至 FINISHCORRECT:MOV BX,OFFSET H1 ;查表XLATMOV AH,0MOV BX,0M

12、OV BL,AL ;分离 AL 的高 4 位和低 4 位,分离后 AL 中为高 4 位,BL 中为低 4 位AND AL,0F0HMOV CL,4SHR AL,CLAND BL,0FHCALL HEX2ASCII ;调用 HEX2ASCIICALL DISPLAY ;调用 DISPLAY 子程序MOV AL,BLCALL HEX2ASCIICALL DISPLAYMOV DL,72 ;打印字母“H“MOV AH,2INT 21HJMP FINISHQUIT:CALL ESCAPE ;调用 ESCAPE 子程序FINISH:JMP BEGIN;=RETSTART ENDPASCII2HEX PR

13、OC NEARCMP AL,30H ;ASCII 转 16 进制子程序JB ERROR ;如果 ALF 则跳至 ERRORSUB AL,07HNUMBER:SUB AL,30HJMP DONEERROR:MOV AL,0FFHDONE:RETASCII2HEX ENDPHEX2ASCII PROC NEARCLC ;16 进制转 ASCII 子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEARPUSH DX ;显示结果子程序MOV DL,ALMOV AH,2INT 21HPOP DXRETDISPLAY ENDPDISPLA

14、Y0 PROC NEARPUSH AX ;该子程序打印输入及 “:“PUSH DXPUSHFMOV DL,13MOV AH,2INT 21HMOV DL,10INT 21HMOV DL,SI ;打印输入INT 21HMOV DL,58 ;打印“:“INT 21HPOPFPOP DXPOP AXRETDISPLAY0 ENDPESCAPE PROC NEARMOV AH,4CH ;返回操作系统子程序INT 21HRETESCAPE ENDPCODE ENDSEND STT实验 04A把 BX 中的“1”的个数放到 AL 中,并在屏幕上显示“1”的个数。程序如下:CODE SEGMENTASSUM

15、E CS:CODESTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=CLCMOV AX,0MOV DX,0MOV BX,000FHMOV CX,16CHECK:SHL BX,1ADC DL,0CMP DL,1JZ COUNTCONTINUE:LOOP CHECKJMP FINISHCOUNT:ADD AL,1DAACLCMOV DX,0JMP CONTINUEFINISH:MOV AH,0MOV BX,0MOV BL,AL ;分离 AL 的高 4 位和低 4 位,分离后 AL 中为高 4 位,BL中为低 4 位AND AL,0F0HMOV CL,4SHR A

16、L,CLAND BL,0FHCALL HEX2ASCII ;调用 HEX2ASCIICALL DISPLAY ;调用 DISPLAY 子程序MOV AL,BLCALL HEX2ASCIICALL DISPLAY;=RETSTART ENDPHEX2ASCII PROC NEARCLC ;16 进制转 ASCII 子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEARPUSH DX ;显示结果子程序MOV DL,ALMOV AH,2INT 21HPOP DXRETDISPLAY ENDPCODE ENDSEND STT实验 04

17、B,选作编写程序在 CRT 上显示图形(图形见实验册 P17) 。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV BL,14HMOV BH,1MOV CX,0AHLP: PUSH BXCALL SPACECALL STARCALL CRLFPOP BXDEC BLADD BH,2LOOP LP;=RETSTART ENDPSPACE PROC NEAR;打印空格子程序PUSH CXMOV CX,0MOV AH,2MOV DL,32MOV CL,BLLP1:INT 21HLOOP LP1P

18、OP CXRETSPACE ENDPSTAR PROC NEAR;打印“*“子程序PUSH CXMOV CX,0MOV DL,2AHMOV AH,2MOV CL,BHLP2:INT 21HLOOP LP2POP CXRETSTAR ENDPCRLF PROC NEAR;回车换行子程序MOV DL,13MOV AH,2INT 21HMOV DL,10INT 21HRETCRLF ENDPCODE ENDSEND STT实验 04C,选作自动生成 1 至 99BCD 数并送屏幕显示,显示格式见实验册 P19。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FAR

19、STT:PUSH DSSUB AX,AXPUSH AX;=MOV BL,16MOV AL,0CALL PRINTCALL CRLF;=RETSTART ENDPPRINT PROC NEAR;打印数字子程序MOV AH,2MOV DH,1MOV CX,10MOV BH,30HLP2:PUSH CXMOV CX,10MOV BL,30HLP0:CMP BH,30HJZ AAJMP BBAA: CMP BL,30HJZ CONBB: MOV DL,BHINT 21H MOV DL,BLINT 21HCALL SPACECON:INC BLLOOP LP0INC BHPOP CXLOOP LP2RE

20、TPRINT ENDPSPACE PROC NEAR;打印空格子程序PUSH CXMOV CX,0MOV AH,2MOV DL,32MOV CL,2LP1:INT 21HLOOP LP1INC DHCMP DH,17JZ KKJMP LLKK: CALL CRLFMOV DH,1LL: POP CXRETSPACE ENDPCRLF PROC NEAR;回车换行子程序MOV DL,13MOV AH,2INT 21HMOV DL,10INT 21HRETCRLF ENDPCODE ENDSEND STT实验 05A从首地址为 BUF 开始存放 10 个数(单字节无符号数) ,从这些数种找出最大值

21、,存入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 DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXCALL CHAMAXCALL HEX2ASCIIMOV DL,ALMOV AH,2INT 21H;=RETSTART ENDPCHAMAX PROC NEARMOV SI,OFF

22、SET BUFMOV AL,SIMOV CX,9INC SIF0: CMP AL,SIJGE F1MOV AL,SIF1: INC SILOOP F0MOV DI,OFFSET MAXMOV DI,ALRETCHAMAX ENDPHEX2ASCII PROC NEARCLC ;16 进制转 ASCII 子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPCODE ENDSEND STT实验 05B在 BUF 开始存放 10 个字节的带符号数组,分别统计正数、负数、零的个数,存放在数组的后面。程序如下:DATA SEGMENTORG 1000HBUF DW 1

23、,2,3,0,-4,-5,-6,-7,-8,-9EZ DB 0HLZ DB 0HT1 DB “ZHENG SHU, LING, FU SHU:“,13,10,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXCLCMOV AX,0MOV BX,0MOV SI,OFFSET BUFMOV CX,10CHECK:MOV AX,SICMP AX,0JZ EQALZEROSHL AX,1ADC BL,0CMP BL,1JZ LESSZERO

24、CONTINUE:ADD SI,2CLCMOV BL,0LOOP CHECKJMP FINISHEQALZERO:MOV DI,OFFSET EZMOV DL,DIINC DLMOV DI,DLJMP CONTINUELESSZERO:MOV DI,OFFSET LZMOV DL,DIINC DLMOV DI,DLJMP CONTINUEFINISH:MOV BL,10MOV DI,OFFSET EZMOV AL,DISUB BL,ALMOV DI,OFFSET LZMOV AL,DISUB BL,ALMOV AL,BLPUSH DXPUSH AXLEA DX,T1MOV AH,09HINT

25、21HPOP AXPOP DXCALL HEX2ASCIICALL DISPLAYMOV DI,OFFSET EZMOV AL,DICALL HEX2ASCIICALL DISPLAYMOV DI,OFFSET LZMOV AL,DICALL HEX2ASCIICALL DISPLAY;=RETSTART ENDPHEX2ASCII PROC NEARCLC ;16 进制转 ASCII 子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEARPUSH DXMOV DL,ALMOV AH,2INT 21HMOV DL,2CHMOV

26、 AH,2INT 21HPOP DXRETDISPLAY ENDPCODE 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 CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXCLCMOV AX,

27、0MOV BX,0MOV SI,OFFSET BUFMOV DI,OFFSET GZMOV CX,10CHECK:MOV AX,SIMOV DX,AXCMP AX,0JZ LESSZEROSHL AX,1ADC BL,0CMP BL,1JZ LESSZEROMOV DI,DXADD DI,2CONTINUE:ADD SI,2CLCMOV BL,0LOOP CHECKJMP FINISHLESSZERO:MOV WORD PTR SI,0HJMP CONTINUEFINISH:;=RETSTART ENDPCODE ENDSEND STT实验 06,软件综合设计模拟温度测量软件设计,具体要求见实

28、验册 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 1020HBCD1 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,7F

29、HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXMOV AX,0MOV BX,0MOV CX,0MOV DX,0CALL Z1CALL Z2CALL Z3CALL Z4CALL Z5;=RETSTART ENDPZ1 PROC NEAR;将首地址为 1000H 开始存放的 16 个单字节数组取平均值后,存放在 1010H 开始的单元中MOV SI,OFFSET TEMPCLCMOV CX,15MOV AL,SILP1:INC SI

30、MOV BL,SIADD AX,BXADC DX,0LOOP LP1MOV BX,16DIV BXMOV SI,OFFSET AVERMOV SI,DXADD SI,2MOV SI,AXRETZ1 ENDPZ2 PROC NEAR;将存放在 1010H 开始的数转换成压缩的 BCD 码,存放在 1020H 开始的单元中MOV CX,SIMOV AX,0LP: ADD AL,1MOV BL,ALDAACMP BL,9AHJE LP2JMP LP3LP2:ADD AH,1LP3:LOOP LPMOV SI,OFFSET BCD1MOV SI,AXRETZ2 ENDPZ3 PROC NEAR;将存放

31、在 1020H 开始的压缩 BCD 码转换成非压缩 BCD 码,存放在 1030 开始的单元中MOV AX,0MOV BX,0MOV SI,OFFSET BCD1MOV AL,SIMOV BL,ALAND AL,0F0HMOV CL,4SHR AL,CLAND BL,0FHMOV DI,OFFSET BCD2MOV DI,BLINC DIMOV DI,ALINC SIMOV AL,SIINC DIMOV DI,ALRETZ3 ENDPZ4 PROC NEAR;将存放在 1030H 开始的非压缩 BCD 码转换成七段共阳极 LED 显示值,存放在 1040H 开始的单元中MOV SI,OFFSE

32、T BCD2MOV AL,SIMOV BX,OFFSET LEDAXLATMOV DI,OFFSET XLATEDMOV DI,ALMOV CX,2LP4:INC SIINC DIMOV AL,SIXLATMOV DI,ALLOOP LP4RETZ4 ENDPZ5 PROC NEAR;将存放在 1040H 开始的全部数据送 CRT 显示MOV AX,0MOV BX,0MOV DI,OFFSET XLATEDADD DI,2MOV CX,3LP5:MOV DL,DIMOV AL,DLCALL DISPLAY1DEC DILOOP LP5RETZ5 ENDPHEX2ASCII PROC NEAR;

33、16 进制 ASCII 码子程序CLCDAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEAR;数据显示子程序PUSH DXMOV DL,ALMOV AH,2INT 21HPOP DXRETDISPLAY ENDPDISPLAY0 PROC NEAR;格式显示子程序PUSH DXMOV DL,48HMOV AH,2INT 21HMOV DL,20HINT 21HPOP DXRETDISPLAY0 ENDPDISPLAY1 PROC NEAR;分离高低 4 位、调用数据显示子程序、调用格式显示子程序以完成全部显示过程子程序PUSH CXMOV BL,ALAND AL,0F0HMOV CL,4SHR AL,CLAND BL,0FHCALL HEX2ASCIICALL DISPLAYMOV AL,BLCALL HEX2ASCIICALL DISPLAYCALL DISPLAY0POP CXRETDISPLAY1 ENDPCODE ENDSEND STT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报