语言学结

时间:2022-08-02 22:54:38 学习总结 我要投稿
  • 相关推荐

汇编语言学结

汇编语言由三类指令组成:

1.汇编指令:机器码的助记符,有对应的助记码(类似于mov,add,inc等等)

2.伪指令:不对应机器码,有编译器执行(类似于db,dw,dd,assume等等)

3.加减乘除等符号

指令和数据是应用上的概念。在内存和硬盘上,指令和数据没有任何区别。例如1000100111011000机器码,可以翻译成数据89d8h,也可以翻译成movax,bx。

cpu要想对数据进行读写,必须和外部器件进行以下三类交互:

1.存储单元地址(地址信息)

2.器件的选择,读或写的命令(控制信息)

3.读或写的数据(数据信息)

cpu从3号单元读取数据的过程如下:

1.cpu通过地址线将地址信息3发出。

2.cpu通过控制线发出内存读命令,通知存储器芯片,将要从中读取数据

3.存储器将3号单元的数据通过数据线送入cpu

写操作类似。

地址总线:

一个cpu有n根地址线,则这个cpu可以寻址2^n个地址单元。

数据总线:

8088cpu的数据总线宽度为八,8086为十六。若传送数据89d8,8088需要两次,8086需要一次。

控制总线:

控制总线的宽度决定了cpu对外部设备的控制能力。

汇编语言学结 [篇2]

其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。

在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别 简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素

汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。在初次接触汇编的几个汇编工具时,有一种神奇的感觉,因为汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和

连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。我们在实际的调试中,最常用的几个命令有:D:显示内存单元的内容。T:单步执行。G:连续单步执行。G:连续单步执行。我们编程也只用过这几个。说到这个DUBUG我就不得不说我之前有一次的经历了。我在最后一次的上级实验的编程中我用到的是AX这种寄存器,我按照我自己的程序认真走了好几遍,找不到一点错误,但程序运行就是不对,我为此郁闷了好久。后来只有一步一步的单步调试。由于是最后一个综合实验,实验比较长,我就一直盯着AX内容的变化,经过我的苦苦等候才找到了错误,就是在DOS功能运用的时候出现了错误。也就是执行下面这条指令Mov ah 02h,int 21h,其实这两条指令中里面还包含好多的微指令,不自己亲自调试一下根本就发现不了问题。正是因为这些微指令对AX寄存器的影响所以才导致了我的错误。于是我就感觉学好汇编步进要把指令学好,还要把DEBUG学好,这样才能少走好多弯路。

学完汇编这门课我也对之前的高级语言中的一些知识有了更新的认识,能够让我们更好的理解高级语言,尤其是高级语言中的C语言,汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址指针的学习和应用中最头疼的就是在指针这个抽象的概念和实际的内存单元之间建立思维映射,而这些恰恰是我们在汇编语言学习中频繁做的一件平常事另外,对于C语言中的数据类型形参实参函数调用全局变量局部变量等概念及操作,我们都可以用汇编语言中的一些操作相关联,把这些抽象的概念和过程,通过汇编语言形成一个具体的映像,深度剖析,这样我们才能真正的学会学好C语言计算机科学的各个方面是一个统一的整体,只有多方面穿插,交互才能更好的搭建计算机知识体系,汇编语言本身还是一门很重要的应用技术。首先由于汇编的操作由于跟硬件紧密相关,所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接,更有效率!我们现在的数码产品很多,而这些数码产品赖以生存的芯片,主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是相当重要的!我想如果我们以后想从事嵌入式这方面的话汇编语言是必备的一种本领。而且我也正是想从事这一方面。我想如果想学好计算机编程技能,如果想做一名合格的编程人员,如果想在计算机编程之路走的更远,我们只有,也必须从汇编语言开始,才能完整、完善的建立计算机编程知识体系!所以对于我自己来说,要以今天的学习为跳板,为今后的汇编语言的继续学习打好基础。愿自己在计算机这条道路上越走越远。

汇编语言学结 [篇3]

8086cpu的所有寄存器都是16位的,可以存放两个字节。通常用ax,bx,cx,dx存放一般性的数据。

当存放数据多于2个字节时(加法运算后导致),寄存器存放后四个16位进制数,前一个1被排除(其实是cf的值,后面详述)

十六位进制的运算很容易,与十进制相似,例:

c5 + 93 = 158

40 + 85 = c5

abcdef分别代表10到15.

下面举一个例子:

mov al,c5h

add al,93h

现在ax中的数据为多少?

上面已经知道,c5 + 93 =158,但al为八位寄存器,只能存放两位十六进制的数据,所以‘1’被舍弃,ax中应该为‘0058h’。

有些人可能会觉得奇怪,为什么不把进位带到ah里呢?当单独使用al与ah时,两者互不关联。如果执行addax,93h的话,此时ax里应该为‘0158h’。

在进行数据传输或运算时,要注意指令的两个操作对象的位数应当一致。

例如:

mov al,20000(大于256)

以及

add al,100h(大于两位)

都是错误的指令。

物理地址是由段地址乘以16(10h)再加上偏移地址得到的。一个地址内部存储着一个字节的内容。

分段是由人为自己定出来的。编程人员根据需要,将若干地址连续的内存单元看做一个段。

段也有相对应的寄存器,这里我们先介绍cs和ip,cs为代码段寄存器,ip为指令寄存器。在任一时刻,cpu将cs:ip指向的内容当做指令执行。

我们可以通过jmp指令来修改cs、ip中的内容。

如:

jmp 2ae3:3;

jmp 3:0b16

若只想修改ip的值,可以通过寄存器来实现。

如:

mov ax,1000h

jmp ax

此时,ip就被置为1000h。

在程序中,如果设置了代码段的定义,则cs:ip自动指向代码的开头位置。

汇编语言学结 [篇4]

在接触这门课之前就已对汇编语言有所了解, 一方面是在计算机组成原理中 有所涉及,虽然那时只知道简单的 mov、add、jmp 指令,不清楚其具体用法, 缺乏系统性的学习; 另一方面是在相关书籍中了解到汇编语言写驱动比较好但比 较难,当时就觉得汇编是门很牛的语言,很想学习。接触这门课后,感到汇编语 言的确不是很容易就可以弄懂的,相比较以前学过的高级语言如

c、c++等,电 脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要 设身处地地用电脑的角度去思考问题, 这就是我们学习汇编语言时遇到的最大的 障碍。 通过这一学期的学习, 对汇编有了初步的掌握, 可以说是汇编的入门教程。 首先主要学习了汇编语言的基本知识,介绍了汇编的背景知识及由来,让我 知道了汇编语言是处在机器语言和高级语言中间的一种低级语言。 由于计算机能 够直接识别的数据是由二进制数 0 和 1 组成的代码。 所以用机器语言编写的程序 是计算机惟一能够直接识别并执行的程序, 而用其他语言编写的程序必须经过翻 译才能变换成机器语言程序,为了克服机器语言的缺点,人们采用助记符表示机 器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。 然后介绍了 8086 计算机组织,汇编的学习不仅仅是学习其语法,而更多的 是学习计算机基本的体系结构,学到这还没见到很多的指令和语句,但这是学习 汇编前必须要知道和掌握的, 只有知道了汇编的实质、 如何工作及一些基本概念, 才能进行下一步的学习。 直到后面终于学了 80x86 指令系统和寻址方式及后来的 汇编语言格式,才真正进入了汇编的指令学习阶段,每一条指令的学习虽然简单 但比较多,特别是有些指令的使用场合及错误用法等易犯错、易混淆,例如在编 写数据传送指令时,目的操作数和源操作数的类型一定要匹配,cs 不能作为目 的操作数,offset 后只能跟简单地址符号,等等。但总的归纳起来主要掌握三点: 1、 要求指令操作数的寻址方式; 指令对标志位的影响和标志位对指令的影响; 2、 3、指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令。这 样学习起来方便的多,也更容易理解记住,这为以后的学习做了铺垫。 汇编的基本指令学完后,就开始进行应用了,首先学习的是循环与分支程序 设计,第一个例子是简单的加法计算,虽然简单,却让我有点恐惧,一个在 c 语言中只要三四句就解决的问题,用汇编却写了将近 20 句,且还没有输出,也 就是不知道结果是否正确。后来学习了 dos 系统功能调用,知道 02 号功能可以 输出加法的结果,于是使用了,但输出的却是一个 ascii 码值,又需要进行二进 制到十六进制的转换,当时觉得很困惑,不知道为什么要转换,我们输入的不就 是十六进制吗,算出来应该还是十六进制啊?随着继续深入的学习,才彻底明白 为什么要转换,同时也了解了计算机中对于数字运算是如何工作的。这时发现汇 编有很多高级语言所没有的优点,它能让我们更加了解计算机内部的组织结构, 对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。一旦对

它的原理掌握后,编写程序就容易多了。后来学的越多,越复杂,程序也是越来 越长,一堆的跳转指令,觉得很麻烦,且感觉整个程序无秩序,有时对于一段程 序实现的功能还要研究半天。直到学习了子程序设计,一个过程定义对应一个功 能,就像 c 语言中的函数,很有条理性。子程序设计能让一个大程序分成几个模 块来做,提供了模块化程序设计的条件,可以节省存储空间及程序设计所花的时 间,并且在主程序中进行 call 调用,十分方便,便于以后的维护、调试和修改。 最后学习了部分宏汇编,只是简单的几个用法并没有深入,但已经为我们做 好了基础工作,便于我们自学后面的部分。宏(或宏指令)是源程序中一段有独 立功能的程序代码,只需定义一次,可以多次调用。这似乎和子程序结构很像, 但子程序有自己的优缺点,优点很明显,缺点是子程序为转子及返回、保存及恢 复寄存器以及参数的传送等都要增加程序的开销, 这些操作所消耗的时间以及它 们所占用的存储空间, 都是为取得子程序结构使程序模块化这一优点而增加的额 外开销。所以,有时,特别在子程序本身较短或者是需要传送的参数较多的情况 下,使用宏汇编更加有利。当然,在程序较复杂,实现的功能较多的情况下,子 程序也必不可少。我的理解是:子程序是调用,而宏是替换,比如一个 max 宏, 所有出现 max 的地方,都用宏代码代替。两者各有利弊,在掌握深入的基础上 结合使用更好。 还有一点十分重要,和所有的程序设计语言一样,要学好汇编语言,实验是 必不可少的环节。我深有体会:书上的程序都能看懂,基本原理也都明白,但是 在自己亲手编写程序时,却无从下手,甚至连第一句该怎么写都不知道。后来随 着老师的讲解和实验的进行,知道了程序的编写格式,包括数据段、堆栈段和代 码段,其中数据段和堆栈段可以不定义,但代码段是必不可少的,也掌握了该怎 么调试程序、运行程序等。特别是 debug 命令的使用,可以配合与 list 文件的使 用,让我们可以调试排错、检查结果是否正确等,掌握 debug 的使用对实验有很 大的帮助。程序的编写在记事本中进行即可,再在 mask 中编译,link 中连接运 行,当然也可以在专门的汇编工具中进行。通过实验,可以在很大程度上加深印 象,在书上看程序,一切都是理所当然,十分顺利,而自己动手,才会真正发现 自己的不足之处。 现在汇编语言的课程已经告一段落了,学习过程中遇到的所有困难以及遗留 的难点都需要我们在其余时间里逐步攻克,在打好基础的前提下,学习更加专业 的汇编知识来为我们所用。

汇编语言学结 [篇5]

在没有学习汇编语言以前,我可能会对汇编这门强大而又难学的程序设计语言产生怀疑,因为现在我们有那么多的高级编程语言可以学习,尤其是现在日益强大的面向对象语言。而且每种语言都要比汇编语言学起来容易,而且开发效率更高。那么我们为什么还要学习汇编,汇编这门程序设计语言的存在意义在哪。

学习了汇编语言之后,我发现我不再怀疑汇编语言的强大之处了,汇编语言是一种很强的语言,这是我以前不愿意承认的事实,它的强大在于效率。因为汇编语言要实现的是执行的效率,而不是开发上的效率,这一点可能与现阶段的那些所谓的面向对象以及其它的一些开发语言的目标不同。用汇编语言写的程序,无论是在程序的大小上还是在执行时间上都远远优于高级语言,即使这种高级语言可能使大家公认的已经比较底层的c语言。

汇编语言与其它的程序设计语言相比,操作的是更加底层的东西,它可以直接与硬件打交道,而别的语言基本不可能实现这样的功能。既然是与硬件打交道,那么我们在写程序的时候就要更加小心了,可能一不小心就会把程序跑丢了。如果我们不能够控制程序的正常逻辑,那么程序运行超出我们的控制范围以后,到底会运行到哪里,我们也无从知晓。比如说我们本来是要操作一个用户内存地址空间的数据,但是有时我们会不注意,程序运行到了内核内存地址空间去了,那么这样的程序肯定要面临崩溃了。幸好我们现在使用的是虚拟模式下的汇编语言编程,不用去考虑那么多的问题,大不了重新启动一下资源管理器,要不然电脑还不知道会崩溃多少次。

与汇编语言相比,高级语言在这方面做的就很不错了,毕竟我们在写高级语言代码的时候,没有直接对底层的硬件进行操作,而先与操作系统打交道。至于操作硬件,那是操作系统的事情了,这样我们可以在一定程度上少犯错误,而且与此同时可以减少花在调试程序上的时间,提高了开发效率。但是这并不代表不会出现问题,用高级语言写程序,有时也会出现这样或者那样的问题。而且出了问题,我们可能更加无所适从,因为我们有时不知道语言内部是如何实现交互的,我们也不可能了解每种解决方案的实现细节。汇编语言的另一个优势就是我们必须很清楚我们写的代码是干什么的。这是因为这样,我们写出来的代码没有太多的无用代码,几乎每一句代码都为我们实现了某些实质性的操作。同时由于汇编语言直接操作底层硬件,所以不会像高级语言那样,需要一大堆的代码先和操作系统交互,然后操作系统再操作硬件逻辑。高级语言产生的程序之所以非常大且臃肿还有一个原因是它要包含一些程序集之类的东西,可能一个程序集里面我们只需要某一点,但是在编译、连接产生应用程序的时候,高级语言却将一个很大的程序集包含进来(比如说#include <stdio.h>),这使得我们的程序与汇编语言相比变得很臃肿,而且真正有用的东西并不是很多。学习汇编语言我认为还有一个好处就是使我们对于一些底层的东西更加了解和熟悉,知道在程序运行的过程中,操作系统和内存里面到底在发生着些什么事情,这样更加有助于我们加深对于程序设计的理解。

通过汇编语言的学习,我认为自己学到了很多东西,可能有的时候对于一些内存里发生的事情还不是很清楚。但是即使这样,现阶段学到的这些东西已经很有助于我对于操作系统和组成原理方面的一些内容的理解了。其实学习一门语言,有时感觉一是在学习他的语法上的内容,另一方面可能也是在学习它的一些思想。汇编语言对于语法的严谨性让我们在思考问题的时候变得思维变得更加严谨、缜密,而不再是仅仅的想象一下就罢了。

【语言学结】相关文章:

助研实结08-06

c语言学习心得03-20

英语语言学复习资料01-27

大学c语言学习心得03-22

如意结的编织方法07-07

妇联工作总 结08-05

学结自我评价08-06

生化科室实结08-06

生产参观实结08-06

生产调度实结08-06