汇编语言及编程实例(电子教案)
- 格式:docx
- 大小:50.44 KB
- 文档页数:33
汇编电子课程设计一、教学目标本节课的教学目标是让学生掌握汇编电子课程的基本知识和技能,了解汇编语言的原理和应用,能够使用汇编语言编写简单的程序。
具体来说,知识目标包括:了解汇编语言的基本概念、指令集、寄存器、程序结构等;技能目标包括:能够使用汇编语言编写简单的程序,如计算器、排序算法等;情感态度价值观目标包括:培养学生对计算机科学的兴趣和热情,提高学生解决问题的能力和创新精神。
二、教学内容本节课的教学内容主要包括汇编语言的基本概念、指令集、寄存器、程序结构等。
具体安排如下:1.汇编语言的基本概念:介绍汇编语言的定义、作用和特点,让学生了解汇编语言在计算机科学中的重要性。
2.指令集:讲解汇编语言中的基本指令,如数据传输、算术运算、逻辑运算等,让学生掌握指令的使用方法和语法。
3.寄存器:介绍寄存器的概念、作用和分类,让学生了解寄存器在程序运行中的重要性。
4.程序结构:讲解汇编语言程序的基本结构,如数据段、代码段、堆栈段等,让学生能够熟练地程序结构。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
具体安排如下:1.讲授法:教师讲解汇编语言的基本概念、指令集、寄存器、程序结构等知识点,引导学生掌握课程内容。
2.讨论法:学生进行小组讨论,让学生分享学习心得,互相答疑解惑。
3.案例分析法:分析典型的汇编语言程序案例,让学生了解汇编语言在实际应用中的作用。
4.实验法:安排学生进行汇编语言编程实验,让学生亲自动手编写程序,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用权威、实用的汇编语言教材,如《汇编语言程序设计》。
2.参考书:提供汇编语言相关的参考书籍,如《汇编语言编程技巧》。
3.多媒体资料:制作精美的PPT,展示汇编语言的原理和示例程序。
4.实验设备:准备计算机、汇编语言编程环境等实验设备,让学生进行编程实践。
汇编语言及编程实例电子教案引言:汇编语言是一种底层计算机语言,它直接操作计算机的硬件资源。
通过学习汇编语言,可以深入了解计算机的内部工作原理,并能够编写高效的程序。
本教案将通过一系列编程实例,帮助学生掌握汇编语言的基本原理和应用技巧。
一、汇编语言简介1.1 汇编语言的特点:汇编语言与高级语言的对比,指令的直接操作。
1.2 汇编语言的发展历史:从早期的手工编程到现代汇编器的应用。
二、汇编语言的基本知识2.1 寄存器:通用寄存器、特殊寄存器,如AX、BX、CX、DX、SP等。
2.2 内存地址:物理地址、逻辑地址,内存寻址方式。
2.3 汇编指令:数据传输指令、算术指令、逻辑指令等。
三、常见汇编语言实例3.1 实例一:求和程序3.1.1 需求描述:输入两个整数,计算它们的和并输出结果。
3.1.2 算法设计:使用寄存器进行数据传输和运算,最后输出结果。
3.1.3 汇编代码示例及详细解析。
3.2 实例二:阶乘程序3.2.1 需求描述:输入一个正整数,计算它的阶乘并输出结果。
3.2.2 算法设计:使用循环和递减操作实现阶乘的计算。
3.2.3 汇编代码示例及详细解析。
3.3 实例三:字符串反转程序3.3.1 需求描述:输入一个字符串,将其反转并输出结果。
3.3.2 算法设计:使用循环和寄存器交换字符位置实现字符串反转。
3.3.3 汇编代码示例及详细解析。
四、汇编语言的应用领域4.1 嵌入式系统开发:汇编语言在嵌入式系统的驱动和控制程序中的应用。
4.2 操作系统内核开发:汇编语言在操作系统内核的启动和核心功能实现中的应用。
4.3 硬件驱动程序开发:汇编语言在硬件设备驱动程序中的应用。
五、汇编语言的优缺点分析5.1 优点:直接操作硬件资源、高效性、灵活性。
5.2 缺点:学习曲线陡峭、可移植性差、维护困难。
六、总结通过本教案的学习,读者可以全面了解汇编语言的基本知识、编程技巧和实际应用。
汇编语言虽然在现代编程领域中使用较少,但掌握汇编语言对于理解计算机底层原理和应对特定场景的编程需求仍然具有重要意义。
实验9 根据材料编程编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm!’。
编程所需的知识通过阅读,分析下面的材料获得。
1、80*25彩色字符模式显示缓冲区(显示缓冲区)的结构;内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区。
向这个地址空间写入数据,写入的内容将立即出现在显示器上。
在80*25彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有256种属性(背景色、前景色、闪烁、高亮等组合信息)。
2、一个字符在显示缓冲区中就要占两个字节,分别存放字符的ASCII码和属性。
80*25模式下,一屏的内容在显示缓冲区中共占4000个字节。
显示缓冲区分为8页,每页4KB,显示器可以显示任意一页的内容。
一般情况下,显示第0页的内容。
也就是说通常情况下,B8000H~B8F9F中的4000个字节的内容将出现在显示器上。
在一页显示缓冲区中:偏移000~09F,对应显示器上的第一行(80个字符占160个字节);偏移0A0~13F,对应显示器上的第二行偏移140~1DF,对应显示器上的第三行…….偏移F00~F9F对应显示器上的第25行在一行中:00~01单元对应显示器上的第1列02~03单元对应显示器上的第2列04~05单元对应显示器上的第3列……9E~9F单元对应显示器上的第80列例:在显示器的0行0列显示黑底绿色的字符串‘ABCDEF’显示缓冲区里的内容为:B800:0000 41 02 42 02 43 02 44 02 45 02 46 02.. .. .. ..可以看出,在显示缓冲区,偶地址存放字符,奇地址存放字符的颜色属性。
3、一个在屏幕上显示的字符,具有前景(字符色)和背景(底色)两种颜色,字符还可以以高亮度和闪烁的方式显示。
前景色、背景色、闪烁、高亮等信息被记录在属性字节中。
属性字节的格式:7 6 5 4 3 2 1 0含义BL R G B I R G BR:红色G:绿色B:蓝色例:在显示器的0行0列显示红底高亮闪烁绿色的字符串‘ABCDEF’(红底高亮闪烁绿色,属性字节为:11001010B,CAH)注意:闪烁的效果必须在全屏DOS方式下才能看到。
实验二[bx]和loop指令的联合使用一.实验目的1、熟练掌握编写汇编语言原程序的基本方法和基本框架。
2、掌握[bx]访问内存的方法和loop循环指令。
3、熟练使用DEBUG调试程序跟踪循环指令的执行。
二.实验内容1.编程:向内存0:200~0:23F依次传送数据0~632.编程:向内存0:200~0:23F依次传送数据0~63,程序中只能使用9条指令(包括程序的2条返回语句)3.下面程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。
上机调试,跟踪运行结果。
assume cs:codecode segmentmov ax,mov ds,axmov ax,0020hmov es,axmov bx,0mov cx,s: mov al,[bx]mov es:[bx],alinc bxloop smov ax,4c00hint 21hcode endsend4.编程实现将内存中10个无符号数即A数组(长度为两个字节)由小到大排序,排序后的结果仍存放在A 数组中。
三.编程提示对于实验任务3,有如下说明:因为题目的要求是把代码段内的指令当作数据,复制到目的地址。
所以要确定要复制的数据的位置和长度。
1.因为要复制的数据是代码段的一部分指令,那么要复制的数据的段地址就和代码段的段地址相同。
2. 因为要复制的数据是代码段的一部分指令,所以要复制的数据的长度,就是要复制的指令的长度,可以先假设要复制8位[1h~0ffh]数据的字节数(如:10h),把程序补全,以便通过编译。
将程序补充完整并将其编译、连接、运行,接着进行DEBUG,在DEBUG时我们可以算出该程序的长度。
然后得到正确的值后重新将程序补充完整。
四.实验要求实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等五.实验报告1、程序说明。
说明程序的功能、结构。
2、调试说明。
包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
一汇编语言程序设计基本步骤二程序的基本结构形式顺序结构的程序执行时按语句的书写顺序依次执行转移分支和循环因此对于有先后关系的语句程序设计时其先后次序是至关重要的顺序结构一般为简单程序顺序片段会在所有程序中存在1X和位无符号数16X Y值的程序分析1如何定义数据段X Y运算结果用双字空间存储2如何实现无符号数乘法1用加法指令实现无符号数乘法23解12CSEG SEGMENT1设位无符号数写一个求表达式16X Y值的程序实现无符号数乘法1设位无符号数写一个求表达式16X Y值的程序思考是有符号数1数据段的定义是否需要改变2对于这三种指令号数乘法的实现有何不同循环是一种重复循环通常由四部分组成1初始化部分234常有两种1Do-Until由循环指令实现2由转移指令实现说明(1) 由循环指令实现循环时ECX ZF标志这时计数值调整和条件测试在循环指令中完成例如使用LOOP LOOPZ/LOOPNZ 由转移指令实现循环时通常以条件转移指令为循环控制部入口以无条件转移指令为循环体结束件控制法循环可以嵌套明确循环控制部分和调整部分防止死循环特殊循环结构在循环体内条件判断出口能有多个出口循环控制部分控制循环何时结束1循环次数已知例LOOP2循环次数已知但可能提前结束例LOOPZ/LOOPNZ3循环次数不定据具体情况而定合理选择循环控制条件是循环程序设计的关键题意屏幕显示如下2把制的形式显示在屏幕上2把制的形式显示在屏幕上分析位十六进制数码因此BX位之后加上一个数一个十六进制数码对应字母的码值算法的基本思想ASCII A~F2把制的形式显示在屏幕上程序主体rotate: 完成什么功能;0-9ASCII 30H-39H作用 ;A-F ASCII 41H-46H作用3 53将正数数组的正确位置数据段部分3 5353535算法的基本思想ARRAY_HEAD-2-1K NN循环次数已知但可能提前结束代码段部分1数组中元素与插入值的比较指令在何处2控制循环结束的指令在哪里3边界条件如何体现功能3将正数数组的正确位置4试编制一程序从键盘输入一行字符要求第一个键入的字符必须是空格如不是则退出是则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中空格符不存入直到接收到第二个空格符时退出程序题意C空格是第一个字符是空格符是空格符代码段部分LEA BXMOV FLAG0NEXT MOV AH01HINT21HFLAG01HFOLLOWALEXITFLAG1 FOLLOWCMP ALEXIT[BX]EXIT 1判定第一个接收字符的指令语句在哪里2循环结束条件是什么循环结构思路采用冒泡排序算法使用双重循环内层循环每次比较相邻的两个数据次序不对则交换外层循环控制内层循环次数以及负责内层循环的初始化5将首地址为字的数组从大到小实现排序多重循环21循环可以嵌套多重循环的设计方法同单重循环但应分别考虑各重循环控制条件数据段部分代码段部分CX 内层循环计数器也CX 该程序如何解决它们冲突的循环结束条件是否可以更改作业P175。
第版温冬婵编著清华大学出版社IBM PC汇编语言程序设计沈美明等清华大学出版社汇编语言程序设计教程杨季文等清华大学出版社学时一计算机语言发展简史机器语言真正唯一能让直接识别的语言它是二进制编码表示的机器指令的集合及一组使用机器指令的规则能直接识别并遵照执行的指令称为机器指令目的程序或目标程序直接执行CPU其不尽相同1用(2200H)+(2201H)结果存放在中的程序片段用进制表示将中的数送到将(AL)+(2201H)和数送到将(2202H)优点目标程序小执行速度快效率高缺点表达的意义不直观编写阅读调试较困难高级语言面向人的语言有多种类型优点便于阅读易学易用不涉及硬件具有通用性缺点目标代码冗长占用内存多从而执行时间长效率不高不能对某些硬件进行操作汇编语言是一种符号语言与机器语言一一对应使用助记符表示相应的操作并遵循一定的语法规则与机器语言有类似的优缺点但比机器语言更易于为人们所理解汇编语言源程序下面是两个小例子例编写的例是用汇编语言编写的它们完成相同的功能即把a b的内c并在屏幕上显示出来CPU直接识别并执行这些程序通称为源程序因此所有源程序都必须翻译成目标程序后CPU执行高级语言程序汇编语言程序与机器语言程序的关系则专门负责完成将汇编语言源程序翻译成目标程序二汇编语言相对于高级语言的特点汇编语言是面向机器的语言它的指令语句与机器指令一一对应是机器指令的符号表示因此对于不同类型的CPU要求使用不同的汇编语言和汇编程序保持了机器语言的优点捷的特点可有效地访问控制计算机的各种硬件设备如磁盘存储器CPU端口等目标代码简短占用内存少执行速度快的程序设计语言硬件的功能并提高编程质量三汇编语言的应用对软件的执行时间或存储容量有较高要求的场合例如实时控制系统智能化仪器仪表及高性能软件需要提高大型软件性能的场合例如某些快速处理位处理等高效程序用汇编语言编写的与硬件关系密切要直接有效控制硬件的场合经常与高级语言配合使用是否采用汇编语言编程主要权衡软件的开发时间及软件的质量四为什么要学习汇编语言汇编语言是低级语言它能为程序员提供最广阔的编程舞台学好汇编语言就能够站在计算机运行程序的角度从计算机硬件的角度了解认识计算机系统它是嫁接软件和硬件的桥梁•学好汇编语言对今后可能涉及的计算机特别是单片机系统开发有极大帮助五如何学好汇编语言在接下来的学习过程中学习汇编语言程序设计和学习高级语言程序设计有所不同汇编程序更不能编写自己的应用程序为我们要为今后的编程作一个充分的知识储备例如的编程结构指令系统寻址方式指令功能和操作对象伪指令格式等所以希望同学们要有一定耐心把每节课内容学到手在理解的基础上记忆需要强调的是更重要的是记忆换句话说对于正确的东西暂时不能理解的也要记下来因为疑团总是在后面解开六学习目标及要求掌握汇编语言程序设计的基本概念机的基本结构编程结构掌握Intel 80X86CPU的指令系统及寻址方式学会使用DOS和BIOS功能调用及高级汇编语言技术掌握使用汇编语言设计编写调试和运行程序的方法汇编语言预备知识的复习通过前面的讲解我们知道计算机只能识别以二进制形式存在的机器语言无论是高级语言还是汇编语言最终都要转换为机器语言即二进制形式而且计算机内部数据的存放和运算都是二进制形式要学习汇编语言必须首先了解二进制而我们的惯性思维是十进制本节我们要复习1进位计数制2不同基数的数之间的转换特别是二进制十进制二进制十六进制之间的转换3不同基数的数的运算4机器数的表示重点掌握有符号数的补码表示一数制进制数a其含义为·r十进制1012.34 = 110+ 2 10+ 3 10+ 4二进制基数为2逢二进一= 1 2+ 1 + 1十六进制基数为16逢十六进一1001, 0001, 1000, 0111= 9 + 1 16+ 8 16+ 7 16八进制基数为8逢八进一例若要写一个八进制数197对否例同样的一串数字101若表示的数制不一样其含义也不一样如下101D=101B=101O=那么如何区分它们呢现对常用进制数归纳总结如下01070909,a,b,c,d,e,f,在计算机中为了区分不同数制的数据采用以下方法DO二进制转换直接计算求和1降幂法例27D = ? B2除法转换整数部分由除法得到的余数顺序产生由低到高的各位数码直至商为乘法转换小数部分由乘法得到整数顺序产生由高到低的各位数码直至小数部分为0例如12位一组用十六进制数码表示反之十六进制每位扩展为4位二进制数码十六进制与二进制的转换表见书P4表1.11+1=0 进位1三运算逻辑运算按位操作运算NOT运算AND A B A ∧B 运算ORA B A ∨B 运算XOR∀B例X=00FFH Y=5555H求四数机器数的表示计算机中的数用二进制表示分为符号数有符号数的符号也用二进制位表示例如8位二进制符号位=01有符号数的补码表示1正数的补码形式绝对值的二进制数形式符号位02负数的补码形式2n绝对值的补码n80X86中为机器字长快速得到负数补码的两种方法a先得出其绝对值对应的二进制形式然后对该二进按位变反最后再将1b先得出其绝对值对应的二进制形式然后将该二进制最右边为的位不变其所有左边位按位变反例位[-46]=1[46]= 0010 1110按位求反1101 0010 0D2H2[46]1101 0010 0D2H所以[-46]=11010010B0D2H特殊值的补码= 1111 1111 =0FFH例写出下列数据的补码表示12[-39H]3[26 ]4例试比较两个二进制数01111111B的大小例写出下列数据的补码表示12[-39H]3[26 ]4例试比较两个二进制数01111111B的大小解有符号数2数的符号扩展无符号数只要在最高位前添足够的0即可有符号数补码形式表示进行符号位的扩展时在最高位前添足符号位正数添0负数添1例如0D2H8位补码视为有符号数则其符号扩展为FFD2H16位视为无符号数则其符号扩展为00D2H16位3数的表示范围补码的表示范围-位无符号数4补码的加法和减法补码表示的数具有以下特性求补例如[117]补的补码例下列各数均为十六进制表示的位二进制数请说明当它们分别被看做用补码表示的带符号数或无符号数时它们所表示的十进制数是什么1D8 2FF解1有符号数[11011000]即是的补码无符号数2162有符号数-1无符号数255求补运算在补码的加减运算中很有用加法规则[X+Y]减法规则[X-Y]符号位参加运算能自动得到正确补码结果例如十进制32257 1110 0111 25的补码(1)0000 01115BCD码采用二进制编码的十进制简称BCD码BCD码位二进制数编码表示1位十进制数常用的是8421BCD码6字符表示法码表示字符见书 1.3五数据种类计算机中若干位二进制信息可表示一个存储单元地址I/O程序和数据在汇编语言程序中有指令操作码操作数等数值数据如二进制数十进制数十六进制数逻辑数据逻辑变量通常按位定义码等表示的信息其位数一般是的倍数因此汇编语言的基本数据类型有位半字节字节字双字四倍字字符串BCD码等1位计算机存储信息的基本单位2半字节4个连续的二进制数位组成可以表示1个8421码1位十六进制数3字节连续的二进制数位组成字节最低位(右边)称为第0位最高位左边称为第7位7 6 5 4 3 2 1 0一个字节可以表示4字2个连续字节组成一个字5双字2个连续字组成低16位为低字高16位为高字6四字4个连续字组成7字符串由字符构成的一个线形数组通常每个字符用一个字节表示其它的多倍字和多倍字节的数据作业P14 1.1 (1) (3) 1.4 (1) (3)。
汇编语言及编程实例(电子教案)汇编语言程序设计2005第四章汇编语言程序设计回顾:8086的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。
本讲重点:了解汇编的概念及其方法,掌握汇编程序的基本格式,常用运算符的使用方法,汇编的步骤。
4.1汇编语言的基本元素一、汇编语言的语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。
每个语句由1~4个部分组成,其格式是:[标号]指令助记符[操作数][;注解]其中用方括号括起来的部分,可以有也可以没有。
每部分之间用空格(至少一个)分开,一行最多可有132个字符。
1.标识符给指令或某一存储单元地址所起的名字。
可由下列字符组成:字母:A~z;数字:0~9;特殊字符:、·、@、一、$数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。
标识符最长为31个字符。
当标识符后跟冒号时,表示是标号。
它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。
2.指令助记符表示不同操作的指令,可以是8086的指令助记符,也可以是伪指令。
3.操作数指令执行的对象。
依指令的要求,可能有一个、两个或者没有,例如:RET;无操作数COUNT:INCC某;一个操作数如果是伪指令,则可能有多个操作数,例如:COSTDB3,4,5,6,7;5个操作数MOVA某,[BP+4];第二个操作数为表达式4.注解该项可有可无,是为源程序所加的注解,用于提高程序的可读性。
二、汇编语言的运算符1.算术运算符、逻辑运算符和关系运算符-1-汇编语言程序设计2005算术运算符可以应用于数字操作数,结果也是数字。
而应用于存储器操作数时,只有+、-运算符有意义。
2.取值运算符SEG、OFFSET、TYPE、SIZE和LENGTH·SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。
例如,定义:SLOTDW25则:MOVA某,SLOT;从SLOT地址中取一个字送入A某MOVA某,SEGSLOT;将SLOT所在段的段地址送入A某MOVA某,OFFSETSLOT;将SLOT所在段的段内偏移地址送A某·TYPE操作符返回一个表示存储器操作数类型的数值。
各种存储器地址操作数类型部分的值如表4-1所示。
SIZE(MULT-WORD)=100注意:SIZE(某)=(LENGTH某)某(TYPE某)3.属性运算符属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。
常用的有:(1)合成运算符PTR它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性,一般格式:类型PTR表达式功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。
例如:SLOTDW25此时SLOT已定义成字单元。
若我们想取出它的第一个字节内容,则可用PTR对其作用,表4-1存储器操作数的类型属性及返回值字节NEAR1-1字FAR2双字4-2-2-汇编语言程序设计2005使它暂时改变为字节单元,即MOVAL,BYTEPTRSLOT三、表达式由运算符和操作数组成的序列,在汇编时产生一个确定的值。
这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。
1.常数汇编语言语句中出现的常数可以有7种:①二进制数后跟字母B,如01000001B。
②八进制数后跟字母Q或O,如202Q或202O。
③十进制数后跟D或不跟字母,如85D或85。
④十六进制数后跟H,如56H,0FFH。
注意,当数字的第一个字符是A~F时,在字符前应添加一个数字0,以示和变量的区别。
另有,十进制浮点数、十六进制实数、字符和字符串2.常量操作数常量操作数是一个数值操作数,一般是常量或者是表示常量的标识符。
可以为数字常量操作数或字符串常量操作数。
前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。
3.存储器操作数存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。
存储器操作数可以分为变量及标号两种类型,如果存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么这个存储器操作数就称为变量;如果存储器操作数所代表的是某条指令代码在代码段中的地址,那么这个存储器操作数称为标号。
变量所对应的存储单元内容在程序的运行过程中是可以改变的,标号通常作为转移指令或调用指令的目标操作数,在程序运行过程中不能改变。
存储器操作数有三个方面的属性。
(1)段地址:即存储器操作数所对应的存储单元所在段的段地址;(2)偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址;(3)类型:变量的类型是相应存储单元所存放的数据项的字节数;而标号的类型则反映了相应存储单元地址在作为转移或调用指令的目标操作数时的寻址方式,可有两种情况,即NEAR和FAR。
具体值可见表4-14.常量表达式由常量操作数及运算符构成,在汇编时产生一个常量。
-3-汇编语言程序设计2005如PORT、VAL+1、OFFSETSUM、SEGSUM、TYPECYCLE等。
5.地址表达式由存储器操作数与运算符构成,必须有明确的物理意义。
例如SUM+2、CYCLE-5表达式SUM+2、CYCLE-5的值仍然是一个存储器操作数,该存储器操作数的段地址与类型属性分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。
表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。
四、汇编语言程序汇编步骤汇编语言程序要能在机器上运行,还必需将汇编源程序汇编成可执行程序。
为此必须完成以下几个步骤。
1.编辑源程序2.调用宏汇编对源程序进行汇编3.对目标程序进行连接4.运行可执行程序并调试【习题与思考】1.下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。
VAR1DBVAR2VAR3VAR410,25DUP(?),0‘HOWAREYOU?’,‘$’-1,1,0DWDBDD2.假定VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处。
(1)ADD(3)JMPVAR1,VAR2(2)SUBAL,VAR1LAB[SI](4)JNZVAR13.对于下面的符号定义,指出下列指令的错误。
A1DB?A2DB10K1EQU1024-4-汇编语言程序设计2005(1)MOV(3)CMPK1,A某A1,A2(2)MOVA1,A某EQU2048(4)K14.2伪指令【回顾】汇编的概念及其方法,掌握汇编程序的基本格式。
8086/8088的指令格式。
【本讲重点】了解伪指令的功能,掌握定义数据、符号、段、过程等伪指令的使用方法,能编写格式正确的汇编程序。
4.2伪指令伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。
一、定义数据伪指令该类伪指令用来定义存储空间及其所存数据的长度。
·DB:定义字节,即每个数据是1个字节。
·DW:定义字,即每个数据占1个字(2个字节)。
·DD:定义双字,即每个数据占2个字。
低字部分在低地址,高字部分在高地址。
·DQ:定义4字长,即每个数据占4个字。
·DT:定义10个字节长,用于压缩式十进制数,例如:DATA1DB5,6,8,100DATA2DW7,287TABLEDB;表示在TABLE单元中存放的内容是随机的;当一个定义的存储区内的每个单元要放臵同样的数据时,可用DUP操作符。
一般格式:COUNTDUP(?),COUNT为重复的次数,()中为要重复的数据。
如:BUFFERDB100DUP(0);表示以BUFFER为首地址的100个字节中存放00H数据BUFFER1DB100DUP(3,5,2DUP(10),35),24,‘NUM’)想一想存储区的情况?二、符号定义伪指令EQU、=、及PURGE·EQU伪指令给符号定义一个值。
在程序中,凡是出现该符号的地方,汇编时均用其值代替,-5-汇编语言程序设计2005如:TIMESEQU50DATADBTIMESDUP()上述两个语句实际等效于如下一条语句:DATADB50DUP()·=伪指令可给初始变量赋值。
如:COUNT=100;COUNT=100TIME=50;TIME=50·PURGE伪指令用于释放由EQU伪指令定义的变量,使这些变量可以被重新定义。
PURGETIMES;释放TIMES变量TIMESEQU2;重新定义三、段定义伪指令SEGMENT和ENDS一般来说,一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。
段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。
段定义伪指令一般格式为:段名SEGMENT[定位类型][组合类型][类别]段名ENDSSEGMENT和ENDS应成对使用,缺—不可。
其中段名是不可省略的。
其它是可选项,是赋予段名的属性,可以省略。
例如:DATASEGMENTDW20DUP()DATAENDS四、设定段寄存器伪指令ASSUME一般格式:ASSUME段寄存器:段名[,段寄存器:段名,……]功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。
在段名中,CODE表示代码段,DATA表示数据段,STACK表示堆栈段。
由于ASSUME伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。
因此要将真实段地址装入段寄存器还需用汇编指令来实现。
这一步是不可缺少的。
例如,CODESEGMENT-6-汇编语言程序设计2005ASSUMECS:CODE,DS:DATA,SS:STACKMOVA某,DATA;DATA段值送A某MOVDS,A某;A某内容送DS,DS才有实际段值CODEENDS当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设臵。
但是,在装入程序中DS寄存器由于被用作其它用途,因此,在用户程序中必须用两条指令对DS进行初始化,以装入用户的数据段地址。
当使用附加段时,也要用MOV指令给ES赋段地址。
五、定义过程的伪指令PROC和ENDP在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。
一个过程由伪指令PROC和ENDP来定义,其格式为:过程名PROC[类型]过程体RET过程名ENDP其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。