汇编语言

阅读 / 问答 / 标签

cmp指令和汇编语言微机原理是什么?

cmp是汇编的比较指令;x0dx0acmp(compare)指令的作用:进行比较两个操作数的大小;x0dx0a例如:x0dx0acmpoprd1,oprd2x0dx0a为第一个操作减去第二个操作数,但不影响第两个操作数的值;x0dx0a它影响flag的CF,ZF,OF,AF,PFx0dx0ax0dx0a怎么判断大小呢?x0dx0a若执行指令后;x0dx0aZF=1这个简单,则说明两个数相等,因为zero为1说明结果为0x0dx0a当无符号时:x0dx0a若x0dx0aCF=1则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1oprd2x0dx0a当有符号时:x0dx0a若SF=0,OF=0则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2x0dx0a若SF=1,OF=0则说明了此时的值为负数,没有溢出,则为oprd1oprd2x0dx0a最后两个可以作出这种判断的原因是,溢出的本质问题:x0dx0a两数同为正,相加,值为负,则说明溢出;x0dx0a两数同为负,相加,值为正,则说明溢出;x0dx0a故有,正正得负则溢出,负负得正则溢出。

cmp指令和汇编语言微机原理是什么?

  cmp是汇编的比较指令;  cmp(compare)指令的作用:进行比较两个操作数的大小;  例如:  cmp oprd1,oprd2  为第一个操作减去第二个操作数,但不影响第两个操作数的值;  它影响flag的CF,ZF,OF,AF,PF  怎么判断大小呢?  若执行指令后;  ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0  当无符号时:  若  CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2  CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2  当有符号时:  若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2  若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1<oprd2  若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出oprd1<oprd2  若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2  最后两个可以作出这种判断的原因是,溢出的本质问题:  两数同为正,相加,值为负,则说明溢出;  两数同为负,相加,值为正,则说明溢出;  故有,正正得负则溢出,负负得正则溢出。

微机原理汇编语言程序指令计算MOV

1.DA1 DW ‘AB",‘CD",‘EF",‘GH" ﹕ MOV AX, DA1+3 //将DA1+3与DA1+4相邻的两个字节分别送给AL与AH LEA BX, DA1 //将DA1的偏移地址送BX INC BX //BX +1 -->Bx MOV CX, [BX] //将以BX为有效地址的两个相邻字节单元送寄存器CX程序段执行后,AX="FC" , BX= offset DA1 , CX="DA" 数据存储结构如下:DA1--> ‘B" ‘A" ‘D" ‘C" ‘F" ‘E" ‘H" ‘G"2. MOV AX, 1199HXCHG AH, AL //AL=11HMOV WVAR, 5566H //(WVAR+1)=55HXCHG AL, BYTE PRT WVAR+1 //AL=55H,(WVAR+1)=11HH 当程序段运行后,AX= 9955H , WVAR=1166H 3.DA1 DB ‘123456789"DA2 DB 9 DUP(0)∶∶LEA SI , DA1 //置源偏4移地址LEA DI , DA2 //置目的偏4移地址MOV CX, 9 //设计循环初值CLD //将DF标志位置0LOP: LODSB //取第一个字符‘1",其ASCII码为31H ADD AL , 10H //ASCII码加10H ,则为41H,对应为字母"A" STOSB //存入DA2字符串 LOOP LOP //依次循环进行转换 程序段执行后,DA2各字节中的数据;"ABCDEFGHI"

微机原理与汇编语言的关系?

汇编语言是除机器语言速度最快的一种。每种处理器,或者不同厂家单片机汇编语言不同但总体的框架是一样的。。中断,定时,基本的格式都差不多学一种就可以通几种。。

求:每个月的天数,用汇编语言编写

朋友,这里是美容化妆区啊!建议去电脑知识区,那里面懂得高人多哦

基于汇编语言的万年历程序

function [path, totalCost, farthestPreviousHop, farthestNextHop] = dijkstra_1(n, netCostMatrix, farthestPreviousHop, farthestNextHop) visited(1:n) = 0;

微机原理与接口技术和汇编语言有什么联系?

1微机原理是讲硬件,汇编是教你怎么用语言去控制硬件(各种寄存器,定时器等等)2是的,汇编对初学者比较直观,应用中C用的比较多;3出书也是有些人的工作,哈哈。。你自己也可以比较一下,语言书重在程序吧。

汇编语言 微机原理与接口技术

5.在8086CPU系统中,设某中断源的中断类型码为08H,中断矢量为0100H:1000H,则相应的中断矢量存储地址为_20H_;从该地址开始,连续的4个存储单元存放的内容依次为_00H 01H 00H 10H__。 6.堆栈是内存中一个专用区域,其存取规则是__先进后出__;在8086系统中,当CPU响应外部中断请求转向中断处理程序前,应将_PSW、CS、IP_的内容依次压入堆栈。 8、MOV AX,[BX+DI+250H]的寻址方式为相对基址变址寻址。 9、半导体存储器中,RAM指的是_随机访问存储器_断电后信息一般会_丢失__在微机主板上有一块ROM芯片,存放的基本输入输出系统称为__BIOS_,常用的6264芯片属于_RAM_容量为 __8K*8位_。 10.10001111B=217 Q= 8FH。 11.已知[X]补=81H,真值X=-127、[X]原=0FFH、[X]反=80H。 12.若AL=41H,问若是无符号数,它代表_65_,若是有符号数,它代表_65_,若是BCD码,它代表_41_,若是ASCII码,它代表_A_。 13.段寄存器CS存放的内容是_代码段的段地址_ ,由获得代码段起始地址的方式为 __CS*10H__。 14.8086CPU中,ALE引脚是_地址锁存_信号。 17.指令ADD [BX+DI],CX 源操作数的寻址方式是__寄存器寻址__,目的操作数的寻址方式是__基址变址寻址_。 18.已知下列指令执行前,CS=2000H,IP=1000H, SI=2000H,写出下列无条件指令执行后CS和IP值。 (1)EBF4 JMP SHORT L1 CS=2000H ,IP=。 (2)E3 JMP SI CS=2000H ,IP=2000H 。 19.8259A工作方式中,优先级方式包括_全嵌套方式_,_特殊全嵌套方式_,_优先级自动循环方式__和_优先级特殊循环方式__四种。 20.当8255A的PC4—PC7全部为输出线,表明8255A的A端口工作方式是方式0。 21.组成32M×8位的存储器,需要1M×4位的存储芯片64 片。 22、8088/8086CPU的标志位寄存器中有 9个标志位,其中的3个是控制标志,_6个_是状态标志。 24、8088/8086CPU的存储器采用分段方式管理,每个段最多可以有_64K_字节,全部存储空间可以分成_16_个大小为64K且互相不重叠的段。 27、对于8086微机系统,上电后CPU要自动初始化。初始化后,CS为_FFFFH_,IP为_0000H_,8086执行的第一条指令在__FFFF0H__单元里存放。30、中断类型NMI、INTR、除法溢出、INTN和单步中断的优先级顺序为(由高到低 )。 31、若中断类型号为23H,则存放中断向量的存储单元的起始地址为__8CH_。

微机原理与接口技术是一种汇编语言吗?

你说的微机是指什么?是不是微机原理?学的8086?由于8086和51单片机不兼容,所以汇编指令也不一样的,需要重新去看单片机的结构及指令系统。当然掌握了微机原理知识,对你理解单片机的结构和汇编程序编程是有帮助的。51汇编和8086不是大同小异,是完全不同

汇编语言的编译器是用什么写的呢?

RadASM我挺喜欢用这个的

汇编语言编译工具masm怎么使用

配置好环境变量,直接在CMD里 ml 1.asm 就汇编好了

怎么学汇编语言

先看书吧

汇编语言SP=SP-2,(SP+1),(SP)=IP是什么意思?

栈指针,sp-2就是移动栈指针,是他指向下一个单元,后面的可同理。

汇编语言中,为什么定义堆栈段的时候后面要多加一个stack 如:stack segment s

在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条warning no stack segment的警告信息, 当然你不必理会它,所生成的执行文件是可以正常运行的。这是因为:如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段,所以你没申明堆栈当然也可以用PUSH/POP。操作系统在把应用程序装入内存时,默认分配堆栈段与代码段同段,应用程序可以自行设置自己的堆栈段。自行设置的堆栈段大小最小4个字节(只够PUSH/POP CS、IP),用于从应用程序返回操作系统。只有较大的程序或递归调用较深的程序,才有必要设置独立 的堆栈段;在程序中可以定义它,也可以不定义。一个完整的源程序(尤其是PUSH/POP 操作特别多,比如有递归的时候)一般最好定义堆栈段。HITWH LEVI

汇编语言中的STM 指令是什么意思

STM32,TI公司的DSP系列,编译器用CCS,支持汇编语言,没有这个STM 指令。

STM在汇编语言中是什么意思

没有这条指令,可能是程序员自己定义的标号,你可以把代码贴出来,我看看

汇编语言中的STR是什么意思.还有CALL指令怎么用?

STR是ARM汇编中的内存访问指令,表示字数据写入,用于将一个32位的字数据写入到指令中指定的内存单元。比如STRR0,[R1,#0x100];表示将R0中的字数据保存到内存单元(R1+0x100)中。

SUB在汇编语言中是什么意思啊?

减法的意思啊

51单片机中汇编语言中的swap是什么意思?

51单片机汇编语言中的swap是半字节交换指令。x0dx0aSWAPA这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:x0dx0aMOVA#00001111Bx0dx0aSWAPAx0dx0a执行SWAPA后,A中的内容变为11110000B。

51单片机中汇编语言中的swap什么意思?

半字交换,即一个字节的高4位和低4位互换

51单片机中汇编语言中的swap什么意思

swap是半字节交换指令。SWAP A 这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:MOV A#00001111BSWAP A执行SWAP A后,A中的内容变为11110000B。

51单片机中汇编语言中的swap是什么意思?

51单片机汇编语言中的swap是半字节交换指令。SWAP A 这条指令,将累加器A的高、低4位数据交换,也就是低4位数据进入高4位,高4位数据进入低4位。例如:MOV A#00001111BSWAP A执行SWAP A后,A中的内容变为11110000B。

汇编语言中test的用法

汇编语言中,test的用法你可以。到相关的汇编语言的书里进行了解

机械语言/汇编语言/低级语言/高级语言各是指的什么

机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。汇编语言是汇编指令集、伪指令集和使用它们规则的统称,使用具有一定含义的符号为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令。低级语言是指机器语言和汇编语言。高级语言相对于机器语言而言。是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。

汇编语言递归求C(n,k)

我觉得你还是把pascal语言的贴出来吧看汇编本来就是很恼火的事情你还放上来编译器生成的汇编

汇编语言中,按位取反的指令CPL是那个英文单词的缩写?

A Control Panel (Windows) File

汇编语言的111条指令的完整英文是什么?

汇编语言指令还编号吗?

在汇编语言中,“CF”是什么意思,急求

进位标志 .

求将下面C语言翻译成汇编语言

你用的什么单片机啊

求八段显示管(单片机)显示自己学号。用汇编语言写程序。如:090309

很简单吧

汇编语言JB什么意思

举个例子吧:JB P1.3,FUNCTION这句话的意思是如果P1.3是高电平的话就跳转到FUNCTION,否则,执行下一句。

8086汇编语言小问题

你定义数据的时候把OPR1和OPR2定义成16位的数就可以了,由于无符号8位2进的表示范围是0道255,你的结果为260,超出了0到255的范围,所以产生溢出,OF位等于1。所以答案将会产生错误。SBB和ADC一样,都要考虑到CF位。

汇编语言是一种什么程序设计语言?

汇编语言是最古老的编程语言,在所有的语言中,它与原生机器语言最为接近。它能直接访问计算机硬件,要求用户了解计算机架构和操作系统。

汇编语言中,SI DI 的作用是什么?

SI是源变址寄存器,用于存放源操作数的偏移地址,并且SI的内容有自动修改的功能,故称为源变址寄存器。DI是目的寄存器,用于存放目的操作数的偏移地址,并且DI的内容有自动修改的功能,故称为目的变址寄存器。

汇编语言中 指令INC SRC是什么意思

inc是加一 src源操作数 合起来就是源操作数加一。

汇编语言abb bx,0指令是什么意思?

相加。(BX) + 0 → (BX)

有关于汇编语言的问题?

其实借位很容易理解,比如被减数 01001011 比 减数10000000小,减了结果肯定是负数,但CPU计算的时候仍然按正数算,怎么办,很简单,只需要给被减数的前面再加一个1,被减数就比减数大了,比如加1后被减数变为101001011,比减数大,CPU算出来的结果就是101001011-10000000,这样结果就可以看作是一个正数避免很多麻烦,加上去这个1就是借位CF了,如果不需要加1,CF就等于0。这样做的好处是,不论被减数是否小于减数,结果都可以当作正数而不是负数,这对很多处理都是很方便的。当然CPU也有处理有符号数的机制。---------------------首先CF标志表示什么你应该知道吧,CF是CPU的一个标志位,它只有一位,取值只能是0或者1。CF用来表示加法的进位和减法的借位。在减法的情形下,CPU执行一条减法指令,比如SUB,如果被减数小于减数的时候,执行完减法指令后,CF会设置为1,表示向被减数向高位借位,如果被减数大于等于减数,则CF会被设置为0,表示没有借位。加法的情形,两个数相加,如果结果没有超过存储器的位数,则CF置0,表示没有进位,也表示结果正好等于两个操作数相加;但是如果结果超过存储器位数,那么结果就不等于两个操作数相加,这时候相当于向高位进位。上面都是针对无符号数而言。SBB指令特殊的地方,是被减数除了减去减数之外,还要减去CF,比如:SBB AX,BX如果AX=20 BX=10 CF=1,则这个指令的结果是 AX=AX-BX-CF=9 执行完之后,CF设置为0表示没有借位

汇编语言中DB指令的意义

DB 指令以表达式的值的字节形式初始化代码空间。格式: [标号:] DB 表达式表表达式中可包含符号、字符串、或表达式等项,各个项之间用逗号隔开,字符串应用引号括起来。括号内的标号是可选项,如果使用了标号,则标号的值将是表达式表中第一字节的地址。DB 指令必须位于 CODE 段之内,否则将会发生错误。例TABLE:DB 0C0H, 0F9H, 0A4HTABLE1:DB " WEINA "

汇编语言的ADC和ADD怎么理解

ADD OPRD1,OPRD2 加法运算.OPRD1+OPRD2ADC OPRD1,OPRD2 带进位加法运算.OPRD1+OPRD2+CF

汇编语言程序,求解图片中,mov bx,dx sbb bx,0这两步怎么理解

mov bx,dx 将乘数的高16位转移sbb bx,0 做高16位的带进位的减法(减数的高16位为0)

汇编语言中SBB指令为什么要减去CF借进位标志?

进位标志CF(Carry Flag)的定义:当加减运算结果的最高有效位有进位(加法)或借位(减法)时,将设置进位标志为1,即CF=1;如果没有进位或借位,则设置进位标志为0,即CF=0。这是说,处理器执行一个加法或者减法指令,对两个数据进行了相加或者相减,除了一个和值或者一个差值外;如果出现最高位的进位或者借位,在标志寄存器中的这个进位标志CF位就被处理器设置成为1。假设处理器执行二进制8位数据加法指令,实现8位二进制数:00111010和01111100相加。运算结果是:10110110。运算过程中,最高位没有向上再进位,所以这个运算结果将使得:CF=0。如果是10101010和01111100相加,结果是[1]00100110。注意,8位运算指令只指明8位和值保存在何处,出现的第9位、即向高位的进位(用了中括号表达)进入了标志寄存器CF位,所以这个运算结果将使得:CF=1。进位标志是针对无符号整数运算设计的,反映无符号数据加减运算结果是否超出范围、是否需要利用进(借)位反映正确结果。把上面两个例子,分别用二进制、十六进制和十进制表达出来,可能你理解得更好。

51单片机汇编语言问题,急求回答!

ORG 0000HLJMP MAINORG 000BHCPL P1.7RETIORG 001BHCPL P1.0RETIORG 0030HMAIN: MOV TMOD,#26H MOV TH0,#(256-5) MOV TL0,#(256-5) MOV TH1,#(256-40) MOV TL1,#(256-40) SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA SJMP $ END

汇编语言问题 在单片机LED上显示数字(0~9)的源代码是什么啊?

有点不太明白你在问什么,LED分为8段,刚好用一组引脚来控制,给出数据控制不同的段亮就能显示不同的数据,比如3FH对应ABCDEF亮G和小数点灭就显示0了,这个就是这么简单呀

单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽

ORG 0000H;程序起始于地址0000H,(一般不这样用) LJMP MAIN;跳到主程序MAIN ORG 000BH;外部中断INT0程序的地址,此为规定的 LJMP INTT0;跳到外部中断INTT0程序 ORG 001BH;外部中断INT1程序的地址,此也为规定的 LJMP INTT1;跳到外部中断INTT1程序 ORG 0100H;主程序MAIN地址MAIN: MOV SP,#60H;给堆栈指针SP附内部数据存储器地址60H MOV 31H,#0;给31H地址内清零即(31H)=0 MOV 20H,#0FEH ;(20H)=11111110B MOV 21H,#0FFH;(21H)=11111111B MOV P1,20H;P1=11111110B LCALL SHEZHI1;调用程序段SHEZHI1 MOV 20H,#0FDH;(20H)=11111101B MOV P1,20H;P1=11111101B MOV 40H,#10;(40H)=0AH SETB EA;开总中断 SETB ET0;开定时中断T0 MOV TMOD,#11H;设置T0工作于定时方式1 MOV TH0,#3CH;定时初值设置高位 MOV TL0,#0B0H;定时初值设置低位 SETB TR0;允许T0中断LL: LCALL KEY;调用KEY LCALL KEYC;调用KEYC SJMP LL;循环调用回LLINTT0: PUSH ACC;将ACC值压栈 PUSH PSW;将PSW值继续压栈 SETB RS1;RS1位置1 SETB RS0;RS0位置1,即选中内部数据存储器组的3组 DJNZ 40H,DOWN;判断十次结束否?且计数值自减一,若没有够十次,则转入程序DOWN , 否则顺序执行 MOV 40H,#10;继续在(40H)存入计数值十 MOV R0,#41H;(R0)=41H MOV A,@R0 ; 判秒是否到60 ADD A,#1;A中值加一 DA A;十进制调整 MOV @R0,A;再送回原单元 CLR C;清进位位 SUBB A,#60H;与60相减 JC DOWN;通过判断进位位看是否到60了,没到就去DOWN,到了就顺序执行 MOV @R0,#0;41H单元清零 INC R0;地址自加一 MOV A,@R0 ; 判分是否到60 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#60H JC DOWN MOV @R0,#0 INC R0 MOV A,@R0 ; 判时是否到24 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#24H JC DOWN MOV @R0,#0 INC R0 MOV A,@R0 ; 判日是否到指定天数 ADD A,#1 DA A MOV @R0,A INC R0 MOV A,@R0 MOV R4,A ;月份送R4,本月天数送R5 JNB ACC.4,NEXT2 CLR C SUBB A,#06HNEXT2: MOV DPTR,#DAYTAB DEC A MOVC A,@A+DPTR MOV R5,A CJNE R4,#2,NEXT JNB 08H,NEXT1NEXT: INC R5NEXT1: DEC R0 MOV A,R5 CLR C SUBB A,@R0 JNC DOWN MOV @R0,#1 INC R0 MOV A,@R0 ; 判月是否到13 ADD A,#1 DA A MOV @R0,A CLR C SUBB A,#13H JC DOWN MOV @R0,#1 INC R0 MOV A,@R0 ; 判年低位是否到00 ADD A,#1 DA A MOV @R0,A INC R0 MOV A,@R0 ADDC A,#0 DA A MOV @R0,ADOWN: MOV A,#42H CJNE A,4EH,DOWN2 MOV A,#43H CJNE A,4FH,DOWN2 CLR 07HDOWN2: JB 06H,DOWN4DOWN4: CLR TR0 MOV A,#0B7H ADD A,TL0 MOV TL0,A MOV A,#3CH ADDC A,TH0 MOV TH0,A SETB TR0 POP PSW POP ACC RETIDAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H

单片机 汇编语言 求助。

ret执行完返回ACALL PTOMO的下一条指令,也就是HERE: AJMP HERE,此后单片机一直执行HERE: AJMP HERE由于T0中断间隔是1MS,T0产生中断后执行完某次HERE: AJMP HERE后执行中断将P1.0取反,执行完后RETI返回HERE: AJMP HERE继续等待中断。这样每隔1MS中断一次P1.0取反一次。P1.0每隔两个中断就会输出一个高电平,就得到你想要的2MS的方波了

80C51单片机按键中断实验(用汇编语言)

: ORG 0000H LJMP MAIN ORG 0003H LJMP X0_INT ORG 0013H LJMP X1_INT ORG 0030HMAIN: SETB EA SETB EX0 SETB EX1 SETB IT0 SETB IT1 MOV B, #0FFH MOV P1, BHERE: SJMP HEREX0_INT: MOV A, B RL A DEC A MOV B, A MOV P1, A RETIX1_INT: MOV A, B RR A ADD A, #80H MOV B, A MOV P1, A RETIEND

51单片机fosc=12Mhz利用T0方式1产生500ms的定时,在p1.0引脚上输出周期为1s的方波求这个用汇编语言怎么写

ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV TMOD,#01HMOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB TR0SETB ET0SETB EAMOV R2,#10SJMP $T0ISR:CLR TR0MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB TR0DJNZ R2,T0EMOV R2,#10CPL P1.0T0E:RETIEND

求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)

ms50 DATA 31H ;50ms计数内存地址sec DATA 32H ;秒计数内存地址min DATA 33H ;分计数内存地址hour DATA 34H ;时计数内存地址buffer DATA 35H ;显示十进制内存起始地址EXTRN CODE(Display8) ;外部显示子程序(跟硬件设计有关,原文未列出) ORG 0000H ; LJMP STAR ;转主程序 ORG 000BH ; LJMP INT_Timer0 ;转50ms定时器中断处理程序ORG 0100H ;STAR: MOV SP,#60H ;主程序 MOV ms50,A ;50ms计数器初始化到0 MOV hour,#12 ;小时初始化为12 MOV min,#59 ;分钟初始化为59 MOV sec,#50 ;秒初始化为50 MOV TH0,#60 ;初始化定时器T0为50ms的数据(跟时钟频率和定时器模式有关) MOV TL0,#176 ; MOV TMOD,#1 ;初始化定时器模式 MOV IE,#82H ;设定中断 SETB TR0 ;开定时器0STAR1: LCALL Display ;调用显示转换程序(先将16进制转为BCD码再显示) JNB F0,$ ;等待中断处理完成标志 CLR F0 ;复位中断处理完成标志 SJMP STAR1 ;循环显示;中断服务程序 INT_Timer0: MOV TL0,#176-5 ;50ms定时器计数器初始值再装入(-5为微调,含响应中断用时) MOV TH0,#60 ; PUSH 01H ;压入堆栈 MOV R1,#ms50 ;装入50ms计数内存地址数31H INC @R1 ;50ms计数内存加1 CJNE @R1,#20,ExitInt ;不够1秒,退出 MOV @R1,#0 ;50ms计数内存复位为0(31H) INC R1 ;转为秒内存地址(32H) INC @R1 ;秒计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60秒,退出 MOV @R1,#0 ;够60秒,秒计数复位为0 INC R1 ;转为分计数内存地址(33H) INC @R1 ;分计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60分,退出 MOV @R1,#0 ;够60分,分复位为0 INC R1 ;转为时内存地址(34H) INC @R1 ;时计数内存加1 CJNE @R1,#24,ExitInt1 ;不够24时,退出 MOV @R1,#0 ;时计数内存复位为0ExitInt1: SETB F0 ;置位中断处理完成标志ExitInt: POP 01H ; 恢复现场 RETI ;退出中断HexToBCD: ;16进制转BCD码MOV B,#10 ; DIV AB ; MOV @R0,B ;存余数(10进制个位) INC R0 ;转伤地址 MOV @R0,A ;存伤(10进制十位) INC R0 ;转下一次余数地址 RET ;Display: ;显示转换与调用显示程序MOV R0,#buffer ;10进制BCD秒显示缓存地址(35H) MOV A,sec ; ACALL HexToBCD ;十进制秒转换后存在(35H)、(36H) MOV @R0,#10H ;(37H)=#10H,秒与分之间的间隔,无实际意义,或与dispaly8有关 INC R0 ;10进制BCD分显示缓存地址(38H) MOV A,min ; ACALL HexToBCD ;十进制分转换后存在(38H)、(39H) MOV @R0,#10H ;(3AH)=#10H,分与时之间的间隔,无实际意义,或与dispaly8有关 INC R0 ;10进制BCD时显示缓存地址(3BH) MOV A,hour ; ACALL HexToBCD ;十进制时转换后存在(3CH)、(3DH) MOV R0,#buffer ;恢复显示缓存地址(35H),为dispaly8置初始显示地址 LCALL Display8 ;调用实际显示程序 RET ; END

如图 我想用单片机汇编语言来编写中断程序,要求是 LED灯初始化是灭的,当按下按钮灯亮一秒灭一秒,

中断是什么 中断?定时中断?灯亮灭的间隔是多少?一般按键没你这样接的,一端接IO口,另一端接地。

80c51单片机用两个定时器实现占空比不同的方波,采用汇编语言,求教程序!谢谢

; 用一个 定时器0 实现占空比可调 PWM 方波HPWM EQU 100 ; 高电平计数值 改变 占空比LPWM EQU 200 ; 低电平计数值PWMBZ BIT 20H ; 标志位ORG 0000HLJMP MAINORG 000BHLJMP T0ZDORG 0030HMAIN: MOV TMOD,#02H MOV TH0,#HPWM SETB TR0 SETB EA SETB ET0 SJMP $T0ZD: JB PWMBZ,T0ZD2 MOV TH0,#HPWM SETB PWMBZ SETB P1.0 RETIT0ZD2: MOV TH0,#LPWM CLR PWMBZ CLR P1.0 RETI

汇编语言重复定义错误

经过修改,编译通过了。ORG 0000HLJMP MAINORG 000BHLJMP PNT0 ;PT0不能 ,是系统保留字ORG 001BHLJMP PNT1 ;PT1不能 ,是系统保留字ORG 0050HMAIN:MOV SP,#50HMOV TMOD,#12HMOV A,#7EHMOV P1,AMOV R2,#00HMOV R3,#00HSETB EASETB ET1SETB ET0SETB TR1SETB TR0SETB P1.0SETB P1.7MOV TL0,06HMOV TH0,06HINC R3CJNE R3,#0CBH,NEXT1;#CBH前要加0CPL P1.7MOV R3,#00HNEXT1:MOV TL0,06HMOV TH0,06H;RETI //主程序不能用RETIHERE:SJMP HERE;ORG 0200H //这不用再定义起始地址PNT1:MOV TL1,#0B0HMOV TH1,#3CHINC R2CJNE R2,#14H,NEXTCPL P1.0MOV R2,#00HNEXT:MOV TL1,0B0HMOV TH1,63HRETIPNT0:MOV TL0,06HMOV TH0,06HINC R3CJNE R3,#190,NEXT2;190多了H,CPL P1.7MOV R3,#00HNEXT2: ;NEXT1用过了MOV TL0,06HMOV TH0,06HRETIEND

求大神翻译一下汇编语言

ENA EQU P2.0 ;使能A口ENB EQU P2.1 ;使能B口ENC EQU P2.2 ;使能C口CLK EQU P1.0 ;时钟口DIN EQU P1.1 ;数据输入口COUNT EQU 0FH ;计数变量CISHU EQU 2EH ;次数变量ORG 0000HAJMP MAINORG 0003HAJMP INT0ORG 000BHAJMP I0MAIN: MOV COUNT,#0 ;计数器初始化0 MOV CISHU,#12 ;次数为12 CALL L2 ;调用L2初始化WAIT: LCALL IN ;调用IN输入 LCALL XIANSHI ;调用显示 SJMP WAIT ;转WAITL2: MOV R3,#0AH ;初始化R3=0aH MOV R4,#55 ;同理 MOV R5,#59 ;同理 MOV R6,#11 ;同理 MOV TMOD,#11H ;定时器均为模式1 MOV TH0,#03CH ;定时器0初始值为65536-50000 MOV TL0,#0B0H SETB IT0 ;外部中断0为沿触发 SETB EX0 ;开外部中断0 SETB ET0 ;开定时器0 SETB EA ;开中断 SETB TR0 ;启动定时器0 RET ;IN: MOV A,R6 ;A=R6 MOV B,#0AH ;B=10 DIV AB ;A/B MOV DPTR,#TAB ;表首地址送数据指针 MOVC A,@A+DPTR ;查表 MOV 6FH,A ;结果存6FH MOV A,B ;A/B的余数送A MOV DPTR,#TAB ;表首地址送数据指针 MOVC A,@A+DPTR ;查表 MOV 6EH,A ;结果存6EH MOV A,#0BFH ;A=BFH MOV 70H,A ;(70H)=A MOV A,R5 ;A=R5 MOV B,#0AH ;B=10 DIV AB ;除法 MOV DPTR,#TAB ;表首地址送数据指针 MOVC A,@A+DPTR ;查表 MOV 72H,A ;结果存72H MOV A,B ;余数送A MOV DPTR,#TAB ;表地址 MOVC A,@A+DPTR ;查表 MOV 71H,A ;结果存71H MOV A,#0BFH ;A=BFH MOV 73H,A ;(73H)=A MOV A,R4 ;A=R4 MOV B,#0AH ;B=10 DIV AB ;除法 MOV DPTR,#TAB ;表地址 MOVC A,@A+DPTR ;查表 MOV 75H,A ;结果存75H MOV A,B ;余数送A MOV DPTR,#TAB ;表地址 MOVC A,@A+DPTR ;查表 MOV 74H,A ;结果存74H RETXIANSHI: ;显示子程序 CLR ENA ;开使能A SETB ENB ;关使能B SETB ENC ;关使能C MOV R1,6EH ;显示内容首地址送R1LOOP3: MOV A,@R1 ;取第一个数 MOV R0,#08H ;共8个数LOOP2: LCALL LOOP ;调用LOOP显示 INC R1 ;地址加1 CJNE R1,#76H,LOOP3 ;不到76H转LOOP3 SETB ENA ;关使能A RETI0: DJNZ R3,LOOP1 ;R3不等于转LOOP1 MOV R3,#14H ;R3=20 INC R4 ;R4加1 CJNE R4,#60,LOOP1 ;R4不等于60转LOOP1 MOV R4,#0 ;R4=0 INC R5 ;R5加1 CJNE R5,#60,LOOP1 ;R5不等于60转LOOP1 INC R6 ;R6加1 MOV R5,#0 ;R5=0 MOV A,R6 ;A=R6 CJNE A,CISHU,LOOP1 ;A不等于CISHU转LOOP1 MOV R6,#0 ;R6=0LOOP1: MOV TH0,#03CH ;重赋初值 MOV TL0,#0B0H ; SETB TR0 ;启动定时器0 RETILOOP: RLC A ;A带进位左移 MOV DIN,C ;C送数据口 NOP ;空操作 NOP SETB CLK ;时钟置1 NOP NOP CLR CLK ;时钟清0 DJNZ R0,LOOP ;R0减1部位0转LOOP RETINT0: INC COUNT ;计数器变量加1 MOV A,COUNT ;送A MOV B,#2 ;B=2 DIV AB ;A/B MOV A,B ;A=B CJNE A,#0,L3 ;A不为0转L3L1: MOV CISHU,#12 ; CISHU=12 RETIL3: MOV CISHU,#24 ;CISHU=24 RETI TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END

汇编语言编程:一个周期10ms,占空比1:4的方波

ORG 00H MOV TH0,#0FH ;T0方式0 MOV TL0,#0B9H ;定时5ms,周期10ms SETB ET0 SETB EA SETB TR0 SJMP $ ORG 000BH ;T0入口 MOV TH0,#0FH ;回复初始值 MOV TL0,#0B9H CPL P1.1 ;P1.1取反 RETI END

求助大神!汇编语言,中断的问题,下面程序中断怎么响应的,最后的RETI又返回到哪里了?

这个程序中断1个机器周期就回响应一次,所以基本无法正常工作,当然如果你将TMOD改变一下,使其工作在计数模式的话,TMOD=0x50,那么检测到P3.5上一个脉冲信号就会响应一次中断。RETI的返回地址是不确定的,取决于中断时候的执行地址,返回到中断响应当前执行语句的下一个语句处。

51单片机汇编语言问题,急求回答!

ORG 0000H LJMP MAIN ORG 000BH CPL P1.7 RETI ORG 001BH CPL P1.0 RETIMAIN: MOV TMOD, #26H MOV TH0, #251 MOV TL0, #251 MOV TH1, #216 MOV TL1, #216 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA SJMP $ END

汇编语言中RETI是什么意思

汇编语言(Assembly Language)是面向机器的程序设计语言。 在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。 使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。 汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。 ■对于不同型号的计算机,有着不同的结构的汇编语言 汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。 汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。 汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的汇编程序的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。 汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。 不属于汇编语言。它是Hypertext Markup Language的缩写,用来编写网页的语言.通常一个网页的网址最后面有.html或者.htm都是用这种语言编写的. 另外,它一般用来编写静态网页,现在最流行的动态语言有ASP,.NET和PHP等等.

汇编语言中RETI是什么意思

这是51单片机汇编语言的指令,是从中断服务子程序中返回指令,中断服务子程序最后一行必须是RETI指令。

单片机汇编语言中REE:RETI什么意思啊?

REE,是自定义的标号。RETI,是中断返回指令。

汇编语言中RETI是什么意思,如何使用?

就返回到( SJMP $;等待!! )这条指令这里.

单片机汇编语言指令中中断返回指令RET和RETI有什么不同?

  RETI 是中断返回指令;  RET 是子程序返回指令;  RETI比RET多一步清除中断优先级状态位,让同级别的中断有机会得到响应。  中断指令“RETI”做为中断跳出指令除了将堆栈中保存着的地址取出,送回PC;使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。

单片机汇编语言RETI的用法

就返回到( SJMP $;等待!! )这条指令这里.

求一个用汇编语言编写单片机简易交通灯程序。求高手帮下忙谢谢了。

我有 采纳 米我

汇编语言的助记符

8086/8088指令系统一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV 指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH 进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(SRC).POP 出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX 或AL 传送信息..IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在IBM-PC 机里,外部设备最多可有65536个I/O 端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX 寄存器中(端口号可以从0000到0FFFFH),然后再用IN 或OUT 指令来传送信息..XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)<-((BX)+(AL))3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中..LDS 指针送寄存器和DS 指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI 寄存器..LES 指针送寄存器和ES 指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI 寄存器.4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH 送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS 的低字节).SAHF AH 送标志寄存器格式为: SAHF执行的操作:(PWS 的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CF.ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF.DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL 无符号数乘法指令格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC).IMUL 带符号数乘法指令格式: IMUL SRC执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV 无符号数除法指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数.IDIV 带符号数除法指令格式: DIV SRC执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW 字节转换为字指令格式: CBW执行的操作:AL 的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD 字转换为双字指令格式: CWD执行的操作:AX 的内容符号扩展到DX.即如(AX) 的最高有效位为0, 则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三、逻辑指令1.逻辑运算指令AND(and) 逻辑与OR(or) 逻辑或NOT(not) 逻辑非XOR(exclusive or)异或TEST(test) 测试.AND 逻辑与指令格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC).OR 逻辑或指令格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC).NOT 逻辑非指令格式: NOT OPR执行的操作:(OPR)<-(OPR).XOR 异或指令格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC).TEST 测试指令格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left) 逻辑左移SAL(shift arithmetic left) 算术左移SHR(shift logical right) 逻辑右移SAR(shift arithmetic right) 算术右移ROL(Rotate left) 循环左移ROR(Rotate right) 循环右移RCL(Rotate left through carry) 带进位循环左移RCR(Rotate right through carry) 带进位循环右移格式: SHL OPR,CNT(其余的类似)其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL 用来乘2,SAR 用来除以2;而逻辑移位指令则用来无符号数运算,SHL 用来乘2,SHR 用来除以2.四、串处理指令1.与REP 相配合工作的MOVS,STOS 和LODS 指令.REP 重复串操作直到(CX)=0为上格式: REP string primitive其中String Primitive 可为MOVS,LODS 或STOS 指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3).MOVS 串传送指令格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量..STOS 存入串指令格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中..LODS 从串取指令格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ 和REPNZ/REPNE 联合工作的CMPS 和SCAS 指令.REPE/REPZ 当相等/为零时重复串操作格式: REPE(或REPZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3).REPNE/REPNZ 当不相等/不为零时重复串操作格式: REPNE(或REPNZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE 完全相同..CMPS 串比较指令格式: CMP SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同..SCAS 串扫描指令格式: SCAS DSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.五、控制转移指令1.无条件转移指令.JMP(jmp) 跳转指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR 的段内偏移地址(CS)<-OPR 所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA)(CS)<-(EA+2)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0.JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1.JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0.JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1.JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移格式: JP OPR测试条件:PF=1.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移格式: JNP(或JPO) OPR测试条件:PF=0.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移.JB(或JNAE,JC)格式:同上.JNB(或JAE,JNC)格式:同上.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX 的值为0则转移指令.JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8位短跳!3.循环指令.LOOP 循环指令格式: LOOP OPR测试条件:(CX)<>0.LOOPZ/LOOPE 当为零或相等时循环指令格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0且ZF=1.LOOPNZ/LOOPNE 当不为零或不相等时循环指令格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.4.子程序.CALL 调用指令.RET 返回指令5.中断.INT 指令格式: INT TYPE或INT执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4)(CS)<-(TYPE*4+2).INTO 若溢出则中断执行的操作:若OF=1则:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2((SP)+1,(SP))<-(CS)(SP)<-(SP)-2((SP)+1,(SP))<-(IP)(IP)<-(10H)(CS)<-(12H).IRET 从中断返回指令格式: IRET执行的操作:(IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理机控制指令1.标志处理指令.CLC 进位位置0指令(Clear carry)CF<-0.CMC 进位位求反指令(Complement carry)CF<-CF.STC 进位位置1指令(Set carry)CF<-1.CLD 方向标志置0指令(Clear direction)DF<-0.STD 方向标志置1指令(Set direction)DF<-1.CLI 中断标志置0指令(Clear interrupt)IF<-0.STI 中断标志置1指令(Set interrupt)IF<-02.其他处理机控制指令NOP(No Opreation) 无操作HLT(Halt) 停机WAIT(Wait) 等待ESC(Escape) 换码LOCK(Lock) 封锁这些指令可以控制处理机状态.这们都不影响条件码..NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代..HLT 停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序..WAIT 等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT 指令继续德行..ESC 换码指令格式ESC mem其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件..LOCK 封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.

基于数字温度传感器的数字温度计的汇编语言程序。

用c很简单 ,/********************************FILE NAME: DS18B20.cCHIP TYPE: ATMEGA16CLOCK FREQUENCY: 8MHZIDE: VSMStudioCOMPILER: AVR-GCCTIME: September 2010********************************/#include <avr/io.h>#include <util/delay.h>#define uchar unsigned char#define uint unsigned int#define BUS PORTC// Low level port/pin definitions#define sbit(x,PORT) (PORT) |= (1<<x)#define cbit(x,PORT) (PORT) &= ~(1<<x)#define pin(x,PIN) (PIN) & (1<<x)// Pins definition#define s_digit1 sbit(5,PORTC) #define c_digit1 cbit(5,PORTC)#define s_digit2 sbit(4,PORTC) #define c_digit2 cbit(4,PORTC)#define out PORTC#define DQ_IN DDRA&=~(1<<7)#define DQ_OUT DDRA|=(1<<7)#define S_DQ sbit(7,PORTA)#define C_DQ cbit(7,PORTA)#define DQ pin(7,PINA) // Function Prototypesvoid init_ds18b20(void);uchar readbyte(void);void writecommand(uchar);uchar readtemp(void);uchar a, b, tt;// Main programint main(void) { uchar i=0, temp; // Initialize Stack Pointer SPL=0x54; SPH=0x04; // Configure port pins DDRC = 0xff; DDRA = 0xff; while(1) { temp = readtemp(); for(i=0; i<10; i++) // 10 measures { // output the units out = (temp/10) & 0x0f; s_digit1; c_digit2; _delay_ms(5); // output the tens out = (temp%10) & 0x0f; c_digit1; s_digit2; _delay_ms(5); } } }// Start transaction with 1-wire line. void init_ds18b20(void) { DQ_OUT; C_DQ ; _delay_us(600); S_DQ; _delay_us(50); DQ_IN; while(DQ); _delay_us(240); DQ_OUT; S_DQ; _delay_us(300); }// Read a byte from the sensoruchar readbyte(void) { uchar i = 0,data = 0; DQ_OUT; for (i=0; i<8; i++) { C_DQ ; data >>= 1; _delay_us(3); S_DQ; DQ_IN; _delay_us(12); if(DQ) data |= 0x80; DQ_OUT; S_DQ; _delay_us(45); _delay_us(5); } return(data); }// Write a command to the sensorvoid writecommand(uchar data) { uchar i; for(i=0; i<8; i++) { C_DQ; _delay_us(15); if(data & 0x01) S_DQ; else C_DQ; _delay_us(45); data >>= 1; S_DQ; _delay_us(2); } }// Read value from the sensoruchar readtemp(void) { uint t; init_ds18b20(); // Convert writecommand(0xCC); writecommand(0x44); init_ds18b20(); // Read Scratch memory area writecommand(0xCC); writecommand(0xBE); a = readbyte(); b = readbyte(); t = b; t <<= 8; t = t|a; tt = t*0.0625; return(tt); }

想问一下用汇编语言写单片机程序时,怎么定义一个数组变量?

严格的说,汇编语言不支持显式数组变量,就是说你想定义一个任意数组,然后用下标访问是不行的。但汇编语言支持隐式数组变量,其实就是对变量表间接寻址,使用间址寄存器做下标访问“数组”。举例如下:NUMA EQU 40HNUMB EQU 60HMOV R0,#40HMOV A,@R0;取NUMA数组第0个元素倒A

汇编语言怎么变成机器指令的

请参阅 计算机原理

汇编语言中ADD DISP[BX][DI],DX中的DISP是什么意思 什么作用

ADD [DI+BX+DISP],DX8086指令内存寻址可以使用base+index+disp的组合。其中 DISP(displacement,位移)为一个编译时能求值的有符号整数。

单片机汇编语言中 CY AC OV 分别是什么意思?

你说的CYACOV是PSW(程序状态字寄存器)中的标志位。CY:进位标志位;当CY=1时,表示操作结果最高位(位7)有进位或借位。CY=0时,表示操作结果最高位(位7)没有进位或借位。AC:半进位标志位;该位表示当进行加法或减法运算时,低半字节向高半字节是否有进位或借位;当AC=1时,表示低半字节向高半字节有进位或借位;AC=0时,表示低半字节向高半字节没有进位或借位;OV:溢出标志位,该位表示在进行有符号数的加减法时是否发生溢出;当0V=1时,表示有符号数运算结果发生了溢出,OV=0时,表示有符号数运算结果没有溢出。PS:http://baike.baidu.com/view/5048524.htm可以参考!希望以上的回答对你有帮助!谢谢!

汇编语言程序设计:1:成绩等级判断程序:90以上输出A,80~90输出B……;可以重复输入,有退出键功能。

我也需要,时间紧迫,谢谢哪位了

单片机汇编语言中符号 # 是什么意思

要单片机完成一项基本任务,必须将任务分解成一些具体步骤,再要求它去逐项执行每个步骤,还要对它下命令。该命令在单片机术语中称为“指令”(Inetruction)。完成一项任务所需的所有指令的有序集合就称为“程序”(Programm)。这些指令要预先一条一条顺序地放到单片机的程序存贮器中,单片机在运行时,片中的CPU从程序存贮器中逐条有序取出指令,执行指令,并将有关指令执行完毕,即可完成既定任务。 不同种类的单片机有不同的一套命令(即所谓“指令系统”)。PIC系列的单片机其指令系统与51系列的完全不同。PIC16F84有30余条指令构成的指令系统。每条指令由14位(bit)构成,这些位是二进制码的0和1,如果要使16F84端口B的B0位输出高电平,以点亮一只发光二极管LED,而B口的其余各位仍保持低电平,则需要使单片机执行下列各条指令(机器码): 11000000000000 00000001100110 11000000000001 00000010000110 10100000000100 早先的技术人员就是用这样的二进制码来编写程序的。上列程序,看起来像天书,很费解,但它完全能指挥单片机的运作。因为单片机实际上是一种复杂的数字逻辑电路。我们都知道,要数字电路运作,必须相应输入高、低电平,对正逻辑而言,高电平为1,低电平为0。上述指令顺序在不同的数位上出现的0和1,经译码后,即可完成各种不同的运作,逐步完成单片机所要执行的任务,如点亮一个LED。 上述各条指令的写法,虽然是完全面向单片机,是用来直接指示单片机该如何运作的。因此,这种由0、1组成的指令称为机器语言。 实际上,这种由二进码构成的指令集不但难读懂,而且用来编程也有困难。因为程序往往不是从头到尾顺序执行,有时还需中途转移到其它单元执行一段程序后再返回来。而指令是一条一条顺序存放在存贮器各个单元内的。因此,如果要转移,需指明具体转到哪个单元,即要写出该单元的地址。但在编写程序时,该程序有多长,具体要放到哪些单元中,都是未知数,又怎能具体指明要转到哪个单元呢? 由于用机器语言会使程序难写、难读,后来一种新型的语言形式——汇编语言就问世了。使用这种语言写程序较方便,也比较容易读懂。不过,和机器语言一样,不同类型的单片机有完全不同的汇编语言。就如不同地区的人有不同的方言一样。在汇编语言中,转移地址是用符号来表示的。现在,我们把上面由机器语言写成的程序改写成由汇编语言构成的程序: movlw B‘00000000" tris PORT B movlw B‘00000001" movwf PORT Bfin: goto fin 上列各条指令实际上是英语缩写和一些数组成的。如第一条中的movlw就是move Literal to w的缩写,其意义为照原样移入工作寄存器W,而“原样”就是后接引号内的数字‘00000000"。引号前的B表示后续的是二进制数。第二句是将W内的数复制到B口的三态(tri-state)控制寄存器中,以设定B口为输出,然后将00000001送入W中,再复制到B口;最后执行一条无限循环语句以保持B口的状态不变。从单片机外部看去,16F84的第6脚(即B0)维持为高电平,以点亮LED。 由上例可知,汇编语言较之机器语言要好懂得多。同时,最后一句自身循环也是一种转移语句,转移目的地就是此句所在单元地址,如用机器语言,就难以标出具体地址,而用汇编语言助记符fin即可替代。

求用汇编语言编写的(R0R1 * R2R3)乘法程序,最好有注释, 单片机MS-51,能用送分300...

楼上的,要发财了吧?100分,楼主很大方啊:)

用汇编语言启动ad转换

if (superclass instanceof Class) { throw new RuntimeException("Missing type parameter."); } ParameterizedType parameterized = (ParameterizedType) superclass; return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]); }

汇编语言中的ret指令问题

ret返回的地址值从堆栈中获取,如果堆栈是空的,ret就找不到返回的地址了,所以会错误。

在汇编语言中,在RET指令后加个数字,如RET 8,这种指令是什么意思啊?

为了堆栈平衡相当于esp=esp+8

汇编语言中ret和SJMP $有什么区别,为什么有些程序结束的时候是用SJMP $ 而有些时候是用RET呢??

RET 是子程序返回指令,运行到RET时将从堆栈中弹出调用时的地址值给程序计数器PC。SJMP $是转移到前地址的指令,是原地等待的死循环,只有中断可以跳出,中断结束后仍然会回到这里死循环。有些程序结束时用到SJMP $是因为该单片机主要依靠中断完成各项功能控制,主程序就处于死循环状态,如果没有的话,那么单片机就会陷入混乱状态了,因为程序不知道飞到哪里去了,尽管有 中断时也可以执行中断,但一旦结束中断,程序又乱执行了,所以程序不可控,这也是这句语句所起的作用。

单片机汇编语言指令中中断返回指令RET和RETI有什么不同?

RET是子程序返回指令。RETI是中断服务程序返回指令。两者,用途不同。

汇编语言RET是返回到哪里?

ACALL的下一条

单片机汇编语言指令中中断返回指令RET和RETI有什么不同?

RET是普通子程序的返回指令,RET是普通子程序的最后1条指令,它使程序从子程序转到调用该子程序指令LCALL/ACALL的下1条指令执行。RETI是中断服务子程序的返回指令,RETI是中断服务子程序的最后1条指令,它使程序从中断服务子程序转到中断点继续运行。RETI指令除了执行返回功能外,还清除内部相应的中断状态寄存器(该状态寄存器由CPU响应中断时置位,宣告CPU当前正在执行中断服务程序),因此中断服务子程序必须用RETI结束,CPU执行RETI指令后,必须至少再执行一条其它指令才能响应新的中断。

单片机汇编语言指令中中断返回指令RET和RETI有什么不同?

RET是子程序返回指令,将堆栈中的地址弹出,而RETI是中断返回指令,除了将地址弹出,还将标志弹出

汇编语言怎么让三十二位逻辑左移?

二楼说的应该是对的 intel指令手册不再身边 不能帮你查了RAL指令扩展到32位并不存在什么问题,RAL eax ecx
 首页 上一页  1 2 3 4  下一页  尾页