汇编语言范文

时间:2023-03-04 22:17:25

汇编语言

汇编语言范文第1篇

Abstract: Assembly language is machine language, which is difficult to understand because it is far from natural language. In order to improve the teaching effectiveness of assembly language programming, this article gives the interpreted analysis which is confused and difficult to understand.

关键词: 指令;伪指令;中断;寻址方式

Key words: instructions;pseudoinstruction;interrupts;addressing mode

中图分类号:TP312 文献标识码:A文章编号:1006-4311(2014)23-0227-02

1概述

汇编语言不同于其它高级语言,必须要求编程人员有一定的硬件基础,如对CPU的结构、CPU与存储器等部件的数据传送过程必须要有基本的了解,这样才能学好这门课程。在教学过程中,教师发现学生对高级语言编程学习积极性高,对汇编语言课程缺乏兴趣,但因为课程本身指令复杂,规定繁多,再加上学习汇编指令前对CPU的相关工作过程理解不透,导致学生厌学,又由于本课程面对的低年级学生只有高级语言的基础,习惯于高级语言的自然表达,初次接触计算机硬件知识心理上有恐惧感,更难以适应繁杂的低级语言。本文用比较的办法,通俗易懂的自然比喻对这门课中易混淆的,较难理解的概念予以解释分析。

2指令性语句与伪指令语句的区别

例如:ADD AX,10+5经过汇编变成ADD AX,15,10+5的运算汇编阶段完成,AX和15的加法运算要等到运行阶段才能完成,汇编阶段能实现的运行阶段一定能实现,上述+运算可变为ADD AX,10;ADD AX,5两句实现。运行阶段能实现的,汇编阶段不一定能实现,如 ADDAX,BX+CX;程序还没有运行,汇编阶段不可能知道BX,CX的值,更谈不上计算二者之和。

再如以下用汉语表示的程序,要翻译成英语,看看伪指令语句如何指导汇编过程:

以下是黑体,2号字,居中 ;指导汇编

通知 ;翻译

以下是宋体,3号字,首行缩进 ;指导汇编

今天下午开会…… ;翻译

以下是楷体,4号字,右对齐 ;指导汇编

特此通知 ;翻译

3宏指令与子程序的区别

4子程序和中断服务程序的区别

5CALL、INT、硬中断的区别

可以看出,INT既有CALL的特点(可预知),又有硬中断的特点(中断类型码转换成入口地址),介于二者之间,故称INT指令为软中断指令(由软件指令INT发出的中断)。

6=与EQU的区别

7LABEL、THIS、PTR的区别(见表6)

8段地址、段内地址、物理地址的关系解析

为了说明段地址、段内地址、物理地址三者之间的关系,下面举例说明(表7)。

9SF􀱇OF=1表示两个有符号数是小于关系解析

溢出,就是放不下,一旦溢出结果一定是错的。例如两个瓶子容量各是5斤,一个装了3斤水,一个装了4斤水,理论上讲,倒在一个瓶子应该是7斤,但全部倒在一个瓶子后,成了5斤,2斤溢出,不能说3+4=5,所以一旦溢出结果一定是错的。异号相加,越加越少,原来放得下,加了之后一定放得下,故绝对不溢出。同号相加,越加越多,原来放得下,加了之后不一定放得下,故有可能溢出。若溢出OF=1,正数加正数应该是正数,应该SF=0,但若结果SF=1,正数加正数是负数,SF=1是错的(假的符号位)。同样道理,负数加负数应该是负数,应该SF=1,但若结果SF=0,负数加负数是正数,SF=0是错的(假的符号位)。

10结束语

总之,汇编语言是计算机程序编写中最经常用的一种必要程序语言,投入汇编语言领域更多的研究与开发关注也是十分必要和有益的。

参考文献:

[1](美)布鲁姆著.编语言程序设计[M].马朝晖,译.北京:机械工业出版社,2006.

[2]全选悦,赵焕平.汇编语言的教学改革和思考[J].福建电脑,2008(2).

汇编语言范文第2篇

一、变量与函数的相互调用

c语言可以调用汇编子程序和汇编语言中定义的变量。但要注意由于。编译后的目标文件自动地在函数名和变量名前加一个下划线,所以在汇编语言中调用C语言的函数和变量时,应在函数名和变量名前加一下划线。在汇编语言程序开始部分,应对调用的函数和变量用EXTERN加以说明。

二、调用者与被调用者的参数传递

这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,即从右到左自动依次压人堆栈;将所有参数压人堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压人堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。进人汇编子程序后,为了能正确获取主调程序并存人堆栈中的数据,被调的汇编子程序先后要做如下一些工作:

l、保存sp的副本进人汇编子程序后,子程序中免不了要有压栈和出栈的操作,故sP时刻在变化。为了能用SP访问堆栈中的参数,安全办法是一进人子程序后,先为SP制副本,以后对传递参数的访问都用副本进行。一般可用BP保存SP,如:pushbPmovbP,sp

2、保留数据空间如果汇编子程序中需要一些局部数据,可以简单地减小SP的值,以便在栈空间中保留出一段存贮区,用于存放局部数据,该区域须在子程序结束后恢复。如下语句可以保留一个局部数据区:pushbPmovbP,spsubsp,spaee;设spaee=4如上语句段中,SPACE是局部数据的总字节数。在以后的应用中,由于SP是变化的,而BP是固定的,用负偏移量可以存取局部变量。上例利用BP及偏移量,将两个字的局部数据初始化为0。

3、保留寄存器值如果在被调子程序中用到sI、DI等其它寄存器,则应先把它们压人堆栈,以保留寄存器原值。例如,下例就是将SI和DI寄存器的值压栈:pushbpmoybp,SpsubSp,sPaeePush51Pushdi

4、获取传递参数BP保留了SP在参数传递完并将BP压栈后的一个副本,利用BP可以很方便地访问各参数。现假设调用了名为funcl汇编程序模块的主函数:maln(){……fund(pl,pZ,p3);……}。各参数都是2字节的整数值,返回地址retumaddress,在小模式编译方式共占用2个字节。如果要将传递的参数p卜pZ、p3取出,并分别赋给bx、Cx、dx寄存器,可由下列语句完成这一功能:movbx,[bp+4jmovcx,[bp+6]movdx,[bp+8〕

5、子程序返回值当子程序的执行结果需要返回时,根据返回值的字长,c按如下约定接收返回值:1字节在AL寄存器中;2字节在Ax寄存器中;4字节则高位部分在Dx中、低位部分在Ax寄存器中。C可从这些寄存器中取出返回值。

汇编语言范文第3篇

关键词:存储空间图;间接寻址;一级指针;二级指针;存储单元

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-31093-03

A Discussion about the Relation of C Language Pointer and Assemble Language Indirect Addressing――Giving Analysis from the Storage Space Digraph

WANG Hai-yan

(Computer Science Department of Suqian College, Suqian 223800, China)

Abstract: C language is a user-oriented procedural language. Pointer is the most flexible part in this language. Assemble language is a language which is processor-oriented and there is no definite conception of pointer, but the similar conception of pointer emergences everywhere. In this paper, it present the application of pointer in assemble language through indirect addressing mode. Depending on the storage space digraph and the relation between pointer of C language and indirect addressing of assemble language, it makes it easier to understand the application and relation between the two languages.

Keywords: Storage Space Digraph; Indirect Addressing; Pointer; Second Rank Pointer; Storage Unit

1 引言

作为最基本的编程语言之一,汇编语言的重要性勿庸置疑,即使是 Linux 程序员有时也需要使用汇编语言解决实际问题,理由很简单:精简、高效和 libc 无关性。假设要移植 Linux 到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。我们常说汇编语言的抽象是C语言, 而C语言中最灵活是C语言中拥有“指针”这个数据类型。那么汇编语言和C语言中的指针有什么样的关系呢?我们也知道在汇编语言中,几乎所有对内存的操作都是对给定地址的内存进行访问来完成的,那么在汇编语言中,绝大多数操作也必然和地址(即指针)产生或多或少的联系。汇编语言和CPU以及内存,端口等硬件知识是连在一起的。汇编语言中存储数据的地方不仅有寄存器而且还有存储单元,更多的数据则保存在存储单元中。因此,对编程人员而言,他肯定迫切地希望访问内存,以保存

更多的数据,本文将重点阐述访问数据的方式。

2 存储空间图的概念

画一个图形,或者观察一个图形,能帮助我们把复杂的程序设计具体化、形象化,有利于掌握程序之间的内在联系,从而更好的理解程序,激发大家对程序设计语言的兴趣。本文用形象的图形解释C语言中指针以及汇编语言中间接寻址方式之间的相互关系。文中运用类似于存储空间图的方法对两门语言进行解释。说它类似于存储空间图是因为这种图形没有用真正二进制描述空间的值和空间的地址,姑且我把这种图形叫做存储空间图。

3 两门语言之间的内在联系

我们知道在计算机中,所有的数据都是存放在存储器中的,访问数据的方式并不是唯一的。在C语言中访问单元数据有两种常见方式,一是通过名字直接访问单元数据;二是通过指针访问单元数据。直接通过单元名字访问数据,两种语言都很简单,我在这篇文章中不加以阐述。接下来我就分一级指针和二级指针分别阐述汇编语言和C语言是如何间接访问内存单元数据,又是以怎样的形式加以表现的。

3.1 C语言中的一级指针和汇编语言中一次间接寻址的联系

3.1.1 C语言中一级指针定义

指针定义形如:数据类型 *指针变量,它的存储空间图表示如下:

图1中X就是一级指针,Y是一个整形变量,X、Y的本质区别在于X单元的值是用于存放内存单元的地址,Y单元是存放任意类型的数据。X之所以指向Y,是因为Y单元的地址赋予了X,同时X所指向的类型和Y同类型。

图1

3.1.2 汇编语言中的一次间接寻址是指通过寄存器或存储单元一次间接寻找操作数。

它的存储空间图表示如下:

图2中si是cpu中的一个寄存器,si中存放着Y所在单元的地址,Y是一个单元的名称,Y单元存放着普通操作数,si之所以指向Y,是因为Y单元的地址赋予了si。

图2

图1、图2中X和si都是用于存放内存单元的地址,我们从中可以得到启迪,汇编语言中也存在着类似C语言的指针。

3.1.3 以下从编程角度深入探悉二者之间的联系。

例1 用C语言指针的方法输出a单元中的数据:

main()

{int a=3,*p;

p=&a

printf("%d",*p); 3

}

例2 用间接寻址方法把a单元中的数据送往al寄存器中:

data segment

a db 3

data ends

……

lea si, a

mov al, [si]

……

以上程序均是操作存储单元中的数据,但都不是通过单元名字操作的。例1用C语言中一级指针的方法,例2用汇编语言中的寄存器间接寻址的方法。那么二者有怎样的联系呢?为了讲清楚这个问题,我把这两个程序分别用以下存储空间图表示:

图3 C语言编程的存储空间图图4 汇编语言编程的存储空间图

上图中p和si其实质都是一级指针,在C语言中是用指针指向的内容,即用*p的形式来取得单元的数据,而汇编语言是通过寄存器一次间接寻址方式来取得单元内容,当然这都要求指针p和寄存器si首先获得单元的地址。(p=&a/lea si, a)。

3.2 C语言中的二级指针和汇编语言中二次间接寻址的联系

3.2.1 C语言中二级指针的定义。

指针定义形如:数据类型 **指针变量,它的存储空间图表示如下:

图5中X相对与Z这个变量是二级指针,它和一级指针的区别在于X这个指针所指向的内容仍然是某个单元的地址(图中是Z单元的地址)。要想输出Z单元的内容,则需要通过两次指向才能完成。

图5

3.2.2 汇编语言中二次间接寻址是指通过寄存器或存储单元两次间接寻找操作数。

它的存储空间图表示如下:

图6中si其实就等价于图5中定义的X,都是二级指针。但在汇编语言中si是一个指针寄存器,无论是作为一级指针还是作为二级指针,我们在使用的时候都是不需要定义的。事实上汇编语言中根本没有一级指针和二级指针的定义,也就是说汇编语言中没有C语言中定义上的繁琐,但你仍可以用C语言的思想来解释汇编语言中的指针问题。

图6

3.2.3 以下从编程角度深入探悉二者之间的联系。

例3 输出以下字符串

main()

{char *p[] = {"ab", "cd", "ef"};

char **sp = p;

int i;

for(i=0; i

printf("%s", **(sp+i));

}

图7 C语言编程的存储空间图

例4 累加数组array中元素和的程序段

data segment

array dw 10,20,30,40,50,60,70,80,90,100

count dw 10

sum dw?

table dw 3 dup(?);地址表

data ends

code segment

main proc far

assume cs:code, ds:data

start:push ds

……

mov table, offset ary

mov table+2, offset count

mov table+4, offset sum

mov bx, offset table

call proadd

ret

main endp

proadd procnear

……

mov si, [bx]

mov di, [bx+2]

mov cx, [di]

mov di, [bx+4]

xor ax, ax

next: add ax, [si]

add si, 2

loop next

mov [di], ax

……

proadd endp

code ends

end start

图8 汇编语言编程的存储空间图

以上程序均是通过两次操作才找出单元中的数据,前者是用C语言中二级指针二次指向的方法,后者是用汇编语言中的两次间接寻址的方法寻找操作数。从上图可知这两门语言的内在联系,即两门语言最终都是通过指针两次寻址来访问操作数。所不同的是:前者是二级指针的概念,后者是两次间接寻址。这种本质相同,只是语言描述上有所不同的概念,从存储空间图的视角可以帮助我们更好的理解他们之间的联系。

依此类推,对于多级指针的学习,我们也可以借助存储空间图来帮助我们更好的分析程序,理解程序,对于一些复杂的问题给予简化,对于不同语言之间的关系我们也能进行更好的深入思考。

4 结束语

本文通过存储空间图深入浅出的探悉了两门语言在寻找数据方面的联系。可以说C语言的指针和汇编语言的寻址方式一直困扰着很多编程者,尤其对二级指针、二次间接寻址的理解及运用更加困难。文中的例题均以最简单的题型来说明这些深奥的道理,而且从存储空间图的视角分析了二者之间的联系。相信这篇文章,不仅能帮助我们运用存储空间图解释问题、分析问题,而且能帮助我们更好的思考不同语言之间的联系,更好的去思考程序设计。

参考文献:

[1] 裘宗燕. C++程序设计语言(特别版). 北京机械工业出版社, 2002.7.

[2] Standley B.lippman. C++ Primer中文版. 人民邮电出版社,20006.3.

[3] 谭浩强. C程序设计(第二版). 清华大学出版社出版,2005.6.

[4] 钱能. C++程序设计教程. 清华大学出版社, 2005.5.

[5] 沈美明. IBM PC汇编语言程序设计. 清华大学出版社,1993.9.

[6] 钱晓捷. 汇编语言程序设计. 电子工业出版社,2003.

汇编语言范文第4篇

一、变量与函数的相互调用

c语言可以调用汇编子程序和汇编语言中定义的变量。但要注意由于。编译后的目标文件自动地在函数名和变量名前加一个下划线,所以在汇编语言中调用C语言的函数和变量时,应在函数名和变量名前加一下划线。在汇编语言程序开始部分,应对调用的函数和变量用EXTERN加以说明。

二、调用者与被调用者的参数传递

这种数据传递通过堆栈完成,在执行调用时从调用程序参数表中的最后一个参数开始,即从右到左自动依次压人堆栈;将所有参数压人堆栈后,再自动将被调用程序执行结束后的返回地址(断点)压人堆栈,以使被调程序结束后能返回主调程序的正确位置而继续执行。进人汇编子程序后,为了能正确获取主调程序并存人堆栈中的数据,被调的汇编子程序先后要做如下一些工作:

l、保存sp的副本进人汇编子程序后,子程序中免不了要有压栈和出栈的操作,故sP时刻在变化。为了能用SP访问堆栈中的参数,安全办法是一进人子程序后,先为SP制副本,以后对传递参数的访问都用副本进行。一般可用BP保存SP,如:pushbPmovbP,sp

2、保留数据空间如果汇编子程序中需要一些局部数据,可以简单地减小SP的值,以便在栈空间中保留出一段存贮区,用于存放局部数据,该区域须在子程序结束后恢复。如下语句可以保留一个局部数据区:pushbPmovbP,spsubsp,spaee;设spaee=4如上语句段中,SPACE是局部数据的总字节数。在以后的应用中,由于SP是变化的,而BP是固定的,用负偏移量可以存取局部变量。上例利用BP及偏移量,将两个字的局部数据初始化为0。

3、保留寄存器值如果在被调子程序中用到sI、DI等其它寄存器,则应先把它们压人堆栈,以保留寄存器原值。例如,下例就是将SI和DI寄存器的值压栈:pushbpmoybp,SpsubSp,sPaeePush51Pushdi

4、获取传递参数BP保留了SP在参数传递完并将BP压栈后的一个副本,利用BP可以很方便地访问各参数。现假设调用了名为funcl汇编程序模块的主函数:maln(){……fund(pl,pZ,p3);……}。各参数都是2字节的整数值,返回地址retumaddress,在小模式编译方式共占用2个字节。如果要将传递的参数p卜pZ、p3取出,并分别赋给bx、Cx、dx寄存器,可由下列语句完成这一功能:movbx,[bp+4jmovcx,[bp+6]movdx,[bp+8〕

5、子程序返回值当子程序的执行结果需要返回时,根据返回值的字长,c按如下约定接收返回值:1字节在AL寄存器中;2字节在Ax寄存器中;4字节则高位部分在Dx中、低位部分在Ax寄存器中。C可从这些寄存器中取出返回值。

汇编语言范文第5篇

关键词:汇编语言;开发环境;JavaSwing

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)31-7485-04

现在通用计算机体系结构仍然采用的是冯·诺依曼提出的思想,把程序存储到内存中,数据的存储格式采用二进制的方式;然而软件的发展比硬件的发展要快,它的发展主要体现在编程语言上面,面向机器的机器语言,这种语言只有少数研究人员才懂,很难记忆,而且很难查错;汇编语言,汇编语言比机器语言高级,通过伪指令的方式进行表示指令的意义,更容易记忆,相对来说,更容易看懂;面向过程的语言,典型的是C语言,至今仍然是最受人欢迎的语言,在世界排行榜上至今位居榜首,主要是进行系统级的开发,现在的嵌入式系统主要使用的语言就是C语言。然后就是面向对象的语言,典型的是C++,Java,C#,更加接近人类的思考方式的语言,相对来说更容易掌握。

然而汇编语言是唯一能够直接操纵硬件设备,并且效率高的一门语言;汇编语言的实时性能很高,在一些简单,实时性要求很高的嵌入式产品上仍然采用汇编语言进行编码。所有的嵌入式产品的启动代码都是汇编语言写的,汇编语言是不可被替代的。汇编语言的学习对于一个学习计算机的人来说是至关重要的,懂不懂汇编语言,是衡量计算机专业人员的的一个重要指标。汇编语言的核心就是计算机的体系结构,寻址方式,指令系统,计算机中数的表示方式,计算方法,计算机的指令运行流程等;对于追求高效的程序员来讲,这是必修课,是不可缺少的利器。然而,汇编语言的学习是很困难的,首先困难的地方就是一堆的指令,很难在短时间内记住。然后就是编译的过程很繁琐,需要使用几个不同的工具,一步一步的生成可执行文件。在这个过程中使人慢慢的就失去了信心,觉得太难,不学了,甚至对编程都失去了兴趣。

从Windows划时代的图形界面的推出,这种人机界面的交互方式逐渐被广泛接受。在Windows上的很多编程语言都推出了具有图形界面的集成开发环境,C/C++的vVisual Studio系列,JAVA的eclipse,进行嵌入式开发的交叉编译环境如Keil,IAR等。对于汇编语言的集成开发环境,已经存在,但是一般都是具有专利的,而且需要付费才能使用,有些不需要付费,但是界面不够简洁,一个纯粹的编译环境,不具备有关键字汇编指令提示信息,查找汇编指令的内容,没有对关键字进行颜色区分,颜色很单调,对于编写的汇编代码没有记忆功能,如果需要查看之前写的代码,需要重新加载,操作很繁琐,不是很方便。介于这些原因,开发一款免费的,适合于广大的对计算机充满热情的,打算学习汇编语言的人的系统成为一个重要的课题。这个系统具有编程语言的集成开发环境所具有的一般特点,能够进行代码的编辑,能够阅读纯文本,后缀名为.c、.cpp、.asm等格式的源代码,能够对进行阅读的文件进行修改,并能够进行保存,能够新建一个文件,并生成汇编的一般模版格式,减少用户编码不必要的工作,能够对编写的源码进行编译生成.obj目标文件,并且通过连接所有的目标文件生成最终的可执行文件。而且能够进行单步调试,兼容debug的命令,为用户以后的学习打下基础,并且能够编写学习文档,能够生成一个word的文档,记录学习汇编语言的点滴历程,增强用户学习汇编语言的信息,记录下重要的,经常出错的学习点,为以后出现的错误提共查错解决问题的依据。

2 系统功能分析

汇编语言范文第6篇

关键词:汇编语言;程序设计;实践教学

作者简介:钟小勇(1964-),男,江西遂川人,江西理工大学理学院,教授级高级工程师;张小红(1966-),女,河北昌黎人,江西理工大学信息工程学院,教授。(江西?赣州?341000)

中图分类号:G642.0?????文献标识码:A?????文章编号:1007-0079(2012)29-0097-02

“汇编语言”课程是计算机科学、自动化及电子信息类专业的一门核心专业课程。[1-2]对于计算机及其相关专业的学生来说,汇编语言程序设计是需要掌握的重要专业基础知识之一。了解和熟悉汇编语言可以优化学生的知识结构,提高学生的认知水平,增加学生的程序开发手段。相较于快速发展的可视化高级语言,作为低级语言的汇编语言,可读性较差,比较繁琐,不符合自然语言表述,学生普遍感到难学。因此,“汇编语言”课程如何优化教学质量、提高教学效果,是任课教师面临的一个重要问题。[3]本文结合实际教学体会,就如何提高“汇编语言”课程教学效果进行了分析与探讨。

一、汇编语言程序的特点

计算机是一个编码的世界,只能识别和处理由“0”和“1”组成的二进制代码的机器语言,这种指令代码编写易出错且不易修改。于是,人们发明了“指令的助记符”,用助记符(Mnemonic)代替操作码,用标号(Label)和地址符号(Symbol)代替地址码,用这种符号系统形成汇编语言。[4]因此,汇编语言本质上就是机器语言,只不过更容易被人读懂且更容易记忆。使用汇编语言编程,可以对计算机内部硬件进行直接控制,合理地安排机器内部的各种资源。归纳起来,汇编语言程序有以下几个主要特点:

一是与硬件的相关性。汇编语言与机器指令一一对应,不同类型的CPU内部硬件结构不同,因而有不同的指令系统,相应的汇编语言程序也就不同,其通用性、可移植性比较差。二是执行效率高。由于汇编语言与硬件相关,它可以有效、直接地控制机器,程序的执行代码短、速度快,是其他高级语言难以企及的。三是编程、调试相对困难。为了有效地控制机器,汇编语言指令涉及到硬件资源的各种细节,如标志、堆栈、寄存器、存储单元等。相对高级语言,其编程及调试比较繁琐、复杂。[5-6]

二、明确教学目的,优化教学内容

1.激发学生的学习热情

“汇编语言”与许多课程联系紧密,如图1所示,它是“操作系统”、“计算机接口技术”、“计算机组成原理”、“嵌入式系统”等课程的基础,在开发嵌入式系统时更是必不可少的语言。“汇编语言”课程学习起来比较枯燥、学习周期较长,不像高级语言那样上手比较容易且能很快见到效果。因此,应教育学生少一些急功近利的思想,应着眼于长远的、全面的技术成长。有条件的教师可以将自己相关的科研成果带入课堂,说明汇编语言有着广泛的应用领域。在授课过程中,注意拓宽学生的知识面,结合具体的应用,激发学生的学习热情。

2.优化教学内容

不同于高级语言的教学模式,汇编语言是一种硬件编程语言,是连接软硬件的桥梁。一方面,汇编语言与芯片密切相关,学习汇编语言时应具备一定的硬件基础知识,需要时穿插相关知识点,回顾前导课程的相关内容,如计算机结构等;另一方面,又不需要紧跟着产品来讲授,只要选择一种典型的汇编语言指令集讲清楚、讲透彻,使学生掌握学习与思考的方法,今后遇到其他的芯片,也就可以举一反三,触类旁通。

具体到一种汇编语言指令集,应突出其重点、难点,如分段管理技术、寻址方式、堆栈管理、中断技术等。为了便于后续程序结构的学习,在学习寻址方式和指令集时就教会学生使用debug,讲解了常用的调试命令,使学生能尽快上机实践,验证指令,编写短小程序,看到运行结果,从而加深影响,巩固所学的内容。由于汇编语言的指令很多,涉及的知识点抽象,刚开始接触这门课程时,学生往往不太适应,前后的知识点容易混淆,教师应及时对讲授过的内容进行比较与小结。课堂上,应适当增加讲授例题的数量,不同的教学阶段,例题的侧重点不一样。开始阶段,例题主要涉及汇编语言格式与汇编语言指令;中间阶段,例题讲授的是如何用汇编语言指令实现汇编语言流程;后续阶段,例题重点讲解汇编语言程序设计算法的确定,分析、解决问题的思路与方法。而在学生掌握了基本内容及重点内容的基础后,教师应提纲挈领,从系统的整体角度分析“汇编语言”课程在整个硬件知识体系中的作用,让学生从更高层次理解、使用汇编语言。

3.多种教育手段相结合

随着现代教育技术快速发展,多媒体技术在教学中有着广泛的应用。在“汇编语言”课程中,可以利用多媒体课件图文并茂的特点吸引学生的注意力,活跃课堂气氛。例如,可以通过动画形式将寻址过程、堆栈变化、循环移位、子程序调用、中断调用过程等表示出来,将复杂的、抽象的问题简单化、形象化,提高教学效率。而在确定汇编语言程序设计的算法,用汇编语言实现编程,培养学生的推理、思维能力时,采用传统教学方法。对不同的知识点,结合不同的教学方法,有利于学生对不同教学内容的理解与掌握。

三、注重实验环节,提高教学效果

1.实验平台及实验内容

汇编语言程序设计要经过编辑、汇编、连接和调试等过程,如图2所示,传统的上机实验一般是在DOS操作系统环境下进行的。目前流行的是Windows操作系统平台,学生对DOS操作环境相对陌生。为了提高上机的效率,应摒弃DOS环境,采用基于Windows操作系统的汇编语言集成实验环境。在该环境下,可以方便编辑汇编语言程序,使用下拉式菜单或快捷按钮进行汇编、连接及调试等工作,并可以预先设定段定义、过程定义等。

汇编语言范文第7篇

【关键词】FORTH 汇编语言 中断程序

1 引言

汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列,所以汇编语言一直是计算机学科必学的一门基础课程。通过这门课的学习既能获得底层编程的体验,又能深刻理解机器运行程序的机理。FORTH是一种与众不同的计算机程序设计语言,采用自底向上的构造方式,用汇编语言编写核心单词,实现内部数据结构和解释/编译机制,构造最小的系统,然后将该系统运行在宿主机上,进而编译的其它高层单词,形成一个完整的系统。

本文是在研究了FORTH的自生成技术的基础上,自定义了一套汇编语言语法,并且构造出将自定义汇编语言转换为CPU机器码的编译器,讲解了自定义汇编语言的基本使用方法,最后以中断程序为例,介绍了自定义FORTH汇编程序的实现方式。

2 FORTH汇编语言和编译器的实现方法

基本的FORTH平台内不含产生机器码的汇编语言编译器,只是将一个用FORTH语言写的汇编语言编译器的源代码作为附件。一般我们可以使用这个编译器,但也可以自己按照自己的习惯构造自己的语法和编译器。

实现编译器,首先要制订语言规范。由于FORTH汇编语言并没有权威的规范,甚至有些要开发的目标芯片就还没有汇编语言标准可以借鉴,因此程序开发者完全可以编写自己的编译器和创造自己的规范。FORTH汇编语言的语法规范是模仿常用的汇编语言,只是将表达式写成“逆波兰”形式,即将操作符写在操作数后面。以8086汇编为例,将AX减去BX的内容,结果在AX中,标准的汇编语言为:SUB AX, BX ,在FORTH汇编语言规范中可以模仿标准的汇编语言规定为:AX, BX SUB,也可以采用这种写法:BX AX SUB,,不仅逗号移到了操作数那里,而且目的操作数也移到了右面。虽然FORTH汇编语言规范存在这种任意性,但如果存在标准的汇编语言,除了将操作符写在右面,还是尽量保持标准的风格,这样容易和别人交流。

实现FORTH汇编编译器,主要利用FORTH字“C,”、“,”和“Here”,它们分别是向程序区依次放一个字节的二进制指令、两个字节的二进制指令和给出存放下一个指令的地址。

以8086为例,无操作数的中断返回指令IRET,可以这样实现:

语法: IRET

实现: : IRET CF C, ; //将IRET的机器码CF一个字节放到当前的指令流中

单操作数的跳转指令JMP,可以这样实现:

语法: LLLL JMP //LLLL定义了转跳的地址

实现: : JMP E8 C, ,;

同样上面实现的FORTH含义是将JPM的机器码E8一个字节放到当前的指令流中,然后再把已经在堆栈中的要跳转的地址作为16位偏移放到机器码E8之后,形成完整的跳转指令。

通常每个FORTH软件平台都有这个平台的汇编语言规范和编译器,但是如果要生成异构的FORTH系统,重新制定新CPU的汇编语言规范和编译器就是必须要完成的任务。

2.1目标代码的存取

由于一般FORTH目标系统的核心规模较小,16位的系统不超过64KB,32位的系统也用不完内存空间,因此可以直接在宿主机FORTH系统管理的内存中划出一块高内存区域用于目标代码的存取。假如P!和P@是原内存的写入和读取字,目标代码区域的起点是C000,则目标代码的存取字可以简单的定义为下面的算法:

C000 CONSTANT Origin

// 定义常数 Origin,它的值是目标代码区域的起点

: ! Origin + P! ; : @ Origin + P@ ; // 定义目标区的数据存取字

同样也可以产生按字节的存取字C!和C@。

2.2 机器码写入

汇编语言所产生目标机的机器码是顺序存放的,其中跳转指令是代码的当前位置参考计算的,因此可以设置一个当前代码地址指针CP实现:

Variable CP : Here CP @ ; // Here字给出下一个机器码存放的地址

: C, Here C! CP @ 1+ CP ! ; // 放一个字节的机器码到目标区

: , Here ! CP @ 2+ CP ! ; // 放一个16位字的机器码到目标区

有了这些FORTH字,可以不用助记符和汇编,直接把二进制代码一个字节一个字节地生成目标码。

2.3 向前跳转地址

机器码中最重要的指令就是根据条件进行转移的指令。由于FORTH语言的工作过程是按照输入流一个字、一个字顺序解释执行的,因此向前转移时目的地址是已知的,实现起来比较简单:以目标地址为值定义一个常数,然后在生成转移指令时引用它。

汇编语言范文第8篇

汇编语言程序设计是高校计算机专业的一门必修课,是组成原理、操作系统和信息安全等核心课程的先修课程。汇编语言使用指令助记符,使机器语言易学和易懂。相比高级语言编程,汇编语言程序运行效率高、可直接控制硬件,但是需要深入了解硬件,编程效率低,并且每种计算机的汇编语言编程结构不尽相同,上手较慢,降低了学生的学习兴趣,教学效果也随之下降。因此,需要对汇编语言教学现状进行剖析,并提出相应的改革措施。

1 汇编语言程序设计教学存在的论文联盟问题

目前,汇编语言课程教学过程中存在以下问题。

1.1 教学内容相对陈旧,缺乏实用性

目前,很多高校的汇编语言教学还是基于十六位机,多采用清华大学出版的沈美明《ibm pc汇编语言程序设计》一书。其中,cpu内寄存器主要是16位,内存空间只有1mb,且只能在实模式下进行内存管理。而在目前的计算机技术发展环境下,内存空间以gb计算,传统的16位汇编语言教学模式明显滞后于现今的主流技术,学生学习时会觉得学过即淘汰,学习积极性较低[1]。

1.2 教学方法基本上还是采用常规的灌输式的教学方法

课堂讲授按照书本一章一节进行,知识点相对零散且枯燥乏味,难以在学生脑海中建立对语言的整体认识。特别是对于掌握了计算机基础知识和计算机语言知识的学生,在讲授汇编语言程序设计时仍延用常规的方法,不利于学生掌握大型汇编语言程序设计方法。

1.3 实验环节重视不够,实验教学方法单一

目前的实验安排都是围绕如何消化课堂内容展开,实验环节相对孤立且模仿性强,难于锻炼学生的综合问题解决能力;实验课只是布置任务让学生自己做,较少关注创新思维的培养。

2 教学改革措施

针对汇编语言程序设计教学中存在的问题,从以下方面进行了教学改革尝试。

2.1 更新教学内容

为了适应硬件系统32位大环境,让学生学有目标,需要更新汇编语言的教学内容。在16位汇编语言基础上,适当增加32位汇编语言程序设计内容,具体包括:编程结构、寻址方式和指令系统。编程结构是汇编语言程序设计的着陆点。当前,winxp等主流操作系统都工作在保护模式下,在讲授实模式编程结构基础上,再介绍保护模式的编程结构,学生会感觉新颖实用。其次,32位汇编语言的寻址方式类型和操作数位数都大为增加。再次,32位汇编语言的指令系统多达300多条指令,其源代码的数量、速度、占用的内存资源都有了质的飞跃。因此,学习32位汇编,可以深入了解操作系统运行细节,并增加学生的学习兴趣。

2.2 案例教学法的使用

常规灌输式的教学方法下,教师对语法规则和指令系统逐个进行讲解,学生仅仅是被动、机械和强制的记忆,学习后面知识点时,容易忘记前面相关知识点。而使用案例教学法,通过简单实例引出枯燥的语法规则和指令系统,让学生即学即用,便于知识的前后衔接和呼应。案例教学的主要步骤包括:(1)案例设计和准备;(2)章节重点难点讲解;(2)学生分析案例;(4)教师分析和总结案例;(5)上机验证并完善案例。在不断变化和扩充的案例中,使学生有充分的空间思考所学内容,也易于引出新知识点,使得教学内容具有连贯性,有利于学生提高自信心并系统理解和掌握汇编语言。

2.3 精心安排实验及实验教学方法[2]

汇编语言的实验内容主要包括以下内容:调试工具debug的适用、汇编语言程序设计的上机过程、基本程序结构设计、子程序设计和中断调用,此外还可以让学生了解汇编语言与高级语言的连接,时间允许的情况下,还可以设计综合实验。实验教学中,可以采取演示法、模仿法和对比法相结合的教学模式。老师借助多媒体演示工具,将实验步骤从头到尾讲解一遍,学生跟着操作,可以极大提高学习效率。模仿方法下,老师将一些经典程序介绍给学生,学生在读懂后模仿编程,一段时间积累经验后,就可以编写较复杂的程序。另外,可以将汇编语言与c语言联系起来,对比其异同,促进学生对两种语言的理解。

3 结语

本文对汇编语言教学进行了深入的分析,针对汇编语言教学内容、方法和实验环节的问题,在教学中采取了更新教学内容、采纳案例教学法以及合理安排实验和改进实验教学方法等改革实践,教学效果明显,为其他后续课程的学习奠定了基础。随着计算机技术的发展,汇编语言也在不断扩展,其重要用途仍值得关注,加强汇编语言教学研究在今后仍是一项很有意义的工作。

汇编语言范文第9篇

Abstract: Assembly language has complex instructions and many provisions which lead to the weariness of students. In order to improve the teaching effect of assembly language programming, this article explains how to easily learn assembly language from the comparative perspective of English and C language grammar in order to improve the interest of learning.

关键词: 单词;词法规则;语法规则;语法成分;语句

Key words: word;lexical rule;grammar rule;grammatical component;statement

中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2014)19-0193-02

1 绪论

作为最接近机器语言的编程语言,汇编语言可以称得上是最接近于计算机操作本质的语言。其直接面向硬件的特性,使得在使用汇编语言编程时,能够清楚感知计算机的运行过程和原理,充分认识应用程序和计算机硬件之间的联系与交互。相对于高级语言来说,汇编语言对编程者思维逻辑的锻炼表现尤为突出,对于形成软、硬兼备的编程知识体系具有举足轻重的作用,而且指令集合简约,指令操作直接。很多硬件设施的嵌入式编程使用的都是汇编语言,因为汇编语言更直接,更有效率。例如现在很多数码产品赖以生存的芯片、主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是非常普遍和相当重要的。对于计算机专业语言类课程的学习来说,从汇编语言开始学习更符合循序渐进的学习原理。特别是在计算机技术专业的学习中,汇编语言具有十分重要甚至说不可代替的作用。因学生有英语、C语言学习的基础和习惯,故本文从英语、C语言语法对比的角度,说明如何轻松学好汇编语言,以便更好地由英语学习、C语言学习自然过渡到汇编语言学习。

2 汇编语言课程的特点

汇编语言是计算机能提供给用户的最快而又最有效的语言,同时能够利用计算机所有硬件特性并能直接控制硬件。所以高级语言简单、易学且开发效率高,而汇编语言复杂、难懂、开发效率低。优点:①用汇编语言所编程序时空效率高。由于汇编语言本质上就是机器语言,可直接、有效地控制计算机硬件,因而与高级语言相比,容易得到运行速度快、执行代码短、占用内存空间少的高时空效的目标程序。②用汇编语言能设计出高级语言无法实现的程序。正是由于与机器的密切相关性,使得汇编语言能充分利用计算机的硬件特性,编写出与硬件紧密相关而高级语言又无法实现的程序。缺点:①难学、难理解、难编程、难调试、难维护等。②汇编语言程序可移植性差,它是面向机器的语言,不同的机器CPU不一样,一个CPU一个指令系统,硬件CPU的不兼容导致程序移植困难。

3 英语与汇编语言的对比(表1)

例如以下程序:

Data segment ;data段开始

X dw 10,20,50,70,-90 ;data段正文

Data ends ;data段结束

Code segment ;code段开始

Assume cs:code,ds:data

Main: mov ax,data

Mov ds,ax

Mov bx,offset x

Mov cx,5 ;code段正文

Mov ax,0

L: Add ax,[bx]

Add bx,2

Loop l

MOV AH,4CH

Int 21h

Code ends ;code段结束

End main ;整个程序书写结束,从语句main开始执行

该程序的功能是求数据10,20,50,70,-90的累加和

4 单词的种类

4.1 常量(常数)单词 ①10进制整形常量。词法规则:以D结束(D可省略),由0-9构成 如 123D,456。②16进制整形常量。词法规则:以H结束,由0-9,A-F构成 如 123H,456H。③8进制整形常量。词法规则:以Q结束,由0-7构成 如 101Q,456Q。④2进制整形常量。词法规则:以B结束,由0-1构成 如 101B,110B。⑤字符型常量。词法规则:单引号括起来的字符,其值为其ASCII码如‘1’的值是41H,’AB’的值是4241H,’ABCD’的值是44434241H,字符顺次存放,其值是低位在低地址部分。

4.2 名字单词 词法规则:以字母或下划线开始,由字母,数字,下划线构成的串。如xyz,flag,名字可以是段名,子程序名,指令的名字,常量名,变量名,寄存器名等。

4.3 运算符单词 算术运算符:如+,-,*,/。伪指令运算符:如offset,seg,xor。

4.4 操作码单词 区分不同的操作(运算),含义必须硬记。如ADD(加法),SUB(减法),MUL(乘法),DIV(除法)。

5 语法成份――表达式

语法规则:由常量,运算符,括号,名字构成。如123+456+x,其中最常用的表达式有:①100:数据100。②[100]:100号单元,100不是数据,是地址,100号单元的内容是数据。③BX:BX单元。④[BX]:BX所指向的单元,并非BX单元。⑤10[BX]或书写成[10+BX]:BX所指向的单元,下10个单元。⑥[SI][BX]或书写成[SI+BX]:BX所指向的单元,下SI个单元。⑦10[SI][BX]或书写成10[SI+BX]或书写成[10+SI+BX]:BX所指向的单元,下SI个单元,再下10个单元。

6 语句格式

自然语言格式是:动词(做什么)宾语(对谁做)状语(怎么做)。汇编语言格式是:动词(做什么)宾语(对谁做),省掉状语(运算结果怎么办,隐含给出)。

语法规则:[名字][:]操作码目的操作数,源操作数;注解。表示做何种操作的代码称为操作码,参加操作的数称为操作数,操作数无非是常量,名字,表达式。存放结果的称为目的操作数,仅参加运算的数称为源操作数。运算后,目变源不变。

语义规则:目的操作数操作上源操作数,结果送到目的操作数(运算结果怎么办,隐含给出)。

如 ADD AX,BX表示AX的内容加上BX的内容送AX,(AX)+(BX)送AX。

7 汇编语言与C语言的比较(表2)

8 结束语

计算机由硬件软件两部分构成,汇编语言可直接在硬件层上编程序,高级语言有编译程序,该软件层遮盖了硬件层,使得用户看不到硬件,看到的只是编译程序的语法约定。故学好汇编语言,对于理解计算机内部运行机制及产品开发尤为重要。

参考文献:

[1]王成耀.80X86汇编语言程序设计(第2版)[M].北京:人民邮电出版社,2008.

[2]张全福.汇编语言程序设计实验教学改革与探索[J].教学研究,2005,25(10).

汇编语言范文第10篇

汇编语言在微机原理与接口技术中占有十分重要的地位,大部分学生觉得这门课难学或对这门课失去学习热情的很大一部分原因在于对汇编语言的学习产生了畏难情绪。诚然,汇编语言是一门低级语言,就8086来说,它就有115个指令,给学生的学习造成了很大的负担。但是,如果教师采用方法得当的话,可以让学生感觉汇编语言“很易学”,甚至让他们“爱上”它,这并非没有可能。本人就对汇编语言的热爱,谈谈在教授这门课时的一点心得体会。

一、提高学习兴趣,激发求知欲

俗话说:兴趣是最好的老师。一个人只有对某个问题产生兴

趣,才会主动去寻找解决它的办法,才会主动获取相关的知识。因此,在教学过程中,教师的重要任务之一就是激发学生的学习兴趣。

第一次课很重要。对于大多数职教学生来说,他们只对最新的、实用的知识感兴趣,如果要他们去学习一些理论性的、陈旧的内容的话,他们必然会失去兴趣。所以,在我们上第一次课的时候,就需要强调本门课的重要性,让他们觉得学习这门课的用处很大。比如,我的第一堂课是在多媒体教室上的,这堂课主要展示汇编语言的一些实用技巧:利用汇编语言破解CMOS密码;利用汇编语言程序控制计算机主机中小喇叭发出的声音;利用汇编语言程序播放音乐;借助特定软件用汇编语言破解某个软件的注册码。让学生记下相应的程序与操作,在下一节课上机房完成相应的操作,让学生收获成功的喜悦。这两节课的主要目的是让学生领略汇编语言的魅力及其实用性,为以后的学习做铺垫。在后续的学习过程中,在原有知识的基础上可以增加一些实用性的内容,以维持他们的学习兴趣。

二、讲课内容打乱教材顺序,抽取精髓,激励学生主动获取知识

就8086 CPU来说,它具有115个指令,这么多指令介绍完的话,时间是肯定不允许的。如果真要这么做的话,枯燥的指令会打消学生的学习积极性。所以,在具体教学过程中,肯定得有所删减。

在教学过程中,我们应该从教学内容选择、教学方法的改进等多方面下手。例如,在介绍8086指令时,选择重点指令,不必将所有指令一个个详细地讲解。教学中,教师应该尽早引导学生上机练习,编写有交互性的程序,尤其应该有显示结果,使学生有成就感。

在学的过程中,希望学生不要急功近利、太过浮躁。学习的重点不是语言本身,而是编程思想和方法,通过汇编语言学习,更好地理解微机内部工作原理,熟悉底层程序设计的思路。

三、遵循循序渐进原则,尽量与原有的知识相联系

学生在学习汇编语言时,会遇到各种各样的困难,比如,很多指令格式很相似,一些指令格式有太多的限定,指令操作数的形式多样等,从而对汇编语言产生了恐惧感,不知怎样学习,心里很茫然。由于汇编语言的特点,初次接触的确有些困难,习惯了高级语言的自然表达,一时无法适应低级语言的生硬规则是产生恐惧感的一个重要原因。

1.教学过程要遵循循序渐进原则,不要急于求成

在介绍指令的格式和功能时,如MOV指令,对它格式的限定太多,如果在学生基本的指令功能还没掌握的情况下,就给指令的使用加上条条框框,那只会使学生在具体写指令的时候疑神疑鬼,失去写程序的勇气。对于这些格式的限定可以在学生具有一定的基础后安排一节上机课,让学生把一些错误的情况找出来,然后教师总结,在以后的学习过程中慢慢掌握指令的格式。再如,学习汇编语言编程时,我们教师的重点不是去教学生编程,而是要让学生先学会看懂程序,然后在一定的阅读程序的基础上再尝试让学生编程,由易入难,由浅入深,让学生逐步掌握。

2.学习指令功能时尽量与原有知识相联系

对于学过高级语言的学生来说,对于汇编语言的表达是很有抵触心理的,让学生接受并习惯这种表达方式是我们教学的一个重要方面。如,在初次介绍MOV指令时,可以由C语言中的赋值语句“a=5”引入,它的实质是将数据5送给变量a,然后引入“MOV a,5”,两个一比较,很容易就可以掌握MOV指令的功能。再如,加法指令ADD,减法指令SUB等完全可以采用相同的方法来引入,从而让他们适应这种用助记符来表达的方式。

当然,要想真正让学生学好这门课,我想这些是不够的。教师在平时的教学过程中还要注意时刻为学生排疑解难,否则问题一旦积累过多,对后续的学习就会造成很大的困难。并且教师还要不断去学习,去“充电”,真正从一个“教书匠”变成一个学者。

上一篇:语言艺术范文 下一篇:参数方程范文