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,那是一个用来判断正负的指令,暂不多谈,会在以后的指令的部分中提到。