一、什么是汇编和汇编语言?
汇编是指把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。
汇编语言是指能反映指令功能的助记符表达的计算机语言,它是符号化的机器语言。用汇编语言写出的程序是汇编语言源程序,机器无法执行。必须用计算机配置好的汇编程序把它翻译成机器语言目标程序,机器才能执行。这个翻译过程就是汇编过程。汇编语言比机器语言在编写、修改、阅读方面均有很大改进,运行速度也快,但掌握起来比较困难。
二、汇编语言里ENTDB0DH?
这是汇编里定义的一个缓冲区,一般用来存放字符串,有点与c语言中的数组类似。
buffer是自己定义的一个变量名,db表示它是双字节型的变量,后面的第一个60可以理解为数组首字节存放的数据,紧接着存放的是一个问号,问号默认值是0(与后面括号里一样),60dup(?)表示60个连续存放的0。
三、汇编和c语言如何结合的?
程序员编写的C语言代码,首先要经过C语言编译器,生成汇编代码,这个过程称为编译阶断,当C语言编译器生成汇编代码后,再调用汇编器来将汇编代码编译成汇编指令。这是一种站在巨人肩人的作法,最早的C++编程语言也是这样的实现方法,只不过那时候叫Cfront程序,Cfront程序的作用是将C++代码转换成C语言代码,类似于一个文本处理器,然后再调用C语言编译器,将C源码编译成汇编代码,然后再调用汇编器将汇编代码编译成机器码。这个过程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc这款c语言编译器为例,它实际上是四个小程序。cp: c语言预处理程序,有它负责进行预处理操作。cc: C语言编译器,它负责将C源码编译成汇编代码。as: 汇编器,它负责将汇编代码编译成机器码,一般使用gcc test.c这样的命令编译C语言时,会生成一个a.out的程序,它实际上指的就是as ouput,即汇编器输出文件。link: 链接器,它负责将汇编器输入的机器码和库打包成一个操作系统可以运行的可执行文件,在Linux上的可执行文件格式是ELF格式,这个格式的实现是有链接器来完成的。
四、VB和汇编语言的关系?
编译型语言如VB、c语言的编译器在编译时是先生成对应的汇编代码,在用汇编程序编译连接(complie、link)。
汇编语言是与机器语言相对应的,你可以把它看成是带有助记符的机器语言。W32Dasm是windows32系统下的反编译软件,可以把对应的机器代码翻译成汇编代码,这样做在很多情况下是必须的,因为几乎没人读得懂机器代码,而如果你不知道高级语言的源代码。破解软件、制作外挂常常用到这种工具
五、fpga和汇编语言区别?
软件层面的不同
在软件层面上,给DSP写程序和给多核CPU写程序,给GPU写程序,没有太大区别,DSP有完善的C语言编译器。目前高端的FPGA中都集成了硬核DSP。
编程语言不同
FPGA主要使用HDL,包括VHDl,Verilog,还有数模混合的描述语言Verilog-AMS等。DSP使用C,汇编语言编程。
六、汇编语言的语言特点?
汇编语言的总体特点1.机器相关性这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。
使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
2.高速度和高效率汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。
3.编写和调试的复杂性由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源。
这样,就不可避免地加重了程序员的负担。
与此相同,在程序调试时,一旦程序的运行出了问题,就很难发现。 优点1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
使用汇编语言,可以访问所有能够被访问的软、硬件资源。
2、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言,经常与高级语言配合使用,以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足,应用十分广泛。 缺点1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。
不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;
2、难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;
3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
七、最早的汇编语言?
从历史上来看,最早的汇编语言是设计Fortran语言的巴科斯在设计Fortran的过程中产生的(作为中间表达形式),时间应该是在50年代初期。更早以前的程序是用穿空卡片来直接输入机器码的。
八、汇编语言end和ends的区别?
在汇编语言中,END和ENDS是两个不同的指令,它们有着不同的作用和含义。
1、END:END指令用于标识汇编程序的结束。当程序执行到END指令时,程序将停止执行并返回操作系统。END指令通常在程序的最后一条指令之后,表示程序已经完成并且不再执行任何指令。
例如,以下是一个简单的汇编程序示例,其中END指令用于标识程序的结束:
MOV AX, 10 ; 将10赋值给AX寄存器
ADD AX, 20 ; 将AX寄存器加20
MOV BX, AX ; 将AX寄存器的值赋值给BX寄存器
MOV AH, 4CH ; 调用系统调用,退出程序并返回操作系统
INT 21H ; 执行系统调用
END ; 程序结束
在上述示例中,END指令用于标识程序的结束,程序将在执行到END指令时退出并返回操作系统。
2、ENDS:ENDS指令用于标识一个段的结束。在汇编程序中,通常会将代码和数据分为不同的段,例如代码段、数据段、堆栈段等。每个段都有一个起始地址和结束地址。ENDS指令用于标识一个段的结束,告诉汇编程序该段已经完成,并且不再在该段中添加新的代码或数据。
例如,以下是一个示例代码段,其中ENDS指令用于标识代码段的结束:
section .text
global _start
_start:
MOV AX, 10 ; 将10赋值给AX寄存器
ADD AX, 20 ; 将AX寄存器加20
MOV BX, AX ; 将AX寄存器的值赋值给BX寄存器
MOV AH, 4CH ; 调用系统调用,退出程序并返回操作系统
九、汇编语言中OUT和IN的用法?
in和Out都是IO操作指令,例如out指令:
OUTPortNo/DX,AL/AX
功能为把AL/AX的数据送到IO地址,IO地址如果大于FFH,则地址需要放入DX,要输出字节,默认使用AL寄存器,要输出字,默认使用AX寄存器。
例如:
MOVAL,10H//(将字节10H从I/O端口70H输出)
OUT70H,AL
MOVAX,0010H//(将字0010H从I/O端口37FH输出。)
MOVDX,37FH
OUTDX,AX
十、汇编语言sti和cli作用?
STI(Set Interrupt) 中断标志置1指令 使 IF = 1;CLI(Clear Interrupt) 中断标志置0指令 使 IF = 0.它们只影响本指令指定的标志,而不影响其他标志位(即STI和CLI只影响IF)。


- 相关评论
- 我要评论
-