天天看点

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

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

继续阅读