恭喜,你发布的帖子
发布于 2021-11-21 08:20:44
68楼
两个引导的子程序。各用户子程序必须在前面加上固定的程序获取地址。这个套路只适合全扫描。
ORGANIZATION_BLOCK MAIN:OB1
TITLE=程序注释
BEGIN
Network 1
// 定式
// 制作子程序横向传递的参数。
// 目前打算从vb1000开始向后安排子程序的所有所需空间。
LD SM0.0
CALL SBR0, &VB1000
Network 2
LD SM0.0
CALL SBR3
CALL SBR4
Network 3
// 定式
// 计算地址是否超限
// 目前未制作。
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=本程序作用是向8个级子程序的LD56写入可以安排的首地址。
// 任何一个非中断调用的子程序的LD56都含有有关要素。
VAR_INPUT
起始地址针:DWORD;
END_VAR
BEGIN
Network 1
// 象征性备用。目前没用。需要使用的时候向前扩展所需。
// 向第一级子程序LD56写入要素。(总)可分配地址工作区首地址指针。任何子程序的LD56都指向同一个V地址。
// 向指针指向的对象写入可分配地址。这个地址就是vb1000。
// 调用一个子程序向2345678级子程序的LD56写入上述信息。
LD SM0.0
MOVB 0, LB55
MOVD LD0, LD56
MOVD LD0, *LD56
CALL SBR1, LD0, LB55
Network 2
// 承若使用本程序后必须保留8级子程序的LD56不被使用。
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK SBR_1:SBR1
TITLE=子程序注释
VAR_INPUT
起始地址:DWORD;
END_VAR
VAR_IN_OUT
第N次递归:BYTE;
END_VAR
BEGIN
Network 1
// 观察递归次数
// 写入要素。
LD SM0.0
MOVB LB4, LB55
INCB LB55
MOVD LD0, LD56
Network 2
// 递归到达最大值,便不再进行。
LDB= LB55, 7
CRET
Network 3
// 递归自己是为了不用写7个相同的工作的子程序。没有别的意思。
LD SM0.0
CALL SBR1, LD56, LB55
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 常规子程序1:SBR3
TITLE=子程序注释
VAR
空闲处:DWORD;
自己首址:DWORD;
END_VAR
BEGIN
Network 1
// 定式
// 获得当前空闲的地址
// 定式
// 假设本子程序需要4字节的空间。
LD SM0.0
MOVD LD56, LD0
MOVD *LD0, LD4
+D +4, LD4
+D 4, *LD0
Network 2
// 用户程序
// 在自己的地址里面运算。
LD SM0.0
+D 1, *LD4
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 常规子程序2:SBR4
TITLE=子程序注释
VAR
空闲处:DWORD;
自己首址:DWORD;
自己二址:DWORD;
END_VAR
BEGIN
Network 1
// 定式
// 获得当前空闲的地址
// 定式
// 假设本子程序需要8字节的空间。
LD SM0.0
MOVD LD56, LD0
MOVD *LD0, LD4
+D +4, LD4
+D 8, *LD0
Network 2
// 自己的往后区域的间接寻址
LD SM0.0
MOVD LD4, LD8
+D +4, LD8
Network 3
// 假设的程序对数据进行操作
LD SM0.0
+D 1, *LD4
Network 4
LD SM0.0
+D 2, *LD8
Network 5
// 程序有它自己的下级子程序
LD SM0.0
CALL SBR5
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK SBR_5:SBR5
TITLE=子程序注释
VAR
空闲处:DWORD;
自己首址:DWORD;
自己二址:DWORD;
END_VAR
BEGIN
Network 1
// 定式
// 获得当前空闲的地址
// 定式
// 假设本子程序需要8字节的空间。
LD SM0.0
MOVD LD56, LD0
MOVD *LD0, LD4
+D +4, LD4
+D 8, *LD0
Network 2
// 自己的往后区域的间接寻址
LD SM0.0
MOVD +4, LD8
+D LD4, LD8
Network 3
// 假设的程序对数据进行操作
LD SM0.0
+D 3, *LD4
Network 4
// 假设的程序对数据进行操作
LD SM0.0
+D 4, *LD8
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断例程注释
BEGIN
Network 1
// 程序段注释
END_INTERRUPT_BLOCK
我希望用手机的朋友都可以看到程序,例如yanxiao,所以用语句表示。
请填写推广理由:
分享
只看
楼主