BIT/TI第四讲汇编语言初步1汇编语言初步目的:用汇编语言编写简单程序BIT/TI第四讲汇编语言初步2学习内容•汇编代码的结构•汇编程序的构成•编写简单算法:y=mx+bBIT/TI第四讲汇编语言初步3一、汇编代码的构成label:||[cond]instruction.unitoperand;comment标号:代码或变量地址条件寄存器指令:•助记符(mnemonic)•伪指令(directive)功能单元(可选)操作数:•寄存器•常量•指针注释x.int10MPY.M1A1,A3,A7||ADD.L1xA2,B2,A5BIT/TI第四讲汇编语言初步4常用伪指令汇编指令说明.sect定义一个代码段或数据段.usect定义一个未初始化数据段.int.long.word定义和初始化32位变量.short.half定义和初始化16位变量.byte定义和初始化8位变量在C语言里long是40位,在汇编语言里long是32位注意BIT/TI第四讲汇编语言初步5二、汇编程序的构成程序=数据结构+算法数据结构算法C程序的数据结构和算法实现BIT/TI第四讲汇编语言初步6汇编程序-数据结构用汇编语言声明数据结构::::BIT/TI第四讲汇编语言初步7汇编程序-算法用汇编语言编写算法::BIT/TI第四讲汇编语言初步8完整的汇编程序构成.sect“myData”m:.int5x:.int10b:.int2y:.int0.sect“myCode”start:LD.D1*A0,A1...ST.D1A7,*A6end:BendNOP5BIT/TI第四讲汇编语言初步9搬移指令MV指令用于在通用寄存器之间传送数据。MVC指令用于在通用寄存器与控制寄存器之间传送数据,此条指令只能使用.S2功能单元.MVK类指令用于把16位常数送入通用寄存器。在C6000指令集内,只能往寄存器送16位常数,可选择MVK、MVKH或MVKL指令向寄存器的高16位送数。搬移指令共有3类:MV,MVC,MVK:BIT/TI第四讲汇编语言初步10三、用汇编指令编写y=mx+b1.数据取入寄存器:m,x,b存储器-寄存器1a.初始化数据指针1b.取数据2.乘法3.加法4.存储数据:y寄存器-存储器BIT/TI第四讲汇编语言初步111a.指针初始化32位常量MVK.S1m,A0MVKH.S1m,A0;&m-A0MVK.S1x,A2MVKH.S1x,A2;&x-A2MVK.S1b,A4MVKH.S1b,A4;&b-A4BIT/TI第四讲汇编语言初步12指令MVKMVK/MVKL把一个16位常数放入寄存器MVK/MVKL-MoveaSignedConstantintoaRegisterandSign-Extend(~C64x)BIT/TI第四讲汇编语言初步131b.取数据LDH.D1*A0,A1;取mLDH.D1*A2,A3;取xLDH.D1*A4,A5;取bNOP4BIT/TI第四讲汇编语言初步14LD/ST指令•三种Load指令,对应不同长度的数据–LDW取32位字(word)–LDH取16位的半字(short)–LDB取8位字节(byte)•对无符号数(字节、16位半字)–LDBU–LDHU•指令延迟:四个延迟间隙•三个存储指令–STW–STH–STB数据取入寄存器后进行符号扩展无符号扩展BIT/TI第四讲汇编语言初步15指令延迟间隙延迟间隙:多周期指令所需要插入的NOP指令个数BIT/TI第四讲汇编语言初步162.乘法MPY.M1A1,A3,A7NOPBIT/TI第四讲汇编语言初步17乘法指令•四种乘法指令–MPY(U/US/SU)16LSB×16LSB–MPYH(U/US/SU)16MSB×16MSB–MPYH(U/S)L(U/S)16MSB×16LSB–MPYL(U/S)H(U/S)16LSB×16MSB•指令延迟槽:1•两个乘法单元可以在一个周期内做两次乘法BIT/TI第四讲汇编语言初步183.加法.L1.S1.D1或或ADD.?应该使用哪个功能单元?ADD.?A5,A7,A7BIT/TI第四讲汇编语言初步194.存储结果BIT/TI第四讲汇编语言初步20完整的y=mx+b汇编程序.titlelab4.asm/*定义数据结构*/.sectmyData”m.short10x.short5b.short2y.short0/*算法*/.sectmyCode/*指针初始化*/init:mvk.s1m,A0;A0=&mmvkh.s1m,A0mvk.s1x,A2;A2=&xmvkh.s1x,A2mvk.s1b,A4;A4=&bmvkh.s1b,A4mvk.s1y,A6;A6=&ymvkh.s1y,A6/*取数据*/ldh.d1*A0,A1;A1=mldh.d1*A2,A3;A3=xldh.d1*A4,A5;A5=bnop4/*核心算法*/start:mpy.m1A1,A3,A7;A7=mxnop1add.l1A5,A7,A7;A7=mx+bsth.d1A7,*A6/*结束循环*/b$;endlessloopnop5BIT/TI第四讲汇编语言初步21例程2:乘加运算汇编程序BIT/TI第四讲汇编语言初步22乘加运算汇编程序