编程寄存器
❶ 寄存器是什么 有什么作用
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。
寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输。但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字,而且有些还有多个名字。
寄存器的作用主要是:
可将寄存器内的数据执行算术及逻辑运算;
存于寄存器内的地址可用来指向内存的某个位置,即寻址;
可以用来读写数据到电脑的周边设备。
(1)编程寄存器扩展阅读:
寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。
外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。
❷ 寄存器:我想了解多一些有关寄存器的知识,汇编编程时用的
寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志(
OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0.
DF: 方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF: 中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF: 状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变
SF: 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
AF: 下列情况下,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
PF: 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
CF: 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)
以上是8086寄存器的整体概况, 自80386开始,PC进入
32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料.
关于寄存器就写这么多了,学习汇编和学习别的语言一样
要多想,多练,多看, 这样才会有提高.
下面是一些汇编书籍和网站, 对你学习会有帮助的.
网站:
http://www.x86asm.com/ x86汇编小站
http://www.aogosoft.com/ Aogo汇编小站
http://211.90.225.98:22366/ 罗云彬的编程乐园
http://cn.codeof.com/articles/programming/masm/
里面有汇编学习资料.
书籍:
1. IBM-PC 汇编语言程序设计(2th)
2. <<80x86 IBM PC及兼容计算机(卷I和II) — 汇编语言、设计与接口技术>>; 这本书很牛, 建议入手;
中文的汇编好书比较少,如果你英语不错的话,可以看看
下面这些(都很经典!!!):
01. <<Mastering Turbo Assembler>>
02. <<Using Assembly Language>>
04. <<Assembly Language Primer for the IBM PC/XT>>
05. <<Assembly Language from Square One>>
06. <<Assembly Language for the IBM PC>>
07. <<Assembly Language and Systems Programming for the IBM PC and Compatables>>
08. <<Assembler Inside & Out>>
09. <<The Zen of Assembly>>
10. <<IBM Microcomputers: A Programmer's Handbook>>
11. <<Programmer's Problem Solver for the IBM PC, XT, and AT>>
12. <<IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING>>
13. <<80386: A Programming and Design Handbook>>, 2nd Ed
14. <<80486 Programming>>
15. <<Master Class Assembly Language>>
16. <<Programmer's Guide to PC & PS/2 Video Systems>>
17. <<Power Graphics Programming>>
18. <<Programmers Guide to the EGA and VGA cards>>, 3rd Ed.
19. <<AdvancEd Programmers Guide to the EGA/VGA>>
20. <<UndocumentEd DOS>>
21. <<DOS Programmer's Reference>>
22. <<386SX Microprocessor Programmer's Reference Manual>>
23. <<i486 Microprocessor Programmer's Reference Manual>>
24. <<The Programmer's PC Sourcebook>>
25. <<System BIOS for IBM PCs, Compatables, and EISA Computers>>, 2nd Ed.
26. <<PC Magazine Programmers Technical Reference: The Processor and Coprocessor>>
27. <<Mastering Serial Communications>>
28. <<DOS Programmer's Reference>>, 2nd Ed.
29. <<MS-DOS Programmer's Reference>>
最后祝你学习愉快
❸ 为什么说430单片机编程主要是对寄存器的编程。
实际上所有的单片机都有多种编程方式,针对寄存器的编程方式是较为直接的方法之一。当然MSP430系列也不例外。
第一种采用汇编语言——这种方法比较老相对原始一些,会的人群不会太多。编程精炼短小,如果程序较大后,一旦出错需要有较高的手段,否则麻烦。
第二种就是寄存器编程——这种方法比较直接,当手册看明白,较了解了单片机寄存器的对应控制关系后,用寄存器辩证还是比较顺手的,程序也较为短小精炼。
第三种就是厂家为了客户入手快捷直接写好了功能性的C宏函数——这种方法上手最快,只要理解了宏函数的功能,只需要将参数写入,执行就能出结果,易学易用,生成机器代码较为长点。
除此之外,可能还有其他的编程方法,像诸如仿真后生成的代码等。
这三种方法还是看个人的所学和经验,习惯了哪种方法都会如鱼得水轻松编程的。并且这几种编程的最终目的也是修改设置寄存器和各种存储器,数据搬来搬去,偶尔才会计算一下的。因此MSP430 是不会例外的。
❹ PLC编程 寄存器使用
有好处的,一般这种方式是程序循环开始时候把输入信号写到内存(M),程序扫描结尾把内存(M)写到输出信号。现场实际接线时候如果和编程时候不一样的情况下,只要把输入到内存,或者内存到输出改动一下就可以了,程序可以保持不变,对于同一类型的项目移植很好用
❺ 硬件单片机编程的寄存器
先学一种单片机的汇编语言,了解其内部寄存器,其它单片机也类似
象简单对寄存器赋值的语句,51里只有CLR A,清0 赋值语句是 MOV A,#NN NN代表立即数 毕竟用一个单词赋值操作太简单了,一般操作都有两个数,51单片也有许多对单片寄存器操作的语句,如 DEC A INC A SWAP A等 .
寄存器的名字是在头文件中说明的,而操作语句是有专门的指令系统的
单片机种类很多,内部结构大致相同,学单片机,一学内部寄存器的操作,二学外部器件的操作时序。这些东西慢慢就其知道了,若今天看那个单片机,明天又看另一个单片机,结果一个也学不会。
❻ 用户可编程的寄存器类型都有哪些
可编程寄存器?你说的是哪种芯片
像8086有AX,BX,CX,DX,SI,DI,SP,BP等等,IP在可使用跳转改变,PSW可受一些指令影响改变
如果是51单片机,我想想呀,有A,B,还有一些地址可寻址的可以使用
不过正常来说,那些都是RAM(随机存储器)或是FlASH(闪存),可随意改变,其实寄存器利用起来和随便找个随时可读可写的地址是没区别的
❼ 库函数编程相比寄存器编程的好处有哪些
用库函数编程相对于寄存器编程的好处就是能够自由的调用函数无须考虑内存空间等等。
❽ 西门子PLC编程中的寄存器使用问题
你的问题我也发现了,我先用前两条指令做了一下,没有出现你说的这种现象,当我写你的第三条指令时,发生了这种情况。。。然后我又把第三条指令给去除了,这种现象也随之消失了,所以,我的初步结论是,与你的第三条指令的地址分配有关。。。我建议你了解一下西门子200PLC的寻址方式,我也给你查了一下,但是,只是针对今天的这个问题。其实这个问题是这样的,在西门子200PLC中VW100就是VB100+VB101,其中,VB100为高位,VB101为低位,你可以参看下图:
按照这种编程原则,我们所谓的1或2,实际是存在VB101中的
你指令中的VW101实际的地址应该为VB101+VB102,而1或2是存在VB102中,虽然在一个字的单元中,高位字节并没有数值,可是因为是一个字的单元,高位部分会自然补零的,所以数值会因为赋值VB101中,而将VW100中的VB101赋值为0,所以你会看到的都是零。。
以我的经验,这种以字的形式的赋值方法,尽量应注意错开存储空间,这个还是程序比较少的,如果是一个大型的程序,可能整个工程进度都会遭到破坏,一般我使用时,都是用跳跃式的方法如VW101、VW103、VW105宁可跳一下,也别总是因为这个栽跟头,以前我用GE
PLC就遇到过这种情况,有时候,很难发现。。。像这种情况你也可以该为以MOV_B作为传送指令,如果数据不大于255。如果大于255再用MOV_W指令。还是多看看手册吧。。。
❾ PLC编程特殊寄存器D8140用法
首先PLSY
K3000
D8140
Y0中D8140在这个指令中是作为一个脉冲个数,根据PLSY指令的特性PLSY的脉冲个数被更改时,从指令下一次被驱动开始变更内容生效。因此这次运行的脉冲个数就是K30000,不会随着D8140的改变而改变。因此输出的结果是没什么区别的。其次D8140是计Y0的脉冲个数,如果你不是一直执行MOV
K30000
D8140,那么执行完了PLSY后,通过在线监视你会看到D8140不再是30000。
望采纳。。。。。