① 汇编语言程序的缺点
汇编语言程序是面向机器的,处于整个计算机语言层次结构的底层,故专被视为一种低属级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;
难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;
使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
② 汇编程序执行问题
汇编程序都是顺序执行,如果稿兄你想跳转到一个其他位置,必须执行跳转指令,否则就是按顺序执行。汇编没有返回指令,返回指令都是伪指令,编译后都是跳转指令。。。如果你想让一个程序不按顺序执行,在汇编里必须用到跳转指令。。。。 C语言每个函数执行完后返回都是调用了跳转指令。。。
在汇编里,CPU的操作时详渗敬迟细到每一步,比如形参传递,必须将形参靠指令放入参数表,然后调用跳转指令,完成函数调用,运算中自动变量出栈入栈都必须你亲自考指令完成,而且必须要保存函数调用的返回地址,执行完后将函回值放到返回值位置,然后跳到这个地址,完成一次函数调用。。。。
当然上述过程是C语言丛李的规则,如果是汇编程序你随意,没必要按照C语言的方式。。。
③ TEC-2机汇编语言的程序设计方法以及注意问题
1,学一点关于DEBUG命令,http://cnbie.net/print_146048m134587.html
2,一定要学好计算机组成原理;
3,要树立一个观念:电脑是死的,它的运行都是梁清以非常简单而且有限的东西(比如从人的方面看是微指令,微操作;而从计算机方面培和看,就是正负脉冲,高低电平)等为基础的,那么我们所做的,无非就是制定一些规则,想出一些方法,把这些东西一层一层的有机的组合,从而使计算机能够做我们希望的事情。
4,顺便问一下,阁下是不是武配渣盯大的计算机学院的学生啊
④ 如何编写完整的汇编程序
看很多资料的话就应该懂得写啊,先看那个王爽的书咯,到第四章差不多就会写了。努力啊
⑤ 汇编语言与c语言混合编程需要注意什么
认真阅读一下使用的编译器手册
⑥ 汇编程序的运行方法
先写代码,你已经写好了是吧,比如你保存的文件是helloworld.asm
然后汇编,我以masm宏汇编举例,masm helloworld.asm
接着连接,link helloworld.obj
最后运行,helloworld
汇编和连接的过程中会有提示,像代码错误啦,保存成什么文件名啦之类的
⑦ 汇编程序如何调试
在DOS的提抄示符下,可键入命令:
C>DEBUG [X:]PATH][FILENAME[.EXE]]
其中:
[X:] 指定驱动器,任选项,例如,C:
[PATH] 为路径,任选项,例如,\MASM
[FILENAME] 为被调试文件的名字,例如,SY
如用户键入文件名,则DOS将指定的文件装入存储器中,用户即可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
在DEBUG程序调入后,将出现提示符‘-’就可用DEBUG命令来调试程序。
注意:DEBUG显示的数均以16进制数表示。
⑧ 51单片机汇编程序的几个问题。。。。。
六个问题就是120分了,呵呵,开个玩笑
你知道在51中数据传送指令有几条?告诉你,是29条,里面没有mov
Rn,Rn这样的指令,为什么呢?因为单片机不允许同时有两个访存工作寄存器组的操作,p1呢,它不是工作寄存器,明白吗?
你知道在51中工作寄存器组有几组?上电复位后单片机用的是哪一组?为什么只能有一组是可用的呢,其它几组干什么去了?工作寄存器组的存储单元呢?单片机是怎么识别当前用的是哪一组?为什么要有好几组工作寄存器呢?
告诉你,是4组,分别是0,、1、2、3;上电复位后单片机用的是第0组;因为汇编指令里只有一个R0、R1、R2、R3、R4、R5、R6、R7,你要是往R0中存数据,只能是一个单元,所以是一组,其它几组呢,让它们闲着,等需要用的时候切过去;4组工作寄存器,每组8个单元,共32个单元,从片内RAM00H开始到1FH,自己算算,32个单元;在SFR(特殊功能寄存器)中有个PSW(程序状态字)的寄存器,它里面有两个位叫RS0、RS1,00、01、10、11组合,明白?上电复位后PSW要被清零的,就是00组合,他就是第0组工作寄存器的识别信号,明白?为什么要有好几组工作寄存器呢?那是为了程序调用的,发生子程序调用,保护主程序的工作状态,你要给子程序重新设一组工作寄存器,当然,你要是用不到工作寄存器,不切换也行,怎么切换呢?这你不会不知道了吧,给psw寄存器送个值把RS0、RS1的二进制数改了不就行了?
够明白的了吧?再要是不知道就看书去,太丢人了
⑨ 一个avr单片机的汇编程序,注意几个宏指
//晶振1MHz
//LED接PB0
//使用定时器1,1024分频,0.5秒中断一次,LED闪烁一次
程序如下:
.include"m8def.inc"
.equled=0
.equflash=$60
.org$0000//中断向量表
rest:
rjmpSTART
INT0addre:;
reti
INT1addre:;
reti
OC2addre:;
reti
OVF2addre:;
reti
ICP1addre:;
reti
OC1Aaddre:;
reti
OC1Baddre:;Output运信
reti
OVF1addre:;
rjmpTimer1_ovf
OVF0addre:;
reti
SPIaddre:;SPIInterruptVectorAddress
reti
URXCaddre:;
reti
UDREaddre:;USARTData段纯
reti
UTXCaddre:;
reti
ADCCaddre:;ADCInterruptVectorAddress
reti
ERDYaddre:;EEPROMInterruptVectorAddress
reti
ACIaddre:;
reti
TWIaddre:;Irq.vectoraddressforTwo-WireInterface
reti
SPMaddre:;
reti
SPMRaddre:;
reti
.org$20
START:
ldir16,low(ramend)//设置堆栈指针
outspl,r16
ldir16,high(ramend)
outsph,r16
clrr16
stsflash,r16
sbiddrb,led//PB0接led
rcallTimer1_ovf_init//调用初始化函数
MAIN:
ldsr16,flash
sbrsr16,0;iftheflagisset,jumponelow
rjmpmain
ldir16,0x01//LED取反
inr17,pinb
eorr17,r16
outportb,r17
clrr16
stsflash,r16
rjmp旁燃轮main
Timer1_ovf_init:
ldir16,0xfe
outtcnt1h,r16
ldir16,0x17
outtcnt1l,r16
inr16,timsk
sbrr16,1<<2//开溢出中断
outtimsk,r16
ldir16,0x05
outtccr1b,r16//开定时器
sei//开中断
ret
Timer1_ovf://定时器2定时0.5S
inr16,sreg
pushr16//保存SREG入栈
ldir16,0xfe
outtcnt1h,r16
ldir16,0x17
outtcnt1l,r16
clrr16
sbrr16,1<<0//设置标志
stsflash,r16
popr16
outsreg,r16
reti//中断返回