⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 凌阳单片机汇编程序实验的在单向循环链表中插入节点实验.
💻 ASM
字号:
//============================================================================
//
//        The information contained herein is the exclusive property of
//      Sunplus Technology Co. And shall not be distributed, reproduced,
//      or disclosed in whole in part without prior written permission.
//
//            (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO.
//                           ALL RIGHTS RESERVED
//
//    The entire notice above must be reproduced on all authorized copies.
//
//============================================================================
//  工程名称:   插入节点 Struct.spj
//  功能描述:    在单向循环链表中插入节点
//  文件来源:   《SPCE061单片机原理及应用技术》 第三章 指令系统
//  IDE环境:    SUNPLUS u'nSPTM  IDE 1.8.0(or later)
//
//  涉及的库:	 (a) C-Lib:  (CMacro.lib);
//  组成文件:
//    	main.asm
//		Resource.asm/Resource.inc/Struct.h
//  日期:          	2003-5-22(建立)
//					2003-7-16(添加版本说明及版权声明并做代码标准化)
//============================================================================
.DEFINE P_Watchdog_Clear           0x7012
.ISRAM
Person: .STRUCT                   //定义结构开始   
	 Pointer: .DW 0               //初始化结构成员Pointer为0
	 Id: .DW 100				  //初始化结构成员Id为100	
.ENDS							  //定义结构结束

Stu_Var1: .Person[Stu_Var2,512]   //定义结构变量1
.VAR Before,After;                //befor 存Id最大的结构地址,ater存id最小结构地址
Stu_Var2: .Person[Stu_Var3,1024]  //定义结构变量2
Stu_Var3: .Person[Stu_Var4,4096]  //定义结构变量3
Stu_Var4: .Person[Stu_Var1,8192]  //定义结构变量4
Insert: .Person[,2048];           //定义待插入的结构变量

.CODE
.PUBLIC _main;
_main:

    r2 = Stu_Var1;  
	[After] = r2;					    //[After]存Id值最小的循环链表节点
    bp = r2		                        //bp存的是结构的地址,[bp]存的是结构成员Pointer的值,
 							     		//[bp+1]存的是结构成员ID的值
	r2 = Stu_Var4;                
	[Before]  = r2;                 	//[Before]存ID最大的结构的地址
	r1 = [Insert.Id];              		//r1存待插入的结构的成员Id的值
    cmp r1,[Stu_Var4.Id];-
	ja first                     		//大于则跳转
next:
    r2 = [bp+1];                   		//bp为结构地址,r2存id值
	cmp r1,r2;                   		//比较两个id的大小
	jna first;                   		//小于则跳转
	[Before] = bp;                 		//bp存的是前一个结构的地址
	bp = [bp];                     		//[bp]存的是结构成员Pointer,即下一个结构的地址     
	[After] = bp;                  		//After存的是下一个结构的地址
	jmp next;    
first:                           		//找到插入节点的
	r2 = [After];	
	[Insert.Pointer] = r2;        		//[Insert.Pointer]存入下一个结构的地址
	
    r1 = [Before];                
	r2 = Insert;
	[r1] = r2;                   		//前一个结构成员Pointer存入待插入循环链表的结构的地址

MainLoop:
	r1 = 0x0001;
	[P_Watchdog_Clear] = r1;   			//清看门狗
	jmp MainLoop;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -