第4章 汇编语言程序设计.ppt
上传人:sy****28 上传时间:2024-09-12 格式:PPT 页数:40 大小:422KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

第4章 汇编语言程序设计.ppt

第4章汇编语言程序设计.ppt

预览

免费试读已结束,剩余 30 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章汇编语言程序设计§4.1汇编语言程序设计基础指令:伪指令DATA(赋值)伪指令:ORG(起始汇编)伪指令:BIT(位地址赋值)伪指令:1.顺序结构程序设计例4-2:将60H单元中的8位无符号数转换成三位BCD码,并存放在BAI(百位)、SHI(十位)和GE(个位)三个单元中例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区的20H单元中例10-24:16位数求补。已知16位二进制数在R1、R0中,将此16位二进制数求补,求补结果存入内部RAM31H、30H单元2.分支结构程序设计例10-25:求单字节有符号二进制数的补码例10-26:已知VAR单元中有一自变量X,请按如下条件编出求函数值Z并将它存入FUN单元的程序方法一:先分支后赋值ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR;自变量X→ACJNEA,#0,NEQ;若X≠0,则转NEQSJMPSAVENEQ:JNBACC.7,ZHEN;若X>0,则转ZHENMOVA,#0FFH;若X<0,则A←-1SJMPSAVEZHEN:MOVA,#01H;A←1SAVE:MOVFUN,A;存数SJMP$END方法二:先赋值后分支例10-27:两个带符号数分别存于ONE和TWO单元,试编程比较大小,并将大的数存入MAX单元分析:两个带符号数的比较可将两数相减后的正负和溢出标志结合在一起判断1)若X-Y为正,则OV=0,X>YOV=1,X<Y2)若X-Y为负,则OV=0,X<YOV=1,X>Y程序:ORG2000HONEDATA30HTWODATA31HMAXDATA32HCLRC;Cy清零MOVA,ONE;X送ASUBBA,TWO;X-Y形成OV标志JZXMAX;若X=Y,则SAVEJBACC.7,NEG;若X-Y为负,则转NEGJBOV,YMAX;若X-Y>0,OV=1,则Y>XSJMPXMAX;若X-Y>0,OV=0,则X>YNEG:JBOV,XMAX;X-Y<0,OV=1,X>YYMAX:MOVA,TWO;Y>XSJMPSAVEXMAX:MOVA,ONE;X>YSAVE:MOVMAX,A;送较大值至MAXSJMP$END例10-28:设计可多达128路分支出口的转移程序3.循环结构程序例10-29:已知内部RAM的ADDR1单元开始有一无符号数据块,块长在LEN单元,请编出求数据块中各数累加和并存于外部RAM的SUM1单元的程序(注:和不超过256)方法二:先处理后判断例10-30:已知内部RAMADDR1为起始地址的数据块内部数据是无符号数,块长在LEN单元内,请编程求出数据块中的最大值并存入MAX单元4.查表结构程序例10-31:求函数Y=X!(X=0,…,7)的值。设自变量存放在ADDR1单元,表头的地址为TAB1,Y值为双字节存放在寄存器R2R3中,R3存放Y值低字节,请编出查表程序例10-32:已知R0低四位有一个十六进制数(0~F中的一个),请编出能把它转换成相应ASCII码并送入R0的程序方法二:查表求解:现以“MOVCA,@A+PC”指令为例方法三:先把R0中内容加上90H,并作十进制调整,然后再用ADDC指令使R0中内容加上40H,也作十进制调整,所得结果即为相应ASCII码5.子程序结构程序为使所编子程序可以放在64KB程序存储器的任何地方并能被主程序调用,子程序内容通常使用相对转移指令而不使用长转移指令,以便汇编时生成浮动代码子程序参数可以分为入口参数和出口参数两类:入口参数是指子程序需要的原始参数,由调用它的主程序通过约定工作寄存器R0~R7、特殊功能寄存器SFR、内存单元或堆栈等预先传送给子程序使用;出口参数是由子程序根据入口参数执行程序后获得的结果参数,应由子程序通过约定的工作寄存器R0~R7、特殊功能寄存器SFR、内存单元或堆栈等传递给主程序使用主程序与子程序之间的参数传递用寄存器或累加器传递参数将入口参数或出口参数放在工作寄存器或累加器中利用堆栈传递参数主程序传递参数给子程序:主程序将参数依次压栈,子程序再依次弹栈并将其应用于子程序操作和运算子程序传递参数给主程序:子程序将参数依次压栈,主程序再依次弹栈并将其应用于主程序入口参数:((SP))=两位16位进制数出口参数:((S