《微机原理五类常用程序(共6页).doc》由会员分享,可在线阅读,更多相关《微机原理五类常用程序(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上五类常用程序:传输数据 求最大最小值 统计正负数 排序 加法程序存储器清零或置FF1.1将1000H-1063H中的各字节内容清0(或置FFH) 1.2传输数据块将1000H-1063H中的字节内容传递到4000H-4063H2.找最大值最小值从2500H-2563H中存放着数据,把其中的最大值找出来,地址存放在3000H中3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。负数个数存入2200H4.1求 1AH+02H+31H+14H+2FH+06H=?数据1AH、0FH 、24H、4EH、18H、2DH放在3000H- 3005H
2、处4.2求十进制计算25 74 89 67+ 49 78 64 95数据25 74 89 67放在2400- 2403数据49 78 64 95放在2500- 25034.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.5.冒泡排序方法5.1字节型变量VAR1、VAR2和VAR3存放有3个无符号数,将其中的内容按从大到小重新排列。 解:经重新排列后,VAR1的值最大,VAR3的值最 小。由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。编程思路:通过在三个数中找出最大值,将它与VAR1单
3、元进行交换;然后对剩余的两个数进行比较,将较大值存放在VAR2中。汇编语言程序如下:5.2存放在2040H-2045H中的字节数据由大到小排列1.1将1000H-1063H中的各字节内容清0(或置FFH) MOV SI, 1000HMOV CX, 0064HXOR AL,ALL1: MOV SI, ALINC SIDEC CXJNZ L1HLT1.2传输数据块将1000H-1063H中的字节数据内容传递到4000H-4063HMOV SI, 1000HMOV DI, 4000HMOV CX, 0064HL1: MOV AL, SI MOV DI, ALINC SIINC DIDEC CXJNZ
4、 L1HLT2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200HMOV SI, 2100HMOV CX, 0064HXOR AL,ALL1: CMP AL, SIJNC L2 MOV AL , SI L2: INC SIDEC CXJNZ L1MOV 2200, ALHLT如果求最小值XOR AL,AL 改为MOV AL,0FFHJNC L2 改为JC L2或者 MOV SI, ALINC SI相应 MOV CX, 0063H3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。负数个数存入2200HMOV SI, 2100HMOV CX,
5、 0064HXOR DL,DLL1: MOV AL, SIAND AL,AL(/AND AL, FFH/TEST AL, 80H)JNS L2 INC DLL2: INC SILOOP L1MOV 2200,DLHLTLOOP L1可以改为DEC CXJNZ L1求最大最小值 JNC JC求正负数用 JS JNS4.1 1AH+0FH +24H+4EH+18H+2DH=?0E计算数据1AH、0FH 、24H、4EH、18H、2DH放在3000H- 3005H处参考程序:MOV SI,3000H MOV CX,0006H XOR AL,AL AA: ADD AL,SI INC SIDEC CXJ
6、NZ AA MOV 3040H ,ALHLT4.2求十进制计算25 74 89 67+ 49 78 64 95数据25 74 89 67放在2400- 2403数据49 78 64 95放在2500- 2503MOV SI,2400HMOV DI,2500HMOV BX,2600HMOV CX,0004HXOR AL,ALAA: MOV AL,SIADC AL,DIDAAMOV BX,ALINC SIINC DIINC BXLOOP AAHLT5.冒泡排序方法5.1字节型变量VAR1、VAR2和VAR3存放有3个无符号数,将其中的内容按从大到小重新排列。 解:经重新排列后,VAR1的值最大,V
7、AR3的值最 小。由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。编程思路:通过在三个数中找出最大值,将它与VAR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在VAR2中。汇编语言程序如下:STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTVAR1DB 46H ;先假设一组值,以便检验程序设计的正确性VAR2DB 15HVAR3DB 0A2HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:
8、STACKSTART: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP,TOP MOV AL,VAR1;用户编写的程序 CMP AL,VAR2 JAE NO_CHG1 XCHG AL,VAR2NO_CHG1: CMP AL,VAR3 JAE NO_CHG2 XCHG AL,VAR3NO_CHG2: MOV VAR1,AL;最大值保存到VAR1 MOV AL,VAR2 CMP AL,VAR3 JAE NO_CHG3 XCHG AL,VAR3 MOV VAR2,AL;次大值保存到VAR2NO_CHG3: MOV
9、AH,4CH;返回DOS操作系统 INT 21HCODE ENDS END START程序执行后,(VAR1)0A2H,(VAR2)46H,(VAR3)15H,说明程序设计正确。一般来说,在程序结束处,应该使之返回到DOS状态,以便进行其它操作。 当要排序的数据为有符号数时,只需要将程序中相应的JAE指令改成JGE指令。存放在2040H-2045H中的字节数据由大到小排列AA: MOV DL,00HMOV SI,2400HMOV CX,0006HDEC CXL0: MOV AL, SIINC SICMP AL, SIJNC L1XCHG AL, SIDEC SIMOV SI , ALINC SIMOV DL,01H;L0: LOOP L1DEC DLJZ AAHLT专心-专注-专业