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

下载本文档

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

文档简介

实验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 1000HH1 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字节长的数据(高位对应高地址,低位对应低地址),求这两数据(十六进制数)的和,并将结 果放在两数据之后,利用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,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 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,AXMOV 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 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, insufficient 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 21H 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码个位加法 CMP CL,10;比较个位数结果是否大于10 JNC AA ;大于等于10则跳至AA ADD CH,DH;个位不向十位进位的十位加法 JMP BBAA: ADD CH,DH ;个位向十位有进位的十位加法 ADD CH,1 SUB CL,10BB: MOV DL,3DH ;打印等号 MOV AH,2 INT 21H CMP CH,10 ;比较十位数结果是否大于10 JNC CC MOV DL,0 ;打印十位不向百位进位的百位=0 INT 21H JMP CCCCC: MOV DL,31H ;打印十位向百位进位的百位=1 INT 21H SUB CH,10CCC: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单元。程序如下: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从内存1000H开始,建立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,10AA: MOV SI,AL MOV DI,AL INC SI DEC DI INC AL 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 (0F), press 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: MOV 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 ;如果按下键,跳至QUIT JZ QUIT CALL DISPLAY0 ;调用DISPLAY0子程序 CALL ASCII2HEX ;调用ASCII2HEX子程序 CMP AL,0FFH ;如果AL不等于FF(出错码)则跳至CORRECT JNZ CORRECT LEA 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 MOV DL,72 ;打印字母H MOV AH,2 INT 21H JMP FINISHQUIT:CALL ESCAPE ;调用ESCAPE子程序FINISH: JMP BEGIN;= RETSTART ENDPASCII2HEX PROC NEAR CMP AL,30H ;ASCII转16进制子程序 JB ERROR ;如果AL0则跳至ERROR CMP AL,39H JBE NUMBER ;如果ALF则跳至ERROR SUB AL,07HNUMBER: SUB AL,30H JMP DONEERROR: MOV AL,0FFHDONE: RETASCII2HEX ENDPHEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDPDISPLAY PROC NEAR PUSH DX ;显示结果子程序 MOV DL,AL MOV AH,2 INT 21H POP DX RETDISPLAY ENDPDISPLAY0 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 ENDPESCAPE PROC NEAR MOV AH,4CH ;返回操作系统子程序 INT 21H RETESCAPE ENDPCODE 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 FINISHCOUNT: ADD AL,1 DAA 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 ENDPHEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDPDISPLAY PROC NEAR PUSH DX ;显示结果子程序 MOV DL,AL MOV AH,2 INT 21H POP DX RETDISPLAY ENDPCODE ENDSEND STT实验04B,选作编写程序在CRT上显示图形(图形见实验册P17)。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV BL,14H MOV BH,1 MOV CX,0AHLP: PUSH BX CALL SPACE CALL STAR CALL CRLF POP BX DEC BL ADD BH,2 LOOP LP;= RETSTART ENDPSPACE PROC NEAR;打印空格子程序 PUSH CX MOV CX,0 MOV AH,2 MOV DL,32 MOV CL,BLLP1:INT 21H LOOP LP1 POP CX RETSPACE ENDPSTAR PROC NEAR;打印*子程序 PUSH CX MOV CX,0 MOV DL,2AH MOV AH,2 MOV CL,BHLP2:INT 21H LOOP LP2 POP CX RETSTAR ENDPCRLF PROC NEAR;回车换行子程序 MOV DL,13 MOV AH,2 INT 21H MOV DL,10 INT 21H RETCRLF ENDPCODE ENDSEND STT实验04C,选作自动生成1至99BCD数并送屏幕显示,显示格式见实验册P19。程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DS SUB AX,AX PUSH AX;= MOV BL,16 MOV AL,0 CALL PRINT CALL CRLF;= RETSTART ENDPPRINT 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 21H CALL SPACECON:INC BL LOOP LP0 INC BH POP CX LOOP LP2 RETPRINT ENDPSPACE 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 ENDPCRLF PROC NEAR;回车换行子程序 MOV DL,13 MOV AH,2 INT 21H MOV DL,10 INT 21H RETCRLF ENDPCODE 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 DS SUB AX,AX PUSH AX;= MOV AX,DATA MOV DS,AX CALL CHAMAX CALL HEX2ASCII MOV DL,AL MOV AH,2 INT 21H;= RETSTART ENDPCHAMAX PROC NEAR MOV SI,OFFSET BUF MOV AL,SI MOV CX,9 INC SIF0: CMP AL,SI JGE F1 MOV AL,SIF1: INC SI LOOP F0 MOV DI,OFFSET MAX MOV DI,AL RETCHAMAX ENDPHEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDPCODE 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,$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,10CHECK: 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 LOOP CHECK JMP FINISHEQALZERO: MOV DI,OFFSET EZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUELESSZERO: MOV DI,OFFSET LZ MOV DL,DI INC DL MOV DI,DL JMP CONTINUEFINISH: 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 LEA 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 ENDPHEX2ASCII PROC NEAR CLC ;16进制转ASCII子程序 DAA ADD AL,0F0H ADC AL,40H RETHEX2ASCII ENDPDISPLAY PROC NEAR PUSH DX MOV DL,AL MOV AH,2 INT 21H MOV DL,2CH MOV AH,2 INT 21H POP DX RETDISPLAY 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 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,10CHECK: 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 BL,0 LOOP CHECK JMP FINISHLESSZERO: MOV WORD PTR SI,0H JMP CONTINUEFINISH:;= 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 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,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 MOV CX,0 MOV DX,0 CALL Z1 CALL Z2 CALL Z3 CALL Z4 CALL Z5;= RETSTART ENDPZ1 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 ENDPZ2 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,1LP3:LOOP LP MOV SI,OFFSET BCD1 MOV SI,AX RE

温馨提示

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

评论

0/150

提交评论