51单片机:用汇编语言表示分段函数

博主在学习51单片机时,因考试需要学习了简单汇编知识。博客给出两个用汇编语言实现分段函数的例子,一个较简单,一个有一定难度。最后总结做此类分段函数题目要注意分类情况,涉及外部存储需单独处理写入外部的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

51单片机:用汇编语言表示分段函数

学习51单片机中,虽然大部分的时间都在用C语言编写代码,但是因考试需要也学了一些简单的汇编知识。初识汇编是在微机原理,那时没有好好学,现在到用的时候,真是一把辛酸泪。还好考试涉及的知识点不是那么深,简做整理了一点,暂存博客吧。

开胃小题:

用汇编语言实现如下功能:
假设X储存在RAM 30H中,而Y存储在外部RAM31H中,
当 X > 0时,Y = X + 4;
当 X = 0, Y = 0 ;
当 X < 0时,Y = -1。

//--------------------------------------------------------
//    假设X储存在RAM 30H中,而Y存储在外部RAM31H中
//    Y = X + 4     X > 0
//    Y = 0          X = 0
//    Y = -1         X < 0
//--------------------------------------------------------
     MOV A,30H
     MOV DPTR,#31H
     CJNE A,#00H,D1
     LJMP D          ;转移到D
D1:
     JB Acc.7,D2    ;  小于0,转移到D2,大于0继续执行
     ADDC A,#04H    ;加4
     LJMP D
D2:
     MOV A,#81H
D:
     MOVX @DPTR,A    ;把A写入外部RAM

来点小难度:

用汇编语言实现如下功能:
假设X储存在RAM 30H中,而Y存储在外部RAM30H中,
当 X > 0时,Y = 2X + 4;
当 X = 0 ,Y = 0 ;
当 X < 0时,Y = -1。

//--------------------------------------------------------
//    假设X储存在RAM 30H中,而Y存储在外部RAM30H中
//    Y = 2X + 4     X > 0
//    Y = 0          X = 0
//    Y = -1         X < 0
//--------------------------------------------------------
     MOV A,30H
     MOV DPTR,#30H
     CJNE A,#00H,D1
     LJMP D         ;转移到D
D1:
     JB Acc.7,D2    ;  小于0,转移到D2,大于0继续执行
     RL A           ; 左移1位,实现乘2
     ADDC A,#04H    ;+4
     LJMP D   
D2:
     MOV A,#81H
D:                   ;完成Y写入外部存储器
     MOVX @DPTR,A    ;把A写入外部RAM

总结一下:

像这种分段函数题目要注意分类的情况,因为题目涉及到最终结果存储到外部,所以无论结果是多少最终都要被送入外部存储器,因此单独把写入外部拿出来。这里面的一些指令都是较为常见的,可能会有问题的是关于JB Acc.7,那是一个用来判断正负的指令,暂不多谈,会在以后的指令的部分中提到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值