前言:中文期刊网精心挑选了汇编语言范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
汇编语言范文1
一、变量与函数的相互调用
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〕
汇编语言范文2
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.
汇编语言范文3
关键词 微机原理与接口 汇编语言与C语言比较
中图分类号:TP368.1 文献标识码:A
0 引言
“微机原理与接口”是信息学科的一门必修课,主要介绍8086微处理器的原理及其扩展接口的应用。然而8253芯片是接口芯片中的一个重要组成部分,因此本文就从8253出发,阐述用汇编语言和C语言对其开发,让学生更好地用软件对硬件进行开发。
1 8253知识点进行描述
8253工作方式:
1.1 频率发生器
在该方式下,计数器装入初值,开始工作后,计数器的输出OUT将连续输出一个时钟周期宽的负脉冲。两负脉冲之间的时钟周期数就是计数器装入的初值。在这种初始方式下,门控信号GATE用作控制信号。当GATE为低电平时,强迫OUT输出高电平。当GATE为高电平时,分频开始。时序波形如图1所示。
1.2 方波产生器
当装入数值为N时,若N为偶数,则完成N/2计数时OUT为高电平,完成另外N/2计数时OUT低电平,一直进行下去。若N为奇数,则(N+1)/2计数时OUT保持高电平,而(N-1)/2计数期间OUT为低电平。在GATE为高电平的时,产生对称方波。时序波形如图2所示。
1.3 C语言的优点
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。由于C语言的易可移植性,在嵌入式系统里面应用广泛。
1.4 汇编语言的优点
汇编语言是面向机器的程序设计语言。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
总之,虽然汇编语言执行起来速度比较快,但开发起来比较麻烦,尤其是8086架构里面只有有限的寄存器,在开发大型的软件时就会显得捉襟见肘,采用C语言开发就可以提高代码的质量,用一句C就可以代替好几句汇编语言,会让开发人员轻松很多,更会让很多初学者对嵌入式系统的开发产生兴趣。
2 实例:C语言方式下和汇编语言下控制8253
8253控制端口地址为 203H;计数器0地址为 200H;计数器1地址为 201H;计数器2地址为 202H。
outportb(0x203, 0x56)
//56H(01010110B).选择计数器1,低八位读写,方式3(方波发生器),二进制计数.
outportb(0x201, 8); // 向计数器1写入低八位初值8H(00001000B).
outportb(0x203, 0x94); // 向8253控制端口写控制字94H(10010100B)。选择计数器2,低八位后读写,方式2(分频脉冲发生器),二进制计数。
outportb(0x202, 6); // 向计数器2写入低八位初值6H(00000110B).
如果使用汇编语言程序,则变成
MOV DX,203H;指向控制端口
MOV AL, 56H ;设置工作方式
OUT DX, AL;往端口送数据
MOV DX, 201H;指向计数器1
MOV AL, 8;给计数值
OUT DX, AL;往端口送数据
MOV DX,203H;指向控制端口
MOV AL,94H;设置工作方式
OUT DX,AL;往端口送数据
MOV DX,202H;指向计数器2
MOV AL,6;给计数值
OUT DX,AL;往端口送数据
从中可以直观地可以看出,如果使用汇编语言对8253写入控制字MOV DX,203H,MOV AL,36H,OUT DX,AL,需要三条语句完成,而且需要3个寄存器,并且寄存器本来就是很少的了,这样很浪费资源;用C语言只需调用outport函数:outport(0x203,0x36),C语言的代码长度短了很多,并且也方便学生们掌握,使学生在嵌入式软件开发上产生更多的兴趣,为大型嵌入式软件的开发奠定坚实的基础。
3 结束语
根据本文比较C语言和汇编语言对8253的开发,会让更多的学生明白C语言作为一种面向结构的语言对嵌入式系统开发的优胜性,希望越来越多的学生在微机原理和接口的实验课上,采用C语言进行开发,削减代码量,提高效率。由于目前我国正处于信息化高速建设的时代,对嵌入式系统的开发水平也决定着我国在世界上的影响力。因此,让更多的学生学会用更高效的语言进行嵌入式系统软件的开发显得尤其重要,本文就此发表自己的看法。
参考文献
[1] 马义德,张在峰,徐光柱,杜桂芳.微型计算机原理及应用(第二版).北京:高等教育出版社,2001.
[2] 王永山,杨宏五.微型计算机原理与应 用(第二版).西安:西安电子科技大学出版社,1999.5.
汇编语言范文4
微机原理与接口技术是计算机类学科的专业基础课之一,讲过和学过这门课的教师和学生都知道这门课“很难学”,特别是对于职教的学生来说,如何让他们学好这门课,是我们职教教师所面临的严峻挑战。
汇编语言在微机原理与接口技术中占有十分重要的地位,大部分学生觉得这门课难学或对这门课失去学习热情的很大一部分原因在于对汇编语言的学习产生了畏难情绪。诚然,汇编语言是一门低级语言,就8086来说,它就有115个指令,给学生的学习造成了很大的负担。但是,如果教师采用方法得当的话,可以让学生感觉汇编语言“很易学”,甚至让他们“爱上”它,这并非没有可能。本人就对汇编语言的热爱,谈谈在教授这门课时的一点心得体会。
一、提高学习兴趣,激发求知欲
俗话说:兴趣是最好的老师。一个人只有对某个问题产生兴
趣,才会主动去寻找解决它的办本文由收集整理法,才会主动获取相关的知识。因此,在教学过程中,教师的重要任务之一就是激发学生的学习兴趣。
第一次课很重要。对于大多数职教学生来说,他们只对最新的、实用的知识感兴趣,如果要他们去学习一些理论性的、陈旧的内容的话,他们必然会失去兴趣。所以,在我们上第一次课的时候,就需要强调本门课的重要性,让他们觉得学习这门课的用处很大。比如,我的第一堂课是在多媒体教室上的,这堂课主要展示汇编语言的一些实用技巧:利用汇编语言破解cmos密码;利用汇编语言程序控制计算机主机中小喇叭发出的声音;利用汇编语言程序播放音乐;借助特定软件用汇编语言破解某个软件的注册码。让学生记下相应的程序与操作,在下一节课上机房完成相应的操作,让学生收获成功的喜悦。这两节课的主要目的是让学生领略汇编语言的魅力及其实用性,为以后的学习做铺垫。在后续的学习过程中,在原有知识的基础上可以增加一些实用性的内容,以维持他们的学习兴趣。
二、讲课内容打乱教材顺序,抽取精髓,激励学生主动获取知识
就8086 cpu来说,它具有115个指令,这么多指令介绍完的话,时间是肯定不允许的。如果真要这么做的话,枯燥的指令会打消学生的学习积极性。所以,在具体教学过程中,肯定得有所删减。
在教学过程中,我们应该从教学内容选择、教学方法的改进等多方面下手。例如,在介绍8086指令时,选择重点指令,不必将所有指令一个个详细地讲解。教学中,教师应该尽早引导学生上机练习,编写有交互性的程序,尤其应该有显示结果,使学生有成就感。
在学的过程中,希望学生不要急功近利、太过浮躁。学习的重点不是语言本身,而是编程思想和方法,通过汇编语言学习,更好地理解微机内部工作原理,熟悉底层程序设计的思路。
三、遵循循序渐进原则,尽量与原有的知识相联系
学生在学习汇编语言时,会遇到各种各样的困难,比如,很多指令格式很相似,一些指令格式有太多的限定,指令操作数的形式多样等,从而对汇编语言产生了恐惧感,不知怎样学习,心里很茫然。由于汇编语言的特点,初次接触的确有些困难,习惯了高级语言的自然表达,一时无法适应低级语言的生硬规则是产生恐惧感的一个重要原因。
1.教学过程要遵循循序渐进原则,不要急于求成
在介绍指令的格式和功能时,如mov指令,对它格式的限定
太多,如果在学生基本的指令功能还没掌握的情况下,就给指令的使用加上条条框框,那只会使学生在具体写指令的时候疑神疑鬼,失去写程序的勇气。对于这些格式的限定可以在学生具有一定的基础后安排一节上机课,让学生把一些错误的情况找出来,然后教师总结,在以后的学习过程中慢慢掌握指令的格式。再如,学习汇编语言编程时本文由收集整理,我们教师的重点不是去教学生编程,而是要让学生先学会看懂程序,然后在一定的阅读程序的基础上再尝试让学生编程,由易入难,由浅入深,让学生逐步掌握。
2.学习指令功能时尽量与原有知识相联系
汇编语言范文5
关键词:加密算法 DES 汇编语言
目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法。DES(Data Encryption Standard)即数据加密算法,是IBM公司于 1977年研究成功并公开发表的。随着我国三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易中的密码键盘等,均用到DES算法。由于密码键盘不可能使用高级语言,所以用汇编语言实现DES就非常实用。
1 DES算法的简单原理
DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。
设:M=m1m2m3…m64
K=k1k2k3…k64
加密过程可表达如下:
DES(m)=IP-1·T16·T15…T2·T1·IP(m)
其中:IP(m)是初始置换,IP-1是逆置换,T16~T1是16次迭代。
(1)初始置换IP
功能是把输入的明文m按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则如下:
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9 ,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7
(2)逆置换IP-1
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换。逆置换满足:
IP·IP-1=IP-1·IP=I
逆置换正好是初始置换的逆运算。
(3)T16~T1的迭代计算
DES的迭代算法采用模2加法。
在通信网络的两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络的终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
2 汇编语言的实现
用汇编语言实现DES算法有它的优势也有它的难点。优势是51汇编的位操作可以方便地实现置换功能。但用汇编语言实现算法的迭代运算及循环功能比较烦琐。在用51汇编实现DES的过程中,我编写了几个子程序,组合起来可实现DES算法加密。在这里写出一些思路,有需要的同行可与我联系(E-mail:zhoubin@jlu.edu.cn)。
8031有16个可以位寻址的寄存器,可放置128位的数据,利用它可实现DES的转置功能。将明文m放入寄存器27H~20H中,即位地址00H对应m64 ,3FH对应m1。利用标志寄存器C可实现置换与逆置换程序。在DES的16次迭代过程中,要实现公式:
Li=Ri-1;Ri=Li-1f(Ri-1,ki)
的运算过程,其关键在于f(Ri-1,ki)的功能。f是将32位的输入转化为32位的输出。其中含3项技术:
① 将32位膨胀为48位的E功能。该项功能可用类似于置换功能的子程序编写。
② 48位子密钥的生成。为了便于51汇编生成子密钥,可以使用主机用串口下传的方式,由主机将16个子密钥传给89C52为核心的单片机,然后存入80H~FFH中。如果密钥是固定的,则可直接将子密钥固化在89C52的Flash中。
③ S盒的功能是将48位的输入再次缩为32位。具体实现是将S盒表存入89C52的Flash中,每次通过查表求得S输出的结果。
下面列举其中的几个子程序。
(1)IP置换子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)
;功能:将入口寄存器的数据按置换表换位。
IP: MOV C,06H ;将m58送到进位标志中
MOV 7FH,C ;将进位标志送m1中
MOV C,0EH ;将m50送到进位标志中
MOV 7EH,C ;将进位标志送m2中
;重复,按表编写
.
.
.
MOV C,31H ;将m15送到进位标志中
MOV 41H,C ;将进位标志送m63中
MOV C,39H ;将m7送到进位标志中
MOV 40H,C ;将进位标志送m64中
RET
(2)逆置换子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)
;功能:将入口寄存器的数据按逆置换表换位。
IPRVS:MOV C,18H ;将m40送到进位标志中
MOV 7FH,C ;将进位标志送m1中
MOV C,38H
.
.
.
RET
(3)异或子程序
;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928
;功能:将寄存器27262524的内容和寄存器3F3E3D3C的内容异或。结果保存在2B2A2928寄存器中。
XORLF: MOV A,3FH ;将高8位异或
XRL A,27H
MOV 2BH,A ;放入出口处
MOV A,3EH
XRL A,26H
MOV 2AH,A
MOV A,3DH
XRL A,25H
MOV 29H,A
MOV A,3CH
XRL A,24H
MOV 28H,A
RET
(4)S盒子程序
;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524
;功能:48位32位
S6TO4: MOV 20h,2FH ;取出高位数据
LCALL S162345 ;调用实现Si(b1b6,b2b3b4b5)
;的功能子程序
MOV DPTR,#S1TAB;S盒表的首址
MOV A,21H ;取出第几个S盒
LCALL DPTRADD
CLR A
MOVC A,@A+DPTR;求出S盒的表地址及S 结果
SWAP A
MOV 27H,A ;保存高位结果
MOV 20H,2EH
LCALL S162345
;重复
汇编语言范文6
关键词:汇编语言;指令系统;宏汇编;Win32
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)07-1473-03
在《微机原理及应用》课程中,微处理器中的指令系统以及汇编语言编程是很重要的内容,它是微机系统的主要组成部分之一。随着计算机技术的不断发展,微型计算机由16位微处理器早已过度到了32位微处理器,当前,《微机原理及应用》课程的内容应该以32位微机为主,而32位微处理器是基于16位微处理器的基础之上产生与发展的,它兼容了16位微处理器8086的指令集,因此,在阐述32位微处理器指令系统时,必然涉及到16位的指令,相应的汇编语言编程也在发展,教学过程中如何优化处理16位与32位指令系统及相应的汇编语言编程,使学生能够快速地学习与接受32位机的工作原理,提高教学效果,它是《微机原理及应用》课程教学中的一个难点,是一个值得探讨的问题。
1 《微机原理及应用》课程中的指令集
32位微处理器指令系统包括基本指令集、浮点指令集、保护方式指令集以及扩展指令集等。根据浮点运算部件和浮点运算格式,用浮点指令编写浮点运算程序;保护方式指令集通常由系统程序员使用,编写操作系统程序,保护方式一般是由操作系统通过执行初始化程序来设置的;CPU扩展指令集指的是CPU增加的多媒体或者是3D处理指令,这些扩展指令可以提高CPU处理多媒体和3D图形的能力。一般在计算机课程教学中涉及的指令系统主要是基本指令集,因此,该文所讨论的指令系统是指微处理器的基本指令以及应用基本指令进行的汇编语言编程。
2 教学中以16位指令系统作为基础
微处理器的发展过程经历了从经典的16位微处理器8086到80286、80386、80486、Pentium、多核等系列微处理器的演变和应用。在教学中,首先还是要以8086 CPU为基础组织教学,介绍16位CPU的结构及16位的指令系统,理由如下:
第一,8086 CPU的内部结构简单,有利于学生学习与建立微处理器的概念。
8086微处理器的内部主要包括执行单元EU和总线接口单元BIU,它具有中央处理器(CPU)的经典结构,使学生容易建立微处理器的概念。总线接口部件BIU是8086 CPU与外部存储器和I/O端口的接口,它提供了16位双向数据总线和20位地址总线,负责CPU与存储器及I/O端口之间的数据传送操作。执行部件EU从BIU中的指令队列获取指令,对指令进行译码分析并执行,执行指令所需要的操作数和运算结果都是通过总线接口部件与指定的内存单元或外设端口进行传送的。
在一般教材中,高档微处理器的结构则侧重于其他复杂功能块的分析,不易为初学者接受。
第二,8086 CPU内部各组寄存器结构清晰,通过DEBUG调试程序或MASM汇编程序,很容易验证,而且,学生理解8086 CPU内部寄存器组后,很容易理解32位微处理器内部扩充后的寄存器组。
8086 CPU内部分为:8个16位通用寄存器,每个寄存器还有它们各自的专用场合;4个段寄存器都有各自所代表的内存段;16位的指令指针IP用来存放将要执行的下一条指令在当前代码段中的偏移地址,它与代码段寄存器CS联用,以确定下一条指令的物理地址; 16位的标志寄存器(FLAGS)只定义了9位,分为两类,一类用于反映部分指令(例算术运算及逻辑运算指令)执行结果的状态,常用作后续条件转移指令的转移控制条件,另一类为控制标志,用来控制CPU的操作。
如果学生从理论与实践上,理解与认同了8086 CPU内部的寄存器后,一方面对微处理器的工作原理有了较系统的认识,另一方面,对于下一步学习32位微处理器,奠定了坚实的基础。
3 教学中快速处理32位指令系统
由于学生从理论与实践(上机)两方面,已经掌握了16位机的指令系统,如何快速处理32位指令系统,首先,要简单介绍32位CPU内部寄存器的编程结构,比如,通用寄存器扩充到了32位,增加了两个段寄存器(FS、GS)等。然后,着重介绍32位机的寻址方式,32位机与16位机寻址方式绝大部分是相同的,主要是32位机寻址内存方式多,而且灵活,因此,要重点介绍32位机寻址内存的几种方式。
4 在宏汇编MASM 6.X IDE环境下调试程序
MASM 6.X是一个IDE环境(集成开发环境),它将汇编语言源程序的编辑、汇编、执行、调试合为一体,呈现在程序员面前的是一个窗口,使用非常方便。MASM 6.X将汇编程序和调试程序(DEBUG)集成到一起,使程序的开发和调试结合的更紧密。MASM 6.X最具特色的是能够汇编简化段模式的汇编语言源程序,可用于简化段程序的设计及汇编16、32位指令的程序,还提供了类似于高级语言的IF/ELSE分支结构、WHILE和REPEAT/UNTIL循环结构,使编写汇编语言程序和编写高级语言程序一样方便。现在最新的汇编程序MASM32支持32位段操作,可以构造出窗口程序,功能已接近于高级语言程序。
16位汇编语言编程以完整段格式编写,32位汇编语言编程以简化段格式编写,程序不在于多,但具有典型性。由于《微机原理及应用》课程总学时数不可能完全满足教学的需求,所以,在上机学时的分配上,MASM 6.x IDE环境的熟悉与16位汇编语言上机4学时,32位汇编语言上机6学时。
5 在Win32汇编语言集成开发环境下调试程序
Win32汇编语言程序是构筑在Win32 API基础上的。在Win32 API中,包括了大量的函数、结构和消息等,它不仅为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。
Win32环境中的API编程接口实际上代替了DOS中的软中断,和DOS的结构相比,Win32的系统功能模块放在Windows的动态链接库(DLL)中,DLL是一种Windows的可执行文件,采用的是和.exe文件同样的PE格式,在PE格式文件头的导出表中,以字符串形式指出了这个DLL能提供的函数列表。应用程序使用字符串类型的函数名来指定要调用的函数。应用程序在使用的时候由Windows自动装入DLL程序,并调用相应的函数。
5.1 Win32汇编语言程序集成开发环境的使用
Win32汇编语言程序集成开发环境下的使用并不复杂,大致过程如下:
1)启动Win32汇编语言程序集成开发环境;
2)汇编语言编程的第一步是建立一个新文件,所以在菜单中选择“File”“New”建立一个新文件;
3)第二步是进行文件的编辑,编辑包括程序输入、插入、删除、修改和保存,最后生成文件的后缀是.asm。
4)汇编语言编程的第三步是汇编和连接源程序,生成可执行文件。所以在菜单中选择“Project”“Build All”来完成此工作;
5)在汇编和连接无错误的情况下,会自动生成可执行程序,在菜单中选择“Project”“Run Program”,执行程序得到结果。
5.2 Win32汇编语言程序的理论教学与上机
Win32汇编语言程序的编写,是一个重要的问题,建议讲解4学时。主要讲解内容:
1)针对简单的Win32汇编语言源程序,讲述有关模式的定义、头文件和库文件的加载、程序段的定义、Win32汇编源程序注释和换行的规定;
2)关于API的说明与调用API;
3)Win32汇编语言程序设计方法和实例。
Win32汇编语言程序的实践教学,教师提供2学时的上机范例,包括机房讲解Win32汇编语言程序集成开发环境。学生自己编程,上机2~4学时,共计6学时左右。
6 结束语
汇编语言程序设计在计算机专业是一门独立的课程,在《微机原理及应用》课程中讲解汇编语言程序设计,由于其内容非常丰富、涉及知识面宽、难度大,教学组织困难,学生难学。我们将《微机原理及应用》课程作为精品课程进行建设,通过不断地学习、教学实践以及编写教材,总结出了自己的认识与体会,教学效果较好。
参考文献:
[1] 李华贵,. 微机原理与接口技术[M]. 北京:电子工业出版社,2010.