学了一久的汇编,感觉基于助记符的编程有时候还是比较容易记住的。
欢迎在评论区提出宝贵意见!
设计要求:
将片内30H单元内的内容拆成高位和低位,其中高位存入31H,低位存入32H
汇编源码:
;片内拆字程序设计
;设计要求:
;将片内30H单元内的内容拆成高位和低位,其中高位存入31H,低位存入32H
;程序设计:
;使用汇编语言实现片内拆字程序时,可使用ANL指令对
;相关位进行屏蔽,取高位时使用“ANL A,#OFOH”指令,
;取低位使用“ANL A,#OFH”指令
ORG 00H
MOV 30H,#0A3H ;给30H赋初值
MOV A,30H ;(30H)送A
ANL A,#0F0H ;取(30H)高位,送31H
MOV 31H,A
MOV A,30H ;(30H)送A
ANL A,#0FH ;取(30H)低位,送32H
MOV 32H,A
END
C语言源码:
/*
片内拆字程序设计
设计要求:
将片内30H单元内的内容拆成高位和低位,其中高位存入31H,低位存入32H
程序设计:
使用C语言实现片内拆字程序时,可以先将0x30单元中的内容送变量a,
然后将变量a通过逻辑“与”操作进行高、低4位的分离后,分别送入0x31和0x32中即可,其程序流程图如图3-12所示
*/
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
void main(void)
{
uchar a;
DBYTE[0x30]=0xA3; //给0x30赋值
a=DBYTE[0X30]; //将0x30单元中的内容送变量a
DBYTE[0X32]=a&0x0F; //将变量a的低4位送0x32
DBYTE[0X31]=a&0xF0; //将变量a的高4位送0x31
while(1);
}
Proteus8.0 仿真
程序完成后,30H中的内容为A3H,31H中的内容为A0H,32H总中的内容为03H,如图所示。