《微机原理章》PPT课件.ppt
《《微机原理章》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《微机原理章》PPT课件.ppt(122页珍藏版)》请在三一办公上搜索。
1、1,第四章 汇编语言程序设计,汇编语言程序结构概述4.1 汇编语言的程序格式4.2 汇编语言的伪指令语句4.3 DOS系统功能调用和BIOS中断调用4.4 程序设计基本方法4.5 宏汇编及条件汇编,2,汇编语言程序的处理过程,编辑,源程序:文件名.asm,汇编,目标程序:文件名.obj,链接,可执行程序:文件名.exe,调试,运行应用程序,运行错误,错误,错误,错误,负责把汇编源程序翻译成目标程序的一种系统软件。又称汇编程序。不同汇编器的语法和功能相差很多 MASM(宏汇编)MASM4.0 MASM5.0 MASM6.15 TASM,汇编语言概述,选择汇编编译器是开始工作的第一步,链接:LIN
2、K,assembler,3,汇编语言程序设计与执行过程,输入汇编语言源程序 源文件.ASM汇编(编译)目标文件.OBJ链接 可执行文件.EXE调试 最终程序 执行,4,在DOS时代,学习汇编就是学习系统底层编程的代名词,汇编是有特权的语言。WINDOWS就像一堵巨大的墙,把我们和计算机硬件隔离开。对硬件的一些操作被WINDOWS封装到内核中去了。由于保护模式的存在,无法像DOS那样闯入系统内核为所欲为。用汇编语言编制:计算机系统程序、实时通信程序、实时控制程序。WINDOWS下进行加密解密、逆向工程、病毒、木马等有害代码的分析和防治。汇编是唯一的选择。,5,程序设计语言 编译原理(汇编器、解释
3、器、编译器)操作系统形式语言与自动机数据结构、算法,用来控制计算机的动作,语言如何最终控制了计算机的动作-如何把语句变成计算机能”懂”的命令.,计算机如何执行这些动作,程序到底能做什么,不能做什么,怎样能高效地用程序来解决问题,6,例:Hello world!,stacksegment stack;定义堆栈段 dw 512 dup(?)stackends;堆栈段结束datasegment;定义数据段stringdb Hello,world!db 0dh,0ah,$dataendscodesegment;定义代码段 assume cs:code,ds:data,ss:stackstart:mov
4、 ax,data;建立DS段地址 mov ds,ax mov dx,offset string mov ah,9 int 21h mov ah,4ch int 21h;利用功能调用返回DOScode ends;代码段结束 end start;程序结束汇编结束,同时指明;程序起始点,7,段定义、段分配、设置段地址、返回DOS语句及程序结束。汇编源程序由若干段组成,每个段有段名,可为代码段、数据段、堆栈段、附加段。只有代码段是必不可少的,其他类型段可根据程序实际需求决定是否需要。每一段由若干语句行组成。每一行语句有4个字段 名字或标号 操作码 操作数;注释代码段中要有实现退出程序返回DOS系统的语
5、句。整个源程序以END语句来结束,主程序的END语句要指明程序的入口,汇编语言的程序结构,8,汇编语言源程序结构,数据段名 SEGMENT 数据段名 ENDS附加段名 SEGMENT 附加段名 ENDS,堆栈段名 SEGMENT 堆栈段名 ENDS代码段名 SEGMENT 代码段名 ENDS END,9,一、语句的种类和格式,指令语句由CPU指令系统中的指令构成语句,能够生成目标代码(机器码),只出现在程序的代码段中。标号:前缀 指令助记符 操作数,操作数;注释伪指令语句由汇编程序汇编源程序时处理的语句。没有对应的机器码。可完成汇编程序结构的定义、数据的定义和存储区的分配。名字 伪指令助记符
6、操作数,操作数;注释,指令的符号地址,标号后要有冒号,常量名(符号名)、变量名、段名或过程名,其后不加冒号,4.1 汇编语言程序语句的格式,10,标号和名字的 命明规则:,以字母开头由字母AZ(不分大小写)、数字(09)及部分特殊字符(?$和 下划线_等)组成字符串长度不超过31个标识符不能是汇编语言中有特定意义的保留字、助记符、Reg等。,11,二、操作数(数据项、表达式),指令语句的操作数可以是立即数、寄存器和存储器操作数及变量、标号或表达式。伪指令的操作数可以是常数、变量、表达式等,可以有多个,参数之间用逗号分隔。语句操作数有更丰富的表达方式方便:操作数的表示要能充分体现出汇编语言中使用
7、符号操作数和指令助记符的优越性,使程序员能尽可能地减少在存储分配和地址计算方面的工作。本质没变:要能被汇编程序有效地翻译成对应的特定处理器所具有的各种寻址方式。,12,1、常量:汇编时已有确定数值的量,在程序运行期间也不会变化,即固定的值。用于做立即数、端口地址、存储器操作数的组成部分或数据定义语句中给变量赋初值。数字常量:300(300D),01001011B,0A4H 字符串常量:单引号内的12个字符;A=41H,AB=4142H 多于两个字符的字符串。ABC(只能在DB 指令中用),13,变量:专指存放在存储单元中的数据,数据的值是可变的。在程序中以变量名形式出现,是数据在内存中存放地址
8、的符号表示。标号:某条指令的符号地址。是程序转移指令的操作数。变量和标号都和存储器地址相关连。变量和标号都具有三种属性:段属性、偏移量属性、类型属性 变量类型:字节(BYTE)、字(WORD)、双字(DWORD),四字,十字。标号的类型(距离属性):NEAR、FAR,缺省类型为NEAR。,2、变量、标号(存储器操作数),14,3、表达式操作数,表达式用来做操作数表达式由运算符、操作符和运算对象组成运算对象:常量、变量、标号、各种存储器寻址方式运算符、操作符:IBM宏汇编中有5种运算符表达式的值:运算结果。表达式不是指令,由汇编程序对源程序进行汇编时运算,结果作为操作数参加指令规定的操作。,15
9、,IBM宏汇编中有5种运算符,即:算术运算符(Arithmetic operators)逻辑运算符(Logical operators)关系运算符(Relational operators)数值返回(分析运算符,Analytic operators)修改属性(合成运算符,Synthetic operators)其他运算符 方括号:寻址()圆括号:改变运算符优先级,16,表达式运算结果的类型(汇编语言中有2种)数值表达式:在汇编时产生一数值,仅具有大小而无其他属性。可作为指令中的立即数和数据定义伪指令中数据区中的初值使用。地址表达式:它表示存储器地址,地址中存放和数据和指令。具有变量和标号的三种
10、属性。,17,一、数据定义伪指令语句,格式:变量名 数据定义符 操作数,操作数 功能:为某一类型的数据项分配存储单元;可用一个变量名做存储单元的名称(变量名具有三种属性),该变量名指向所分配空间的首单元地址;空间大小由操作数部分决定,也可由操作数初始化存储单元。,初值表,DBDWDD,DQ 定义的变量为4字型(8字节)DT 定义的变量为10字节型,可选的,18,初值表,初值表:用来给出要申请 内存空间的大小,和初值 的多个数据(用逗号分隔)。主要由数值常数、表达式、字符串、?、DUP等组成?表示初值不确定,即未赋初值,实际为0;DUP重复操作符。表示重复初值。,19,数据定义语句的具体形式和功
11、能1、X DB 25H Y DW 4142H Z DD 12345678H A DB?B DW?2、B_TABLE DB 1,4,2,7,16 W_TABLE DW 1122H,3,20,1、算术运算符+-*/MOD 运算对象:常量、标号、变量 可构成数值表达式或地址表达式例:3+4 19 MOD 7 结果为数值 197 L2-L1 同一段内两个标号相减,结果为数值 B_TABLE+1 Y-1,只能做+-,结果为存储单元的地址,MOV AL,B_TABLE+1,21,2、逻辑运算符 AND、OR、XOR、NOT运算对象:只能是常数,结果为数值例 10101010B AND 00001111B=
12、00001010B NOT 11111111B=00000000B AND DX,0ADH AND 0EAH 1111 0000B XOR SUM,22,3、关系运算符运算对象:同为数值,或为同一段内的存储器地址(变量)结果为一数值:关系不成立 为 0 关系成立 为 0FFFFH例:3 GT 4 SUM1 LT SUM2 一般关系运算符和逻辑运算符组合使用 AND BX,(PORT LT 5)AND 30,EQ(=)NE()LT()GT()LE()GE(),23,对存储器操作数的属性进行操作,4、数值返回运算符(分析)5、修改属性运算符(合成)6、其他运算符:表示地址表达式或多重变量的下标值
13、BX+2、M10、M13,24,25,4.2 伪指令语句,宏汇编中的伪指令语句:数据定义语句 DB、DW、DD表达式赋值语句(符号定义)EQU、PURGE、=段定义语句 SEGMENT、ENDS ASSUME过程定义语句 PROC、ENDP程序开始和结束语句 NAME ORG END功能:变量定义、存储器分配、指示程序开始和结束、段定义、段分配等。简单了解4.2.6、内容,26,一、数据定义语句,格式:变量名 助记符 操作数,操作数 功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。为某一类型的操作数分配存储单元;可用一个变量名做存储单元的名称(变量名具有三种属性),该变
14、量名指向所分配空间的首单元地址;操作数:可以是常数、字符串、变量、标号、表达式等。多个操作数用逗号分隔。操作数给出要申请 内存空间的大小,和初值,DBDWDD,DQ DT,可选的,n DUP(操作数,操作数),27,数据定义语句的具体形式和功能1、操作数是常数或表达式 X DB 25H Y DW 4142H Z DD 12345678H A DB?B DW?B_TABLE DB 1,4,-2,7,16 W_TABLE DW 1122H,3*20H,见例4.21,见例4.19,28,2、定义字符串,STRING1 DB A,B,C,D STRING2 DB ABCD,41H,当字符串长度为两个字
15、符时,也可以 用 DW来定义。例:STRING1 DBAB STRING2 DWAB STRING3 DWAB,CD,注意:3个及其以上的字符,只能用DB定义。例:str1 DW abc str2 DD abcd,见例4.20,29,3、重复数据定义操作符 DUP,格式:重复次数 DUP(重复参数)功能:为一个数据区的各单元设置相同的初值例:ALL_ZERO DB 0,0,0,0 ALL_ZERO DB 4 DUP(0)DW 20 DUP(0)DB 3 DUP(22H,11H,?)DB 3 DUP(1,2,3 DUP(0),见例4.22,30,4、当操作数是变量和标号或表达式时可用DW或DD将
16、标号或变量操作数的偏移地址或全地址存入存储器。例:ONE DW DEMO1,DEMO1+3;偏移地址 TWO DD DEMO1;全地址 为数值表达式时 DEMO6 DW DEMO5-DEMO4,注意:变量名在不同场合的用法。,见例4.23,31,5、变量名及其表达式作指令语句的操作数,DEMO1 DB 3 DEMO2 DB 5,7,8,mov al,demo2 mov bl,demo2+2lea bx,demo2 add demo2,2 INC DEMO1;字节加 mov al,demo2bx,一个变量名加/减一个数字后形成新的变量,有相同的类型,变量所指存储单元与原单元地址不同,,类型要匹配
17、,见例4.24,32,二、表达式赋值语句,1、等值语句 EQU格式:符号名 EQU 表达式 功能:给表达式赋予 一个名字。表达式可以是其它的符号名,常量,变量、标号、指令、寄存器名、表达式等。但并不申请内存空间。例:SUM EQU 1 SUM2 EQU SUM+1 A1 EQU BX+SI LD EQU MOV SUM3 EQU SUM2 PORT1 DB 35H;事先定义好的变量 OUT_PORT EQU PORT1;再起个别名,33,2、解除语句 PURGE格式:PURGE 符号1,符号2,符号n例:SUM EQU 212 PURGE SUM SUM EQU 3133、等号语句=格式:名字
18、=参数 功能:与EQU类似,但可对符号再定义例:SUM=1 SUM=2 SUM=SUM+1;SUM=?,34,功能:用于返回变量或标号(存储器操作数)的属性格式:运算符 标号或变量 OFFSET 析取变量或标号的偏移地址 SEG 析取变量或标号的段基址 TYPE 取变量和标号的类型(见表4.2)LENGTH 取所定义变量所包含的元素个数 SIZE 取所定义变量包含的总字节数 LENGTH*TYPE,数值返回运算符,35,例:DEMO1 DW 3,4 DEMO2 DW 6 DUP(9)MOV AX,SEG DEMO1 MOV DS,AX MOV BX,OFFSET DEMO1;LEA BX,DE
19、MO1 MOV BX,TYPE DEMO1;1 MOV CX,LENGTH DEMO2;6 LENGTH DEMO1;1 SIZE DEMO1;1 LEA BX,DI MOV BX,OFFSETDI,36,1、PTR 运算符功能:PTR是类型运算符,它用来说明其后变量或标号的类型。使其临时兼有与原定义所不同的类型属性。但它们原来的段属性和偏移地址属性保持不变。格式:类型 PTR 地址表达式,标号、变量及各种存储器寻址方式,根据地址表达式的不同性质,类型可以是BYTE、WORD、DWORD、NEAR、FAR等。,修改属性(合成)运算符 PTR、THIS 由已存在的存储器操作数生成一个段值和偏移量
20、相同,而类型不同的新的存储器操作数。,37,例:ADD BYTE PTRDI,23HDATA SEGMENT BUF1 DB 30H,60H DATA ENDS L1:MOV AL,BUF1;AL=30H MOV AX,WORD PTR BUF1;AX=6030H BUF2 EQU WORD PTR BUF1 MOV AX,BUF2JMP FAR PTR L1,类型要匹配,38,2、THIS格式:THIS 类型功能:为当前存储单元指定一个新的属性。使用方法:标号或变量名 EQU THIS 类型例:BUF1 EQU THIS BYTE BUF2 DW 1,2,3,4;BUF1是由BUF2新建的存
21、储器操作数,但类型不同。L1 EQU THIS FAR MOV AL,30H JMP L1;在其他段远跳到L13、SHORT 标号 4、段前缀 MOV AX,ES:BX5、HIGH/LOW,它后面能分配的第一个存储单元。,39,指示汇编程序如何按段来组织程序和使用内存区域。SEGMENT/ENDS,ASSUME,ORG,GROUP1、段定义伪指令SEGMENT ENDS 格式:段名 SEGMENT 定位类型 组合类型 分类名 段名 ENDS 段名不可省略,隐含该段的首地址,即段基址,三、段定义语句,SEG1 SEGMENT SEG1 ENDS MOV AX,SEG1 MOV DS,AX,逻辑段
22、内容,即语句序列,40,参数用来增加类型及属性说明定位类型:确定逻辑段的起始边界地址。4种。缺省为PARA,段首址 XXXX0H组合类型:确定在不同模块程序中同名段的组合连接方式。6种。缺省为NONE,独立 通常堆栈段定为 STACK,会自动初始化SS和SP。覆盖方式组合。AT 表达式,由表达式指定段首址的高16位。xxxx0H,但不能用来指定代码段。类别名:为单引号括的字符串。不同模块连接时将相同类别的段组成一个段组,放在连续的内存区域中。如stack,code,data,也可为其它名。,STACK1 segment stack DW 100 dup(0)STACK1 ends,41,PAR
23、A:不要搭接,段的起点从节边界开始(16个字节为1节)BYTE:段的起点从存储器任何地址开始WORD:允许搭接,段的起点从偶地址开始PAGE:段的起点从页边界开始(256个字节 为1页),定位类型,42,组合类型,与其它模块中的同名段在满足定位类型的前提下具有的组合方式:NONE:不组合PUBLIC:依次连接(顺序由LINK程序确定)COMMON:覆盖连接STACK:堆栈段的依次连接,且自动初始化SS和SP。AT 表达式:段定义在表达式值为段基的节边界MEMORY:相应段在同名段的最高地址处。,43,2、段分配语句ASSUME,格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名
24、,功能:定义4个逻辑段,指明段寄存器与段的关系。通知 MASM 用指定的段寄存器来寻址对应的逻辑段。但ASSUME伪指令并未真正将段基址装入相应的段寄存器。ASSUME ES:NOTHING 也可取消关系,44,?段寄存器如何赋值连接程序LINK 和DOS将正确设置CS:IP。DS、ES中的段基址是在程序开头部分写相应的赋值代码(段初始化程序),在执行代码时装入的。堆栈段的定义和SS、SP赋值的几种情况:1、程序中定义堆栈段,并给该段设置了组合类型参数为 STACK,则LINK程序会自动给SS与SP 赋值。用户不用再赋值了。2、程序中定义堆栈段,但没给该段设置组合类型参数 STACK,则要在主
25、程序开头部分写代码给SS与SP赋值。3、不定义堆栈段,连接程序会自动为程序设置堆栈段,位置在程序段前缀里。但堆栈空间大小有限。,45,DATA1 SEGMENT X DB 16 DUP(5)DATA1 ENDSDATA2 SEGMENT Y DB 32 DUP(3)DATA2 ENDSSTACK SEGMENT STACKSTT DB 100 DUP(?)TOP EQU LENGTH STTSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2,SS:STACKSTART:MOV AX,DATA1 MOV DS,AX,例:,把段基址赋给D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理章 微机 原理 PPT 课件
链接地址:https://www.31ppt.com/p-5508278.html