
- 产生年代
- 20世纪50年代
- 外文名
- Assembly Language
- 编译方式
- 汇编
- 中文名
- 汇编语言
- 学 科
- 软件工程
-
2021-05-23 05:50:54
汇编语言(Assembler Language)
[编辑]
什么是汇编语言
汇编语言是指能反映指令功能的助记符表达的计算机语言,它是符号化的机器语言。用汇编语言写出的程序是汇编语言源程序,机器无法执行。必须用计算机配置好的汇编程序把它翻译成机器语言目标程序,机器才能执行。这个翻译过程就是汇编过程。汇编语言比机器语言在编写、修改、阅读方面均有很大改进,运行速度也快,但掌握起来比较困难。
[编辑]
汇编语言的特点
汇编语言采用了助记符来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机有着不同结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同机型类别的计算机间是互不相通的。
汇编语言中使用了助记符号,对于用汇编语言编制的程序,计算机不能像用机器语言编写的程序一样直接识别和执行,必须经过预先放人计算机的“汇编程序”的加工和翻译才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序.它被安置在内存的预定位置上后,就能被计算机的CPU处理和执行。
汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
汇编语言指令能够直接控制硬件,例如访问I/O端口;而高级语言不提供对于硬件的控制。高级语言程序的效率取决于编译器翻译高级语言程序的方式,由于编译器必须可以翻译所有可能的高级语言代码,因此在某些情况下编译器翻译出的机器语言可能不是最有效的机器语言。而汇编语言指令和机器语言指令是一一对应的,因此使用汇编语言可以确保代码的高效性。编写一个完整程序可能不能体现汇编语言高效率的优势。若仅编写部分程序,在执行时常常可以获取较高的效率。在多数情况下,汇编语言程序员编写汇编语言程序不是为了实现一个完整的系统或者是一个程序,而仅仅是编写选定的模块。例如,可以通过写出口例程(exit routine)用户化应用程序或操作系统。为了保证与宿主语言程序能正常接口,常常需要用汇编语言编写这样的出口例程。
[编辑]
汇编语言的优缺点
一、汇编语言的优点
汇编语言的语句与机器语言的指令是一一对应的,因此它具有机器语言的一些特点,其优点如下。
(1)易于理解与记忆。
(2)能利用机器指令精确地描述算法,编程质量高。
(3)所占存储空间小。
(4)执行速度较快。
二、汇编语言的缺点
(1)与机器语言一样,程序通用性差。每一种汇编语言都是为某种特定类型的计算机专门设计的,不同类型计算机的汇编语言不能通用。
(2)汇编语言与机器语言一样都依赖于机器,与计算机硬件直接相关,也是面向机器的语言。
[编辑]
汇编语言的应用
汇编语言作为最基本的编程语言之一,虽然它的应用范围不算很广,但重要性却毋庸置疑,因为它能够完成许多其他语言所无法完成的功能。例如Linux内核的绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在Linux的启动部分。由于这部分代码与硬件的关系非常密切,即使是C语言也会有些力不从心,而汇编语言则能够很好地扬长避短,最大限度地发挥硬件的性能。70%以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。某些高级绘图程序、视频游戏程序也是用汇编语言编写的。
汇编语言是理解整个计算机系统的最佳起点和最有效途径.人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功能。所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。机器的逻辑功能、软件系统功能构筑其上,硬件系统功能运行于下。汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理打下技术理论基础;向下为掌握硬件系统的原理打下实践应用基础。学习汇编语言向上可以理解软件,向下能够感知硬件,是理解整个计算机系统的最佳起点。
[编辑]
参考文献
↑ 本书编写组编.第二章 会计电算化的工作环境 初级会计电算化 第4版.东北财经大学出版社,2011.09.
↑
↑ 赵忠孝,赵晔编著.第一章 绪论 新编C程序设计教程.机械工业出版社,2011.08.
本条目对我有帮助3
赏
MBA智库APP
扫一扫,下载MBA智库APP
分享到:
更多相关内容 -
汇编语言程序设计全部实验报告.zip
2021-04-22 15:54:48王爽《汇编语言》第三版课后实验题 link.exe+masm.exe都在资源包里面 汇编语言实验一查看CPU和内存,用机器指令 汇编语言实验二用机器指令和汇编指令编程 汇编语言实验三编程·编译·链接·跟踪 汇编语言实验四[bx]... -
中断控制LED灯亮灭【汇编语言】.zip
2020-09-22 09:48:37中断控制LED灯亮灭【汇编语言】.zip中断控制LED灯亮灭【汇编语言】.zip中断控制LED灯亮灭【汇编语言】.zip中断控制LED灯亮灭【汇编语言】.zip中断控制LED灯亮灭【汇编语言】.zip中断控制LED灯亮灭【汇编语言】.zip... -
ARM汇编语言官方手册(中文)pdf_逆向分析_手机app逆向arm参考资料_arm汇编语言pdf_ARM汇编官方_ARM汇编_
2021-10-04 09:14:30app逆向分析必备参考资料,底层的arm汇编语言。 -
四川大学汇编语言第三次实验报告.doc
2021-11-21 16:33:02编制完整的汇编语言源程序 汇编语言课程设计第三次实验报告。 自己写的实验报告,满绩分数,含图片。 -
汇编语言程序设计:基于ARM体系结构(第3版)
2019-06-15 10:00:27《普通高校"十三五"规划教材·汇编语言程序设计:基于ARM体系结构(第3版)》基于ARM体系结构进行汇编语言的教学。《普通高校"十三五"规划教材·汇编语言程序设计:基于ARM体系结构(第3版)》的内容分成3个部分:第1部分... -
现代X86汇编语言程序设计(带详细目录)
2019-06-15 09:56:18本书从应用编程的角度解释x86处理器的内部架构和执行环境,全面介绍如何用x86汇编语言编写可被高级语言调用的函数。主要内容包括:x86-32核心架构(第1章和第2章),x87浮点单元(第3章和第4章),MMX技术(第5章和... -
x86汇编语言 从实模式到保护模式完整版.pdf
2021-11-03 21:51:36x86汇编语言 从实模式到保护模式完整版.pdf -
汇编语言.pdf————电子版_pdf版
2021-09-17 09:17:32汇编语言.pdf————电子版_pdf版 -
80X86汇编语言程序设计教程_杨季文_高清中文版
2018-06-25 21:05:1180X86汇编语言程序设计教程 基本信息 作者: 杨季文 出版社:清华大学出版社 ISBN:9787302029014 上架时间:2013-1-28 出版日期:2013 年1月 开本:16开 页码:595 版次:1-21 所属分类:计算机 > 软件与程序设计 ... -
利用汇编语言实现快速排序,汇编语言排序算法
2019-05-05 10:14:01利用汇编语言实现快速排序,汇编语言排序算法。 数字逻辑与处理器大作业,通过汇编实现文件读入,快速排序,再写到文件中 汇编 快排 数逻 -
西安交通大学《汇编语言程序设计》课程视频(36集)
2019-07-23 07:09:46资源名称:西安交通大学《汇编语言程序设计》课程视频(36集)资源目录:【】西安交通大学汇编语言程序设计(1)【】西安交通大学汇编语言程序设计(10)【】西安交通大学汇编语言程序设计(11)【】西安交通大学汇编语言... -
北京理工大学《汇编语言》习题答案.pdf
2021-03-05 21:50:38北京理工大学《汇编语言》习题答案 -
王爽 汇编语言 mobi格式 kindle
2017-09-12 11:37:49王爽的汇编语言 mobi格式,仅此一家,别嫌分高!扫描版 汇编语言是汇编指令集、伪指令集和使用它们规则的统称,使用具有一定含义的符号为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令。 汇编... -
最强大的王爽汇编语言学习环境.rar
2020-05-29 17:37:47最强大的王爽汇编语言学习环境 -
汇编语言-第三版-王爽著
2018-07-03 12:01:37汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号... -
北京理工大学《汇编语言》期末考试多套练习题(含答案).pdf
2021-03-05 21:50:19北京理工大学《汇编语言》期末考试多套练习题(含答案) -
分享几个汇编语言写的游戏
2019-03-06 13:39:12分享几个汇编语言写的游戏。 汇编语言写的程序练习程序的写成可以用汇编的编程器调试一下看看 汇编程序 -
手把手教你学习汇编语言——从入门到起飞
2021-05-11 08:07:33关于这篇博客,笔者会尽量用最简单的方式教会大家汇编语言以便应付各种考试 有什么不足的忘大佬评论或私信指出。 汇编环境安装 汇编运行调试 汇编指令 希望大家看完这些找一些样例练习一下会学的更好,这里有一些...专接本交流群:1051749714 (有什么问题欢迎进群讨论)
关于这篇博客,笔者会尽量用最简单的方式教会大家汇编语言以便应付各种考试
有什么不足的忘大佬评论或私信指出。希望大家看完这些找一些样例练习一下会学的更好,这里有一些练习题希望能帮助到大家
汇编语言编程题总结汇编语言环境安装
这里用的是Masm,相比较纯Dosbox会简单很多的
汇编语言和CodeBlock安装包 密码:dqs9下载以后打开运行
下一步
安装
完成即可
安装完成后打开,进来是默认的程序框
汇编语言运行的话,一定要保存文件到本地才可以运行,调试的话也需要先运行一下才能调试,否则就是调试的上次运行的程序。汇编运行调试
当我们写好以后,它会提示我们先保存在运行
ctrl+s保存在一个地方,记得改名字,把 * 换成名字
再点击运行,出现这个就可以了,这是没有屏幕输出的程序,如果有屏幕输出,还会先输出程序输出的,在输出这一行。
(如果到时候一闪而过,说明你的程序有问题)
下面会有提示哪一行有问题的,双击就会高亮显示那一行
(笔者这个就是在AL后面多打了一个S)运行可以了,那就大概说一下调试的过程(如果要调试的话,一定要先运行一遍才可以,否则就是调试的上一次运行的代码)
调试的话,输入 T 是运行一步,你可以选择一步一步的运行,
我们输入一个T 出来的划线位置就是下一次要运行的代码
我们可以看到命令框第二个划线的 MOV AL,[0000H] 我们的AL赋值是12H 第二次AX的低四位还不是12H
当我们再输入一个T,才是12H,也就是调试出来的代码是下一次将要运行的代码。
也许有些时候可能会觉得一步一步调试太麻烦了,这里也有直接跳转调试的
我们之间输入一个U就会出现每一步代码所对应的数。
通过G 在写对应的号,就可以跳转到指定的位置
其他的话,可能会有更方便的,但是笔者认为这些就很够用了。
软件安装运行调试大概就是到这里了,接下来我们来简述一下基本的命令语句吧
汇编指令
先来看一下基本的结构(分号后面的都是注释的,汇编语言用分号注释)
DATAS SEGMENT ;数据段 ;此处输入数据段代码 DATAS ENDS CODES SEGMENT ;代码段 ASSUME CS:CODES,DS:DATAS ;数据段给DS,代码段给CS START: ;开始代码 MOV AX,DATAS ;需要先把DATA给AX寄存器,然后再从AX给DS,DATA不能直接给DS MOV DS,AX ;此处输入代码段代码 MOV AH,4CH ;结束语句 INT 21H CODES ENDS ;代码段结束 END START ;结束代码
先来说常用的命令符号,如果大家有什么其他命令符使用的话,可以评论或者私信我,我看到会尽快给大家展示出来如何使用
MOV AL,BL 这里就是把BL的值放到AL中。
然后就是类似于C语言的函数
这个函数就是起个名字加个分号
汇编语言的函数没有结束的地方,一般如果需要结束的加,就要加一个跳转到其他地方
如果没有跳转,他就会一直运行到下面DATA SEGMENT A DB 12H ;定义两个变量 B DB 24H DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODES START: MOV AX,DATA MOV DS,AX JMP EXIT ;这里就是直接跳转到EXIT JMP就是跳转的方法 MOV AL,A ;把A->AL MOV BL,B ;B->BL MOV A,BL ;BL->A MOV B,AL ;AL->B EXIT: MOV AH,4CH INT 21H CODES ENDS END START
当然还有很多特别的JMP 也就是一些带标志位的 就是标志寄存器里面的六个状态位
1、进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。 2、奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。 利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。 3、辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0: (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。 对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。 4、零标志ZF(Zero Flag) 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。 5、符号标志SF(Sign Flag) 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。 在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。 6、溢出标志OF(Overflow Flag) 溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出, OF的值被置为1,否则,OF的值被清为0。 (有些时候,有些问题会问你是不是溢出了,这里有个巧计的方法,负数加负数是正数,正数加正数是负数,如果出现这种情况就是溢出了)
然后衍生出来的就是几个条件跳转指令
一般情况下,条件跳转上面要跟一些影响标志寄存器的命令JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA ;无符号不大于则跳转 JAE ;无符号大于等于则跳转 JNAE ;无符号不大于等于则跳转 JG ;有符号大于则跳转 JNG ;有符号不大于则跳转 JGE ;有符号大于等于则跳转 JNGE ;有符号不大于等于则跳转 JB ;无符号小于则跳转 JNB ;无符号不小于则跳转 JBE ;无符号小于等于则跳转 JNBE ;无符号不小于等于则跳转 JL ;有符号小于则跳转 JNL ;有符号不小于则跳转 JLE ;有符号小于等于则跳转 JNLE ;有符号不小于等于则跳转 JP ;奇偶位置位则跳转 JNP ;奇偶位清除则跳转 JPE ;奇偶位相等则跳转 JPO ;奇偶位不等则跳转
说完跳转类的指令,接下来我们看一看左移右移指令
左移这种指令左移一位就是二进制左移一位,也就是乘2的操作。SHL(Shift Left)、SAL(Shift Arithmetic Left): 每位左移, 低位补 0, 高位进 CF SHR(Shift Right) : 每位右移, 低位进 CF, 高位补 0 SAR(Shift Arithmetic Right) : 每位右移, 低位进 CF, 高位不变(也就是高位复制到第二位) 使用的时候就是 SHL AL,1 左移一位 如果移动的位数大于1位,就要放到CX中
循环左移右移
;ROL(Rotate Left): 循环左移, 高位到低位并送 CF ;ROR(Rotate Right): 循环右移, 低位到高位并送 CF ;RCL(Rotate through Carry Left): 循环左移, 进位值(原CF)到低位, 高位进 CF ;RCR(Rotate through Carry Right): 循环右移, 进位值(原CF)到高位, 低位进 CF 使用的时候就是 ROL AL,1 循环左移一位 如果移动的位数大于1位,就要放到CX中
然后就是加减乘除
加法add和adc、inc ADD AL,BL AL和BL加起来放到AL ADC的话就是ADD的运算在家一个CF状态位的值, INC AL AL加1 减法sub和sbb、dec SUB 对应ADD SBB 对应ADC DEC 对应INC 用法都是一样的,就是一个是加一个是减 乘法mul和imul MUL是无符号乘法 MUL 8位的 就是AL乘这个数放到AL 高位放到AH MUL 16位的 就是AX乘这个数放到AX中 高位放到DX 除法div和idiv DIV是无符号除法 DIV 8位的 就是 AX除这个数,商放AL 余数放AH DIV16位的 就是(DX:AX)除这个数,商放AX 余数放DX 异或运算XOR XOR AL,BL AL和BL异或运算放入AL 与运算AND 或运算OR都是一样的 然后就是CMP 和TEST CMP 就是对应的减法,但是这个不会影响AL的值,他只会影响状态标志位 TEST 就是AND的用法,也是不会影响AL,只影响状态标志位
最后就是DOS功能的输入输出
字符输入输出
DATA SEGMENT DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODES START: MOV AX,DATA MOV DS,AX MOV AH,01H ;键盘输入的时候,给AH 1 INT 21H ;然后INT 21H调用,默认输入到AL中 MOV DL,AL ;CMD窗口输出的时候,要把输出的放到DL中 MOV AH,02H ;给AH 2 INT 21H EXIT: MOV AH,4CH INT 21H CODES ENDS END START
字符串输入输出
DATA SEGMENT BUF DB 20 DUP('$') BUFF DB 'Hello World!$' DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODES START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF ;把偏移地址给DX,也可以用 LEA DX,BUF 二者皆可 MOV AH,0AH ;键盘输入的时候,给AH 10 INT 21H ;然后INT 21H调用,默认输入到BUF中 MOV DX,OFFSET BUFF ;CMD窗口输出的时候,要把输出偏移地址放到DX中 MOV AH,09H ;给AH 2 INT 21H EXIT: MOV AH,4CH INT 21H CODES ENDS END START
-
汇编语言 王爽 实验七 汇编代码.asm
2017-09-29 15:56:02汇编语言 王爽 实验七 独立完成 汇编语言 王爽 实验七 独立完成 -
汇编语言指令大全(详解版).pdf
2019-09-14 05:28:51汇编语言指令大全(详解版)pdf,汇编语言指令大全 -
386汇编语言教程+例子源代码_极品,能干活儿的汇编教程
2021-11-17 15:13:26如何用汇编语言编写 File Header, Section Table, Import Table, Export Table 汇编语言调用消息框,制作对话框 汇编语言使用odbc连接数据库 汇编语言扫描硬盘 汇编语言制作位图文件.bmp 汇编语言读取剪切板中的数据 ... -
INTEL汇编语言程序设计
2018-11-04 15:04:12INTEL汇编语言程序设计, 作者:Kip Irvine 包含 英文版 中文第4版 中文第5版 -
汇编语言第三版王爽
2017-12-02 12:01:16______________________汇编语言第三版王爽_______________ -
IBM_PC汇编语言程序设计第二版(沈美明)习题参考答案
2018-12-13 15:41:30汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号... -
80X86汇编语言与计算机体系结构(中英文版).rar
2019-01-12 08:28:5380X86汇编语言与计算机体系结构(中英文版),经典书籍 -
34750钱晓捷32位汇编语言程序设计课件_电子教案_汇编语言_钱晓捷_
2021-10-03 13:28:1732位汇编语言程序设计电子教案配套教材:钱晓捷主编,32位汇编语言程序设计 -
汇编语言_基于x86处理器 原书第七版 -超高清版-带书签
2019-04-30 11:08:45汇编语言_基于x86处理器 原书第七版 -超高清版-带书签 带真正书签,目前来说是网上最清晰的啦,好好学底层,为我国计算机事业贡献力量。 -
生日快乐歌曲程序【汇编语言】.zip
2020-09-22 09:48:03生日快乐歌曲程序【汇编语言】.zip生日快乐歌曲程序【汇编语言】.zip生日快乐歌曲程序【汇编语言】.zip生日快乐歌曲程序【汇编语言】.zip生日快乐歌曲程序【汇编语言】.zip生日快乐歌曲程序【汇编语言】.zip生日快乐... -
汇编语言(斐波拉契数列)
2017-05-29 20:43:18使用汇编语言,产生斐波拉契数列并显示