小命 text ;定义文本代码段 c_int00:STM#0, SWWSR;软件等待状态寄存器置0,不设等待 STM# STACK+10h,SP;设置堆栈指针初值 STM#a,AR1;AR1指向a的地址 RPT #7 ;从程序存储器向数据存储器 MVPD table,*AR1+;重复传送8个数据 CALL SUⅣ ;调用SUM实现乘法累加和的子程序 end: B end ;循环等待 SUM:STM#a,AR3;将系数a的地址赋给AR3 STM#x,AR4;将变量x的地址赋给AR3 RPTZ A#3 ;将A清0,并重复执行下条指令4次 MAC*AR3+,AR4+,A;执行乘法并累加,结果放在A中 STL A, ay ;将A的低字内容送结果单元y RET ;结束子程序 end ;结束全部程序
12 .text ;定义文本代码段 _c_int00 :STM #0,SWWSR ;软件等待状态寄存器置0,不设等待 STM #STACK+10h,SP ;设置堆栈指针初值 STM #a,AR1 ;AR1 指向 a的地址 RPT #7 ;从程序存储器向数据存储器 MVPD table,*AR1+;重复传送8个数据 CALL SUM ;调用 SUM 实现乘法累加和的子程序 end: B end ;循环等待 SUM:STM #a,AR3 ;将系数a的地址赋给AR3 STM #x,AR4 ;将变量x的地址赋给AR3 RPTZ A,#3 ;将A清0,并重复执行下条指令4次 MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中 STL A,@y ;将A的低字内容送结果单元y RET ;结束子程序 .end ;结束全部程序
小命 4.宏定义和宏调用 (1)两者都可以被多次调用,但是把子 程序汇编成目标代码的过程只进行一次, 宏指而在用到宏指令的每个地方都要对宏指令 令与中的语句逐条地进行汇编。 子程(2)在调用前,由于子程序不使用参数 序的 异同 故子程序所需要的寄存器等都必须事先设 置好;而对于宏指令来说,由于可以使用 参数,调用时只要直接代入参数就行了。 (3)宏指令可以在源程序的任何位置上 定义,但必须在用到它之前先定义好。宏 定义可以嵌套
13 4.宏定义和宏调用 (1)两者都可以被多次调用,但是把子 程序汇编成目标代码的过程只进行一次, 而在用到宏指令的每个地方都要对宏指令 中的语句逐条地进行汇编。 (2)在调用前,由于子程序不使用参数, 故子程序所需要的寄存器等都必须事先设 置好;而对于宏指令来说,由于可以使用 参数,调用时只要直接代入参数就行了。 (3)宏指令可以在源程序的任何位置上 定义,但必须在用到它之前先定义好。宏 定义可以嵌套。 宏 指 令 与 子 程 序 的 异同
小命 宏定义的格式 macname. macro parameter 1]t, ., parameter n 助记符指令与宏指令 [. exit endm 宏调用的格式 [label][: macname [parameter]L,.., parametern
14 macname .macro[parameter 1][,…,parameter n] 助记符指令与宏指令 [.mexit] .endm 宏定义的格式 宏调用的格式 [label][:]macname [parameter1][,…,parametern]
Chengdu Univers itv of Technolo 例4-2宏定义、宏调用和宏展开的一个例子 2345 add ADDRP=P1+P2+P3;说明宏功能 6789 add3, macro pl,p2,p3, ADDRP;定义宏 LD ;将参数1赋给A 10 ADD 将参数2与A相加 ADD p3, A 参数3与A相加 STLA, ADDRP;将结果A的低字存参数4 endm 结束宏 14 global abc,de;ghi,adr;定义全局符号 18 00000add3abc, def, ghi,adr;调用宏 0000001000 Dabc,A;宏展开 0000010000: ADD def,A 0000020000! ADD ghi,,A 0000038000!STLA,adr 15
15 1 * 2 3 * add3 4 * 5 * ADDRP=P1+P2+P3 ;说明宏功能 6 7 add3 .macro p1,p2,p3,ADDRP;定义宏 8 9 LD p1,A ;将参数1赋给A 10 ADD p2,A ;将参数2与A相加 11 ADD p3,A ;将参数3与A相加 12 STL A,ADDRP ;将结果A的低字存参数4 13 .endm ;结束宏 14 15 16 .global abc,def,ghi,adr ;定义全局符号 17 18 000000 add3 abc,def,ghi,adr ;调用宏 1 1 000000 1000! LD abc,A ;宏展开 1 000001 0000! ADD def,A 1 000002 0000! ADD ghi,A 1 000003 8000! STL A,adr 例4-2 宏定义、宏调用和宏展开的一个例子
小命 第二节汇编语言程序的汇编 汇编命令 汇编语言源程序要素 助记符指令 宏命令 汇编程序(汇编器)功能 将源程序汇编成可重定位的目标文件(.obj文件); 如果需要,可以生成一个列表文件(.1st文件); 将程序代码分段,每段的目标代码都有一个SPC管理; 定义和引用全局符号,可在列表后附加交叉引用表; 对条件程序块进行汇编; 支持宏功能,允许定义宏命令。 16
16 第二节 汇编语言程序的汇编 汇编语言源程序要素 汇编命令 助记符指令 宏命令 汇编程序(汇编器)功能 将源程序汇编成可重定位的目标文件(.obj文件); 如果需要,可以生成一个列表文件(.lst文件); 将程序代码分段,每段的目标代码都有一个SPC管理; 定义和引用全局符号,可在列表后附加交叉引用表; 对条件程序块进行汇编; 支持宏功能,允许定义宏命令