主要的汇编指令有哪些?

主要的汇编指令有哪些?,第1张

LDR 和STR——用于字和无符号字节\x0d\x0a指令格式:\x0d\x0aLDR/STR{cond}{T} Rd,\x0d\x0aLDR/STR{cond}B{T} Rd, \x0d\x0a\x0d\x0aLDR{cond}{T} Rd, 加载指定地址的字数据到Rd中;\x0d\x0aSTR{cond}{T} Rd,存储Rd中的字数据到指定的地址单元中;\x0d\x0aLDR{cond}B{T} Rd,指令加载指定地址的字节数据到Rd的的最低字节中(Rd的高24位清零);\x0d\x0aSTR{cond}B{T} Rd,指令存储Rd中的最低字节数据到指定的地址单元中。\x0d\x0a T为可选后缀,若有T,那么即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下,T 在用户模式下无效,不能与前索引偏移一起使用T。\x0d\x0a\x0d\x0a地址部分可用的形式有4种: \x0d\x0a\x0d\x0a零偏移(zero offset) [Rn] ,Rn的值作为传送数据的地址。如: \x0d\x0aLDR R0,[R1]; \x0d\x0a前索引偏移(pre-indexed offset) [Rn,Flexoffset]{!} 在数据传送之前,将偏移量Flexoffset加到Rn 中。其结果作为传送数据的存储器地址。若使用后缀“!”,则结果写回到Rn 中,且Rn 不允许是R15,如: \x0d\x0aLDRB R0,[R1,#8]\x0d\x0aLDR R0,[R1,#8]! \x0d\x0a程序相对偏移(program relative) label(label 必须是在当前指令的土4KB 范围内) 。 \x0d\x0a程序相对偏移是前索引形式的另一种版本。从PC 计算偏移量,并将PC 作为Rn 生成前索引指令,不能使用后缀“!”,如: \x0d\x0aLDR R0,place ;\x0d\x0aplace地址装入R0 \x0d\x0a后索引偏移(post-indexed offset) [Rn],Flexoffset。在数据传送后,将偏移量Flexoffset 加到Rn 中,结果写回到Rn,Rn 不允许是R15,如: \x0d\x0aLDR R0,[R1],R2,LSL#2 ;\x0d\x0a将存储器地址为R1 的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。\x0d\x0a偏移量Flexoffset可以是下两种形式之:\x0d\x0a1) 取值范围是-4095 到+4095 的整数的表达式,经常是数字常量,如:\x0d\x0aSTR R5,[R7],#--8 \x0d\x0a2) 一个寄存器再加上移位(移位由立即数指定),如:\x0d\x0a{-}Rm{,shift} \x0d\x0a其中: \x0d\x0a- :可选负号。若带符号“一”,则从Rn 中减去偏移量。否则,将偏移量加到Rn 中。\x0d\x0aRm :内含偏移量的寄存器。Rm 不允许是R15。 \x0d\x0aShift:Rm 的可选移位方法。可以是下列形式的任何一种: \x0d\x0aASR n :算术右移n 位(1 回答于 2023-01-06 华为Mate50 Pro曲面旗舰手机 ¥6799 苹果 AirPods Pro 2代 ¥1699 索尼65英寸4K HDR专业游戏电视 ¥7499 惠普战66五代15.6英寸轻薄本 ¥4399 查看更多

问题一:什么是汇编语言? 计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。

1. 机器语言

电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

2. 汇编语言

为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。

3. 高级语言

从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言―F O RT R A N问世了,4 0多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。

高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。

6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1 9 6 9年,提出了结构化程序设计方法,1 9 7 0年,第一个结构化程序设计语言―P a s c a l语言出现,标志着结构化程序设计时期的开始。

8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的......>>

问题二:什么是汇编语言 汇编语言它是计算机语言,计算机语言说通俗点就是人类与计算机(CPU)沟通的桥梁,计算机它不认识人类的语言,听不懂也读不懂,要让计算机替我们去完成我们的工作,就需要我们将要交给计算机完成的任务翻译为计算机语言。汇编语言是各种语言中的一种,它属于低级的计算机语言,这是相对于面向过程的C语言,以及面向对象的C++,java而言。它是除机器语言以外最接近硬件的计算机语言,而且可以通过学习汇编语言深入的了解 *** 作系统的底层运行机制,并以CPU的角度思考问题。这样可以让你在编写高级语言的程序的时候避免很多错误,并且能更深入理解高级语言的执行 原理。因为汇编语言属于低级语言,所以既然低级就肯定不容易被普通用户认识,这需要一定的硬件基础知识和一些计算机工作原理的知识。以前在大学阶段学过汇编语言,但没有当回事儿,连作业都是复制加粘贴完成的(像这样的不在少数吧:))。工作以后才发现这个语言是个好东西,它其实是个非常重要的基础课程。所以现在有时间就把书打开多看一点,学一点。汇编语言目前常见的有两种:一个是基于8086/88架构的DOS下的16位汇编语言,还有就是基于80386架构及其以后型号的windows下32位汇编语言。我不知道linux下有没有汇编语言。顺便说一下,不管什么汇编语言它所编出来的程序都属于软件,所以不管什么软件都需要依赖 *** 作系统这个基础平台,它才可以被硬件CPU所执行,因为 *** 作系统就是提供硬件与用户之间的接口,所有软件都要通过它来分配到硬件资源(不知道对不对哈:)才可以被执行)。一般先学习16位的DOS汇编,然后再学32位的windows汇编。所以我们先谈谈16位的DOS汇编哈。要学汇编语言首先就是要了解CPU,你只有了解了CPU才能了解汇编语言的执行,因为它基本就是直接在 *** 作CPU的各个组成单元(像寄存器)。在 *** 上找了这个图,如下:上面这个CPU的逻辑结构图是8088的,8088和8086大的架构差不多,所以就以这个为例介绍下各个组成部分的作用。主寄存器:AX(AH,AL)累加寄存器,一般用作暂存数据;BX(BH,BL)基址寄存器,一般用作偏移地址存放;CX(CH,CL)计数寄存器,一般用在循环控制次数;DX(DH,DL)数据寄存器,好像和AX差不多吧;SP堆栈指针寄存器,栈指针;BP基址指针寄存器,可作SP使用;SI源变址寄存器和DI目的变址寄存器,这两个做为BX扩展用于偏移地址存放。段寄存器: CS:代码段寄存器,任何一个程序都是从代码段开始执行的,CS寄存器指明了代码段的段地址。DS:数据段寄存器,存放程序中数据部分的段地址。SS:堆栈段寄存器,堆栈是内存中特殊的内存块,堆与栈不同,目前我只知道栈是尊循“先进后出,后进先出”的原则而使用。ES:附加段寄存器,应该是作为DS数据段寄存器的扩充吧。地址加法器: 这是用在对内存寻址时所使用,它通过将段寄存器中的段地址与BX、SI、DI等寄存器中的偏移地址作一定处理从而输出物理地址,然后就可以访问内存单元了。汇编程序中的地址只是逻辑地址,并不是真实的内存上的地址。在程序实际运行时每次访问内存都会先将逻辑地址转换成物理地址才可以访问到物理内存。关于CPU寻址,逻辑地址,物理地址我也会再写篇文章来讨论。逻辑运算单元和控制单元:这是CPU最核心的单元,我们暂只记住它们是负责执行与控制就好了。内部数据,地址总线:CPU内部各部件之间通信的通道。外部地址总线:用来传输CPU想要读取/写入内存单元的物理地址。它的宽度就决定了CPU能够访问的内存的最大容量。外部数据和控制总......>>

问题三:简述用汇编语言进行程序设计的步骤。 汇编语言程序设计步骤:

(1)分析问题:已知条件、要解决的问题、功能/性能要求等。

(2)建立数学模型:把问题数学化、公式化,便于计算机处理。

(3)确定算法:简单、速度快、精度高、代码量小、编程容易。

(4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。

(5)内存空间分配:为程序或数据分配内存空间。

(6)编制程序与静态检查:程序结构层次简单、清楚、易懂。

(7)程序调试:利用调试软件DEBUG进行调试。

问题四:1、汇编程序与汇编语言源程序的区别? 汇编程序是汇编语言源程序经过编译后的结果

用标号是为了标记程序段,内存段,跳转位置等等

loop p ov add1可以

问题五:编程语言和汇编语言有什么区别啊 计算机语言从低级到高级可以分为:

机器语言,即由0、1组成的机器硬件可以识别的语言;

低级语言,即汇编语言

中级语言,如C语言

高级语言,如C++,JAVA,C#等。

汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,以便于理解和程序员编程。汇编语言通常用于对硬件的直接 *** 控。由于汇编语言编写的程序很小,所以通常在程序中最核心的、控制硬件的代码可以采用汇编语言编写,一方面是安全,另一方面提高运行速度。

对于计算机的初学者,应该从中高级语言学起,如c语言,vb,java等,如果你是想要学习如何编程,学习一到两门高级语言已经够用了。

如果你已经掌握了基本的编程技能,最好是可以学习数据结构和 *** 作系统以及计算机硬件的基本工作原理,以便优化你编写的程序,提高安全性和运行效率。

如果你想要从事更高级的开发工作,则可能需要学习汇编语言。

在高校中,计算机科技专业的学生汇编语言是必修课,而软件工程专业的学生则对汇编语言不做要求。

至于汇编与编程的区别是显而易见的,汇编语言是一种用于编写某些程序的语言。而编程则是程序员用某种语言编写程序的过程。

问题六:汇编语言是什么扩展名 .ASM的扩展名

问题七:汇编语言程序的开发有哪4个步骤 编辑:使用记事本,生成:*.ASM 文件。 编译:使用 MASM.EXE ,生成:*.OBJ 文件。 连接:使用 LINK.EXE,生成:*.EXE 文件。 执行:使用 *.EXE 文件。

问题八:汇编语言子程序是如何定义的? 直接jmp跳转过去,然后ret回来。

call xxx

xxx proc uses eax,esi,edi,var:ddword......

xxx endp

也可以带参数的。第二种方式格式就是这样,说白了也是jmp跳转。只是经过了编译器优化。防止程序员跳转,导致堆栈前后不对齐。

问题九:汇编语言有什么特点 汇编语言的总体特点1.机器相关性

这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

2.高速度和高效率

汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。

3.编写和调试的复杂性

由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源。这样,就不可避免地加重了程序员的负担。与此相同,在程序调试时,一旦程序的运行出了问题,就很难发现。

优点

1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。

2、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言,经常与高级语言配合使用,以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足,应用十分广泛。

缺点

1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;

2、难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;

3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。

问题十:微程序和汇编语言的区别是什么。 5分 微代码和汇编都是低级语言,但是微代码比汇编更底层。微代码和汇编都和硬件有着紧密的联系,但是对于同一产品系列的不同代产品来说,汇编可以完全相同,微代码可能有着巨大的区别,因为微代码是完全依赖于芯片内部的硬件连接。

对于同样一句C语言,在不同的处理器上会生成不同的汇编语言。每一条汇编语言的执行时间也许是一个或者两个时钟周期,甚至更多。微代码和汇编的关系,就像C 与汇编的关系,也就是说一条汇编也许会生成一条或多条微代码。所谓微代码,或者微指令,是处理器内部最小的 *** 作原语,控制着诸如门电路(gates)开关等专门动作,和组成一条指令的微 *** 作的序列。例如,对于一个加法ADD的简单动作,微代码可以决定接受哪两个寄存器或总线为输入,输出到什么总线或者寄存器里,标志寄存器要保存还是丢弃,根据条件进行跳转或者直接执行下一条微代码。一个内部只有8位宽的数据总线完全可以支持32位整数的汇编 *** 作,就是因为有微代码。

微代码原来只是用来开发计算机的逻辑控制。古老的CPU往往都是“硬连线”,每个机器指令(加法,移动)都是由电路实现,虽然有着高性能的优点,但随着指令复杂度的增长,也带来了研发和DEBUG的困难,以及电路的复杂性。微代码的出现让CPU的设计者可以通过写一个微程序的方式来实现一条机器指令,而不是设计电路来实现它。在将来的开发设计过程中,微代码可以很容易地改变,硬件电路却不可更改,否则带来的将是巨大的商业损失。这种灵活的CPU设计导致了今天日益复杂的指令集。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11641359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存