微机原理课件第8讲(电子ok)_第1页
微机原理课件第8讲(电子ok)_第2页
微机原理课件第8讲(电子ok)_第3页
微机原理课件第8讲(电子ok)_第4页
微机原理课件第8讲(电子ok)_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上节内容回顾 串操作指令 条件转移指令 无条件转移指令 循环指令举例编程将AX寄存器中的内容以相反的顺序传送到DX寄存器,并要求AX中的内容不被破坏,同时完成AX寄存器中1的个数的统计,统计结果存入BL。 MOV BL,0 MOV CX,16 CLCNEXT:INC BL RCR AX,1 JC ADDCOUNT DEC BLADDCOUNT:RCL DX,1 LOOP NEXT 第四章第四章 汇编语言程序设计汇编语言程序设计第8讲教学目的和要求【教学目标】通过汇编语言的讲解,使学生了解计算机语言的发展和汇编语言的执行过程。掌握汇编语言的程序结构和语句格式,了解伪指令的格式。【教学重点】汇编程

2、序的基本结构; 运算符的类型和含义;【教学难点】运算操作和指令的区别。4.1汇编语言的程序结构和语句格式语言的发展机器语言(Machine Language):二进制表示指令和数据,能被机器直接识别的计算机语言。速度快、占用内存少。汇编语言(Assembly Language):采用助记符表示的程序设计语言。内存空间少,而且执行速度快。高级语言(High Level Language):高级语言则是面向用户的语言。 机器语言 指令中仅包含“0”和“1”。 优点:执行速度快 缺点:难记,编程时容易出错,修改程序时更是如此 不同种机器之间程序不能通用。 原因:不同生产厂家,不同种计算机指令系统不相

3、同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。汇编语言用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,例如: “ADD”代表加法,“MOV”代表数据传递有了助记符,读懂、纠错及维护程序都变得方便了。计算机不认识这些助记符,需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。依赖计算机的硬件结构和指令系统,移植性较差 。高级语言 这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。 经过努力,1954年,第一个完全脱离机器硬件的高级语言FORTRAN问世了,

4、多年来,共有几百种高级语言出现,有重要意义的有几十种,如pascal,c语言。 高级语言也有缺点: 高级语言需要翻译成机器语言,与直接用汇编语言编写的程序比,占用内存大,执行时间长 访问机器的硬件资源比较困难 汇编语言源程序 使用汇编语言编写的程序,不能被机器识别。 汇编与汇编程序 汇编程序是把源程序翻译成与之等价的机器语言程序的翻译程序,相应的过程叫汇编。 连接程序 将目标程序和库文件相连,形成可执行文件。汇编语言源程序.asm汇编程序目标程序.obj连接程序可执行程序.exe汇编语言源程序包含的内容堆栈段:一般为STACK SEGMENTSTACK ENDS数据段:一般为DATA SEGM

5、ENTDATA ENDS代码段:一般为CODE SEGMENTCODE ENDS下面是一个完整的汇编语言程序的框架。 汇编语言源程序汇编语言程序框架分段结构 每个段以段定义伪指令SEGMENT语句开始,以ENDS语句结束。格式形如: 段名 SEGMENT 段名 ENDS 其中,代码段是必须有的;堆栈段如果用户不定义系统会自动分配。不同的段通过ASSUME识别。 ASSUME CS:段名,DS:段名, SS段名, ES:段名 整个源程序的结尾是END语句,汇编程序遇见END就结束。DOS 返回程序开始部分 PUSH DS MOV AX,0 PUSH AX 程序结束前 MOV AX,4C00H I

6、NT 21HDATA SEGMENT;数据段DATA1 DB 0F8H,60H,0ACH,74H,3BHDATA2 DB 0C1H,36H,9EH,0D5H,20HDATA ENDS 【例】要求将两个5字节十六进制数相加,可以编写出以下汇编语言源程序。分析: 没有指令能直接完成两个如此长的十六进制数的相加;需要将数据从最低位开始相加,高位利用低位的进位和本位数相加,直到五个字节的数据都加完,利用循环完成操作。汇编语言源程序举例汇编语言源程序CODE SEGMENT;代码段 ASSUME CS:CODE,DS:DATASTART: CODE ENDS END START MOV AX,DATA

7、MOV DS,AX MOV CX,5 ;循环5次 MOV SI,0 CLC LOOPER: MOV AL,DATA2SI ADC DATA1SI,AL INC SI DEC CX JNZ LOOPERMOV AH,4CH INT 21H;返回DOS汇编语言语句的类型和格式q指令语句:与机器指令对应,汇编程序能将其翻译成目标代码,CPU 可以执行的能完成特定功能的语句。q伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。主要完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。汇编语言的指令语句可以由14部分构成:【标号:】助记符 【操作数1】【操作数n

8、 】 【;注释】 LOOPER: MOV AL,DATA2SI ;取一个字节加数 其中方括号中间的内容可以省略。指令语句的格式 标号实质上是指令的符号地址,用来代表指令在存储器中的地址。 标号后必须带“: :”,如“str1:”。汇编后就会转变为地址,最长31个字符。 只能出现在指令语句中,且标号后必须带冒号只能出现在指令语句中,且标号后必须带冒号 标号汇编语言的伪指令语句可以由14部分构成:【名字】指示符 【操作数1】【操作数n 】 【;注释】 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数 名字是给伪指令取的名称,它用符号地址标识,名字后面不允许带“:”,名字可以是

9、变量名、段名、过程名。 变量名。变量名代表存储器中一个数据区的名字。例如,DATA1、DATA2就是变量名。 伪指令语句格式 段、过程、变量的名字,用来代表它们在存储器中的地址。 只能出现在伪指令语句中,名字后不加冒号名字 data SEGMENTHello DB Hello, world!,0DH,0AH,$data ENDSprog SEGMENT ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOSpro

10、g ENDS END start名字标号汇编语言的一个实例: hello.asm 在指令语句中的第二部分是CPU指令系统中指令的助记符,如MOV、ADC等。 在伪指令语句中的第二部分是伪指令的定义符,如DB、SEGMENT、ENDS、END等。它们在程序中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇编等。助记符操作数即指令的操作对象对指令性语句0,1,2个;对指示性语句根据需要而定;操作数之间以逗号分隔;操作数可以是:寄存器、存储单元、常数或表达式。【举例】AX,DI+BX+10,200,16*8+TABLE操作数以分号开头,可放在指令后,也可单独一行。注意注解的写法。要写指令(段)在

11、程序中的作用,而不要写指令的操作。【举例】以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二种写法要比第一种写法要好。注释操作数的种类操作数的种类包括常量、变量、标号及表达式。 常量就是指令中出现的那些固定值,分为数值常量和字符串常量两类。二进制数,以B结尾。如01001101B。十进制数,如85。十六进制数,以H结尾。如2160H。字符串:用引号括起来的1个或多个字符。如ERROR!, a, 。常量【注意事项】 数值常数的第一位必须是数字,否则汇编时将被看成是标识符,如常数B7H应写成0B7H,FFH应写成0FFH

12、。 字符串常数必须用单引号括起来,否则汇编时将被看成是标识符。例如ABCDEFG和179。单引号内的字符在汇编时都以ASCII的代码形式存放在存储单元中。如上述两字符串的ASCII代码为41H,42H,43H,44H,48H和和31H,37H,39H。常数寄存器 8086/8088CPU的寄存器可以作为指令的操作数。标号 由于标号代表一条指令的符号地址,因此可以作为转移(无条件转移或条件转移)、过程调用CALL以及循环控制LOOP指令的操作数。寄存器与标号标号具有三个属性:段地址、偏移量和类型段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR:

13、标号的属性NEAR表示标号所在语句与转移指令/ 调 用指令在同一码段内,跳转时只需改变IP即可。FAR标号所在语句与转移指令/调用指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR。变量变 量内存中的存储单元或数据区。变量名是存储单元(数据区)的符号地址或名字。变量也有三个属性:u段地址:变量所在段的段地址u偏移量:变量单元地址与段首地址之间的位移量。u类 型:有BYTE、WORD和DWORD三种。变量在程序中作为存储器操作数被引用。使用规则p组成:A-Z(不分大小写), 0-9, ? . _ $;p不能以数字开头,句号(.)只能作为首字符;p长度小于31个字符;p不能与保留字(指令

14、助记符、伪指令、预定义符号等)重名;p不能重复定义。【举例】 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE标号和变量名的使用规则 表达式由运算对象和运算符组成,汇编时,程序对它进行运算,运算结果作为语句中的一个操作数使用,按其性质可分为两种:数值表达式和地址表达式。 数值表达式产生一个数值结果,只有大小,没有属性。 地址表达式的结果是一个存储器的地址,它有三种属性:段、偏移量和类型。 表达式 表达式由运算对象和运算符组成,汇编时,程序对它进行运算,运算结果作为语句中的一个操作数使用,按其性质可分为两种:数值表达式和

15、地址表达式。 表达式表达式是常数、寄存器、标号、变量与运算符的组合。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中常用的运算符有以下6类:算术运算符(Arithmetic Operators)逻辑运算符(Logical Operators)关系运算符(Relational Operators)数值返回运算符(Value-Returning Operators)修改属性运算符(Modifing Attribute Operators)其他运算符(Other Operators)表达式算术运算符 算术运算符可用于数值表达式,运算结果是一个数值。在地址表达式中通

16、常只使用其中的和(加和减)两种运算符。 表达式符号名称运算结果+加法和-减法差*乘法乘积/除法商MOD 模取余余数SHL左移左移后二进制数SHR右移右移后二进制数【举例】数组ARR定义如下 ARR DB 1,2,3,4,5,6,7,8 TRY DB 20 指令为: MOV AX, 30*5 MOV CX,(,(TRYARR) 汇编时,计算表达式形成如下指令: MOV AX,150 MOV CX,8算术运算符逻辑运算符 逻辑运算符只用于数值表达式中对数值进行按位逻辑运算,并得到一个数值结果。对地址进行逻辑运算是没有意义的。表达式符号名称运算结果AND与运算逻辑与结果OR或运算逻辑或结果XOR异或

17、运算逻辑异或结果NOT非运算逻辑非结果【举例】有下列指令 MOV AL, NOT 0FFH MOV BL, 8FH AND 63H MOV AH, 82H XOR 95H 汇编时,计算表达式形成如下指令: MOV AL,0 MOV BL,3H MOV AH, 17H逻辑运算符【注意事项】逻辑运算符作为表达式在汇编时执行;指令助记符则在程序中执行。逻辑运算符和指令助记符中对应的符号完全相同,切勿混淆。逻辑运算符例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX, 3F00H等价。关系运算符 参与关系运算的必须是两个数值或同一段中的

18、两个存储单元地址,但运算结果只可能是两个特定的数值之一:当关系不成立(假)时,结果为0(全0);当关系成立(真)时,结果为0FFFFH(全1)或0FFH。表达式符号名称运算结果EQ相等 结果为真输出全“1” 结果为假输出全“0”NE不等LT小于LE小于等于GT大于GE大于等于【举例】有下列指令 MOV AX, 10H GT 16 MOV BL, 6 EQ 0110B MOV CX, 6 EQ 0110B 汇编时,计算表达式形成如下指令: MOV AX,0 MOV BL,0FFH MOV CX, 0FFFFH关系运算符【举例】某条指令如下: MOV BX,PORT GT 300H 关系运算符若P

19、ORT的值大于300H, 则汇编后指令为: MOV BX,0FFFFH 否则汇编后指令为: MOV BX,0数值返回运算符 又叫分析运算符。用于分析一个存储器操作数的属性,如段值、偏移量和类型等,或取得它所定义的存储空间的大小。表达式符号名称运算结果OFFSET返回偏移地址偏移地址SEG返回段基址段基址TYPE返回元素字节数字节数LENGTH返回变量单元数单元数SIZE返回变量总字节数总字节数OFFSET 格式:OFFSET 变量或标号 OFFSET返回标号或变量的偏移地址值。【例】若DA1为数据段中一个变量名 MOV BX,OFFSET DA1 汇编程序将变量DA1的偏移地址送BX等价于 L

20、EA BX,DA1数值返回运算符SEG 格式:SEG 变量或标号 SEG 用来取标号或变量的段基址。【例】有下列程序 MOV AX,SEG M1 MOV DS,AX 设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令,汇编后指令变为:MOV AX, 0500HMOV DS, AX数值返回运算符TYPE 格式:TYPE 变量或标号 TYPE加在变量前,返回变量的类型属性;TYPE加在标号前,返回标号的距离属性。TYPE运算符的返回数值对照表。数值返回运算符类型返回值变量DB1DW2DD4DQ8标号NEAR-10FFHFAR

21、-20FEH数值返回运算符【例】有下列程序 VAR DW ? ;变量VAR的类型为字ARRAY DD 10 DUP(?) ;变量ARRAY的类型为双字STR DB THIS IS TEST ;变量STR的类型为字节解:据上表可知:MOVAX,TYPE VAR ;(AX)2MOV BX,TYPE ARRAY ; (BX)4MOV CX,TYPE STR ; (CX)1 LENGTH 格式:LENGTH 变量 功能:当变量使用DUP时,LENGTH返回此变量所 包含的单元数,对其它变量则返回1。【例】有下列程序 M1 DW 100 DUP(?) M2 DW 1,2,3 M3 DB A B C D

22、MOV CX,LENGTH M1 MOV BL,LENGTH M2 MOV AL,LENGTH M3数值返回运算符汇编时,形成指令MOV CX,100MOV BL,1MOV AL,1 SIZE 格式:SIZE 变量 功能:SIZE运算符加在变量前,返回该变量包含的 总字节数。SIZE=LENGTH*TYPE【例】有下列程序 M1 DW 100 DUP(?) M2 DW 1,2,3 M3 DB A B C D MOV CX,SIZE M1 MOV BL,SIZE M2 MOV AL,SIZE M3数值返回运算符汇编时,形成指令MOV CX,200MOV BL,2MOV AL,1修改属性 又叫综合

23、运算符(Synthetic Operators)。利用修改属性表达式,可以在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属性和类型属性等。表达式符号名称运算结果段寄存器名段寄存器名 段前缀修改段PTR修改类型属性修改后类型THIS指定类型/距离属性 指定后类型HIGH分离高字节高字节LOW分离低字节低字节SHORT短转移说明-128127字节间转移 段操作符 格式:段前缀:变量或地址表达式 功能:段前缀有段寄存器CS,DS,ES,SS后跟后跟“:”,用 来表示某个变量或地址被修改到哪个段寄存 器提供的段基址中。【例】有下列程序 MOV AX,ES:BX 表示段超越到ES段。修改属

24、性 PTR 格式:类型/距离 PTR 变量或标号 功能:将PTR左边的属性赋给右边的变量或标号。本身不分配存储单元,仅对已分配的存储单元赋予新的属性;常与类BYTE、WORD、NEAR、FAR等连用【例】有下列程序 N1 DB 15H,36H N2 DW 1122H,3344H MOV AX,WORD PTR N1修改属性使N1类型转换成字与AX类型匹配 THIS 格式:变量/标号 EQU THIS 类型/距离 功能:将EQU THIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。【例】有下列程序 FIRST EQU THIS BYTE TABLE DW 200 DUP(?)修改属性 FIRST的偏移地址值与TABLE的偏移地址值相同,区别FIRST变量为字节类型,而TABLE为字类型。 SHORT 格式:SHORT 标号 功能:说明转移类指令中转向地址的属性为短属 性,在-128127之间。【例】有下列程序 L1:JMP SHORT L2 L2:MOV AX,0修改属性【SHORT】 短跳转:跳至的目标地址与当前地址之间差不超过128。【NEAR】 近跳转:跳至的目标地址与当前地址在同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论