📄 main.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 + -