1、上机作业三上机作业三1实验目的实验目的1 熟练掌握汇编语言程序设计的方法及上机步骤。2 掌握算术运算指令的应用。3 掌握子程序的设计方法。4 掌握 DOS 功能的调用方法。二实验仪器实验仪器586 微机 1 台3实验内容实验内容有一个首地址为 A 的 N 字数组,请编程序使该数组中的数按从大到小的次序排列。编程要求及提示:1 参加排序的数据及个数由学生自己定义。2 要将排序前的数组和排序后的数组在屏幕上显示出来。4源程序源程序N=40STACK SEGMENT STACK STACKDW 100H DUP(00)TOP LABEL WORDSTACK ENDSDATA SEGMENTDATAB
2、UF DW NDB N DUP(?)ORIGINAL DB 13,10,THE ORIGINAL DATA:$ORDERED DB 10,13,THE ORDERED DATA:$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOP;随机数据MOV CX,DATABUFLEA SI,DATABUF+2MOV BL,18MOV AL,13L:MOV SI,ALINC SIADD AL,BLLOOP
3、LLEA DX,ORIGINALMOV AH,9INT 21HCALL DISPAL;下面给数据排序程序MOV CX,DATABUFDEC CXLEA SI,DATABUF+2ADD SI,CX;L1:PUSH CXPUSH SIL2:MOV AL,SICMP AL,SI-1JBE NOXCHGXCHG AL,SI-1MOV SI,ALNOXCHG:DEC SILOOP L2POP SIPOP CXLOOP L1LEA DX,ORDEREDMOV AH,9INT 21HCALL DISPALEXITPROC:MOV AH,4CHMOV AH,1INT 21HDISPAL PROC NEARPU
4、SH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,DATABUF+2MOV CX,40DISPAL2:MOV AL,DISHR AL,1SHR AL,1SHR AL,1SHR AL,1CALL CHANGMOV AH,2MOV DL,ALINT 21HMOV AL,DIAND AL,0FHCALL CHANGMOV AH,2MOV DL,ALINT 21HMOV AH,2MOV DL,20HINT 21HINC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCHANG PROC NEARCMP
5、AL,10JNGE CHANG1ADD AL,7CHANG1:ADD AL,30HRETCHANG ENDPCODE ENDSEND START5实验体会实验体会实验中遇到的问题以及解决方法:在这几次的编程实验中,我遇到了许多问题。首先,在最开始的时候,无论怎么输入都显示:masm不是内部或外部命令,也不是可运行的程序或批处理文件。后来发现把自己编写的 asm 文件放到 E 盘 masm 文件夹里就行了,之后的每一步实验按照要求一步一步做,就都能出来结果。还有就是不懂得如何输出自己所得到的结果,于是先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。心得体会:通过几次的上机实验课,我懂得了如何使用 txt 文档编写 asm 文件。然后对其进行编译和连接。当完成上述过程后,可以使用 DEBUG 功能来对程序进行调试,这样,就可以清楚地看到每一步运行时各个寄存器的状态。同时,通过自己编译程序,我能够更好地理解课本中的许多程序,也能够自己编写一些简单的程序。总而言之,通过这几次的上机实验课,我学会了通过用计算机编译程序来处理自己在理论课学习上遇到的各种问题。希望在以后的实验中能够积累的越来越多,对此体会也越来越深。