内蒙古工业大学微型计算机原理及应用汇编程序实验答案_第1页
内蒙古工业大学微型计算机原理及应用汇编程序实验答案_第2页
内蒙古工业大学微型计算机原理及应用汇编程序实验答案_第3页
内蒙古工业大学微型计算机原理及应用汇编程序实验答案_第4页
内蒙古工业大学微型计算机原理及应用汇编程序实验答案_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

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 SEG

2、MENTORG 1000HH1 DB 5 DUP(?)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,AX PUSH AXMov ax,dsegMov ds,ax,=MOV SI,1000H;不带最高位进位的全加器MOV DI,1003HMOV BX,1006HMOV CX,3CLCAA: MOV AL,SIADC

4、 AL,DIMOV BX,ALPUSHF;保护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 SEGMENTASSUM

5、E CS:CODE,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:PUSH D

7、SSUB 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 ;输入第3个数INT 21HMOV

8、 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 ;比较十位数结果是否大于10JNC CCMOV DL,0 ;打印十位

9、不向百位进位的百位=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在0110H单元中(0=M=9),查表求出M的平方值,并将结果放入0

10、111H单元。程序如下: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 DSSUB AX,AXPUSH AX,=:MOV AX,DATAMOV DS,AXMOV SI,OFFSET H2MOV AL,SIMOV BX,OFFSET H1XLATINC SIMOV SI,AL,=:RETSTART ENDPCODE ENDSEND STT实验03B从内存1000H开始

11、,建立19个自然递增然后又递减的数据串(0-9-0),用DEBUG查看 运行结果。程序如下:DATA SEGMENTORG 1000HH1 DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX,=MOV SI,OFFSET H1MOV DI,OFFSET H1ADD DI,12HMOV AL,0MOV CX,10AA: MOV SI,ALMOV DI,ALINC SIDEC DIINC ALLOOP AA3RETSTART ENDPCODE ENDSEND

12、 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

13、 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,1;等待从键盘输入INT 21HMOV SI,OFFSET H2 ;保护输入MOV SI,ALCMP AL,27;

14、如果按下ESC键,跳至QUITJZ QUITCALL DISPLAY0 ;调用 DISPLAY。子程序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,0MOV BL,AL ;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位AND AL,0F0HMOV CL,4SHR A

15、L,CLAND BL,0FHCALL HEX2ASCII ;调用 HEX2ASCIICALL DISPLAY ;调用 DISPLAY 子程序MOV AL,BLCALL HEX2ASCIICALL DISPLAYMOV DL,72;打印字母HMOV AH,2INT 21HJMP FINISHQUIT:CALL ESCAPE ;调用 ESCAPE 子程序FINISH:JMP BEGIN,=RETSTART ENDPASCII2HEX PROC NEARCMP AL,30H ;ASCII转16进制子程序JB ERROR ;如果 AL0 贝0跳至 ERRORCMP AL,39HJBE NUMBER ;

16、如果 ALF 贝0跳至 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 ENDPDISPLAY0 PROC NEARPUSH AX ;该子程序打印输入及:PUSH DXPUSHFI MOV

17、 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 SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX,=CLCMOV

18、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 AL,CLAND BL,0FHCALL HEX2ASCII ;调用 HEX2ASCIICALL DISPLAY ;调用 DISPLAY子程序M

19、OV AL,BLCALL HEX2ASCIICALL DISPLAY3RETSTART ENDPHEX2ASCII PROC NEARCLC;16进制转ASCII子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEARPUSH DX ;显示结果子程序MOV DL,ALMOV AH,2INT 21HPOP DXRETDISPLAY ENDPCODE ENDSEND STT实验04B,选作 编写程序在CRT上显示图形(图形见实验册P17)。 程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARS

20、TT:PUSH DSSUB AX,AXPUSH AX,=MOV BL,14HMOV BH,1MOV CX,0AHLP: PUSH BXCALL SPACECALL STARCALL CRLFPOP BXDEC BLADD BH,2LOOP LP3RETSTART ENDPSPACE PROC NEAR;打印空格子程序PUSH CXMOV CX,0MOV AH,2MOV DL,32MOV CL,BLLP1:INT 21HLOOP LP1POP CXRETSPACE ENDPSTAR PROC NEAR;打印* 子程序PUSH CXMOV CX,0MOV DL,2AHMOV AH,2MOV CL,

21、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 FARSTT:PUSH DSSUB AX,AXPUSH AX,=MOV BL,16MOV AL,0CALL PRINTCALLCRLF3RETSTART ENDPPRINT PRO

22、C 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 21HMOV DL,BLINT 21HCALL SPACECON:INC BLLOOP LP0INC BHPOP CXLOOP LP2RETPRINT ENDPSPACE PROC NEAR;打印空格子程序PUSH CXMOV CX,0MOV AH,2MOV DL,32MOV CL,2LP1:INT 21HLOOP

23、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个数(单字节无符号数),从这些数种找出最大值,存入MAX 中,并显示到屏幕上。程序如下:DATA SEGMENTORG 1000HBUF DB 1H,2H,3H,4H,9H,5H,6H,0EH,8H,7HORG 1020HMAX DB

24、1 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX,=MOV AX,DATAMOV DS,AXCALLCHAMAXCALL HEX2ASCIIMOV DL,ALMOV AH,2INT 21H;=RETSTART ENDPCHAMAX PROC NEARMOV SI,OFFSET BUFMOV AL,SIMOV CX,9INC SIF0: CMP AL,SIJGE F1MOV AL,SIF1: INC SILOOP F0MOV DI,OFFSET MAXMOV D

25、I,ALRETCHAMAX ENDPHEX2ASCII PROC NEARCLC;16进制转ASCII子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII 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

26、 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 LESSZEROCONTINUE:ADD SI,2CLCMOV BL,0LOOP CHECKJMP FINISHEQALZERO:MOV DI,OFFSET EZMOV DL,DIINC DLMOV DI,DLJMP CONTIN

27、UELESSZERO: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 21HPOP AXPOP DXCALL HEX2ASCIICALL DISPLAYMOV DI,OFFSET EZMOV AL,DICALL HEX2ASCIICALL DISPLAYMOV DI,OFFSET L

28、ZMOV AL,DICALL HEX2ASCIICALL DISPLAY3RETSTART ENDPHEX2ASCII PROC NEARCLC;16进制转ASCII子程序DAAADD AL,0F0HADC AL,40HRETHEX2ASCII ENDPDISPLAY PROC NEARPUSH DXI MOV DL,ALMOV AH,2INT 21HMOV DL,2CHMOV AH,2INT 21HPOP DXRETDISPLAY ENDPCODE ENDSEND STT实验05CBUF开始存放10个16位有符号数(字),将其中的负数抹掉,把正数连续地重新存放在BUF数组之后。程序如下:DA

29、TA 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,0MOV BX,0MOV SI,OFFSET BUFMOV DI,OFFSET GZMOV CX,10CHECK:MOV AX,SIMOV DX,AXCMP AX,0JZ LESSZEROSHL AX,1ADC BL,0CMP BL,1

30、JZ LESSZEROMOV DI,DXADD DI,2CONTINUE:ADD SI,2CLCMOV BL,0LOOP CHECKJMP FINISHLESSZERO:MOV WORD PTR SI,0HJMP 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

31、 10 DUP(?)ORG 1020HBCD1 DB 10 DUP(?)ORG 1030HBCD2 DB 10 DUP(?)ORG 1040HXLATED DB 10 DUP(?)ORG 1060HLEDA DB0C0H,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 DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,0MOV BX,0

32、MOV CX,0MOV DX,0CALL Z1CALLZ2CALLZ3CALLZ4CALLZ5,=RETSTART ENDPZ1 PROC NEAR;将首地址为1000H开始存放的16个单字节数组取平均值后,存放在1010H开始的单元中MOV SI,OFFSET TEMPCLCMOV CX,15MOV AL,SILP1:INC SIMOV 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,OFFS

温馨提示

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

评论

0/150

提交评论