以实例浅析汇编语句和高级语言
1.主要区别
计算机只能识别和执行机器指令。但机器指令可读性、可移植性差。
汇编语句和机器指令具有一一对应的特性。和机器指令相比,使用汇编语言编程更容易。汇编语言使用符号名表示操作码,还可以为内存地址分配符号名(标号),由汇编器把它们翻译成机器指令和正确的数值。
用汇编语言编程,可以使用目标计算机的所有指令,而高级语言程序没有这样的能力。在高级语言中,许多目标计算机的指令和寄存器是不能访问的,有些特性也是无法利用的。用于系统编程的语言,如C语言,则同时具有高级语言和汇编语言的特点,它使用高级语言的语法,但是又能使用只有汇编语言才能使用的特性。
汇编语言和高级语言的另一个重要的区别:汇编语言只能运行在指令系统相同的系列计算机上,而高级语言程序可以运行在各种不同的计算机上。对许多应用来说,这种软件的可移植性相当重要。
2. 解决问题比较
单片机控制8个发光二极管(LED),P0口做输出口,控制 从LED1到LED8依次点亮,每次点亮一个LED,如此循环。 电路如下图所示。
汇编源程序
通过汇编源程序,能看到机器级的执行过程,对理解计算机的运行有帮助。
C51程序
#include<reg51.h> //51单片机寄存器定义的头文件
#include <intrins.h> //包含左移函数的头文件
void delayms(unsigned char );
void main()
{
P0=0xff; // 8个LED灯全部熄灭
P0= 0xfe; //点亮LED1
while(1)
{
delayms(250); //调用LED灯亮灭延迟时间函数
P0 = _crol_(P0,1); //循环左移1位,点亮下一个LED
}
}
void delayms(unsigned char ms) // 定义流水灯亮灭延迟函数
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
显然,使用C51隐藏了机器实现,使开发者侧重于问题本身,开发效率高,可靠性更好,且易于推广和交流。
3. 过程
过程(procedure)是实现模块化和重用的重要机制。指把一部分程序独立出来作为一个单元,这个单元可以在多个地方被调用。
在汇编语言程序中,常用子程序(subroutine)代替过程,如上述汇编源程序中的延时子程序DELAY。在C中,过程通常称为函数,如上述C51程序中的delayms(unsigned char )函数。
当被调用的过程完成后,必须返回到调用程序的断点处。一般的方法是调用时把返回地址压入堆栈,当过程结束的时候,从栈顶弹出返回地址并送入程序计数器。