为什么汇编语言不能越过 *** 作系统 *** 控硬件

为什么汇编语言不能越过 *** 作系统 *** 控硬件,第1张

因为汇编语言编程也是基于 *** 作系统基础之上的的,汇编所用的中断,也是 *** 作系统的一部分。当然,也可以编制出脱离 *** 作系统的汇编语言直接控制硬件,这个程序最终必须写人ROM才可以达到控制硬件的目的,比如BIOS就是如此。

SHUZHI EQU 58H ;把58H命名为SHUZHI

ORG 0000H

AJMP MAIN ;程序跳转到MAIN

ORG 0030H ;51单片机程序一般要从地址0030H开始往下执行

MAIN: MOV P1,#0FFH ;初始化,将P1,P3口都置为高电平(这和单片机I/O口的保护有关);将SP指向60H

MOV P3,#0FFH ;

MOV SP,#60H ;

CLR EA ;关总中断

CLR ES ;禁止串口中断

MOV R6,#10 ;赋R6 #10

MOV R7,#20 ;赋R7 #20

MOV P3,#0C0H ;置P3口为C0H,P3好象是和显示有关(因为没有硬件图),那就是初始显示的内容

MOV R0,#00H ;赋R0为00H

MOV R1,#00H ;赋R0为00H

MOV A,#00H ;赋累加器A为00H(上面3句都是在初始化寄存器)

MOV SHUZHI,#00H;赋58H为00H (58H应该计数用的)

MOV DPTR,#TABLE;送#TABLE到DPTR,即指向表格,为后面的MOVC A,@A+DPRT。调用表格作初始。

LOOP:JNB P10 ,JIAYI ;判断P10不等于1跳转,等于1就继续判断。(这里应该是个开关类的东西,按下后为0,就跳转了)

AJMP LOOP

JIAYI:JNB P10,$ ;判断P10不等于1就继续判断,等于0就延时,继续下面程序(这里意义在判断有没有放开这个开关)

LCALL DELAY ;延长时间一次,调用延长子程序

MOV A,SHUZHI ;送58H到A

INC A ;是寄存器A中的内容增加1

MOV SHUZHI,A;A送回58H,(这里的意义是表示计数加1了)

MOVC A ,@A+DPTR ;第一次按开关就是A=01H,那么就是送C0H给A

MOV P3,A ;送C0H给P3口,应该是显示什么内容

CLR P11 ;打开B继电器。

CLR P13 ;开B灯。

MOV TMOD,#00000001B ;定时/计数器0工作于方式1

FENZHONG: MOV R7,#20 ;赋R7 #20

CONGLAI: MOV TH0,#3CH ;定时器0高8位赋初值

MOV TL0,#0B0H ;低8位赋初值

SETB TR0 ;开启定时中断

LOOP1: JNB P10,JIXU_XIANSHI ;判断P1。0,不等于1,就跳转关定时器0,等于1就判断定时定时器有没有溢出

JBC TF0,YICHU_PANDUAN ;判断定时器0有没有溢出,没有就重新判断P1。0,溢出就跳转到YICHU_PANDUAN重新初始。

AJMP LOOP1

YICHU_PANDUAN:DJNZ R7,CONGLAI ;(下面就重新循环上面的作用)

DJNZ R6,FENZHONG

CLR TR0

AJMP MAIN

JIXU_XIANSHI:CLR TR0

CLR TF0

JNB P10 ,JIAYI2

AJMP JIXU_XIANSHI

JIAYI2:JNB P10,$

LCALL DELAY

JNB P10,$

LCALL DELAY

MOV A,SHUZHI

INC A

MOV SHUZHI,A

MOVC A ,@A+DPTR

MOV P3,A

MOV A, SHUZHI

CJNE A,#04H,JIXU_XIANSHI

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

CLR P12 ;打开A继电器。

CLR P14 ; 开A灯。

LCALL DELAY

LCALL DELAY

LCALL DELAY

SETB P11 ;关闭B继电器。

SETB P13 ;关闭B灯

AJMP $ ;AMJP $和SJMP $都表示跳转到本行,就是一个死循环,使程序停在这里。

DELAY: MOV R0,#255 ; ----- 延时子程序 -----

TURN: MOV R1,#255

DJNZ R1,$

DJNZ R0,TURN

RET

TABLE: DB 0C0H,0F9H,24H,30H,19H ;七段显示器数据定义 DB 0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234

END

汇编语言(Assembly

Language)是面向机器的程序设计语言汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,

TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

也就是说。汇编什么程序都能编写。但是。考虑到开发周期,开发难度的问题,编写软件一般都用高级语言。汇编主要用来编写一些底层的东西。

以上就是关于为什么汇编语言不能越过 *** 作系统 *** 控硬件全部的内容,包括:为什么汇编语言不能越过 *** 作系统 *** 控硬件、单片机计算定时的汇编程序解析说明。、汇编语言是什么类型的语言好编什么程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10117714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存