微机原理-第4章汇编语言程序设计.ppt
《微机原理-第4章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理-第4章汇编语言程序设计.ppt(68页珍藏版)》请在三一办公上搜索。
1、1,第4章汇编语言程序设计,本 章 重 点汇编语言源程序的基本语法常用的指示性语句基本的DOS功能调用基本的程序设计,2,本 章 内 容,4.1 汇编语言的格式4.2 语句行的构成4.3 指示性语句4.4 指令语句4.5 汇编语言程序设计及举例,3,4.1.1 8086汇编语言程序的一个例子(P90),MY_DATA SEGMENT;定义数据段SUM DB?;为符号SUM保留一个字节MY_DATA ENDS;定义数据段结束MY_CODE SEGMENT;定义码段 ASSUME CS:MY_CODE,;规定CS和DS的内容 DS:MY_DATAPORT_VAL EQU 3;端口的符号名GO:MO
2、V AX,MY_DATA;DS初始化为MY_DATA MOV DS,AX MOV SUM,0;清SUM单元CYCLE:CMP SUM,100;SUM单元与100相比较 JNA NOT_DONE;若未超过,转至NOT_DONE MOV AL,SUM;若超过,把SUM单元的内容 OUT PORT_VAL,AL;通过AL输出 HLT;然后停机NOT DONE:IN AL,PORT_VAL;未超过时,输入下一个字节 ADD SUM,AL;与以前的结果累加 JMP CYCLE;转至CYCLEMY_CODE ENDS;码段结束 END GO;整个程序结束,4,8086的汇编语言的源程序是分段的,由若干个段
3、形成一个源程序。源程序的一般格式为:NAME1 SEGMENT 语句 语句 NAME1 ENDS NAME2 SEGMENT 语句 语句 NAME2 ENDS END标号(第一条可执行指令),5,4.1.汇编语言的格式,汇编语言源程序的结构,数据段,6,二.段与过程的定义,1.段的定义,2.过程(子程序)的定义,过程定义设计具有一定功能的程序段,或称为子程序。,段内过程的定义:过程名 PROC NEAR,段交叉过程的定义:过程名 PROC FAR,7,标号:前缀 操作码 操作数,操作数;注释名字 伪操作操作数,操作数;注释空格作为间隔,由以上实例可知,每一语句行由4部分组成:,4.2 语句行的
4、构成,指令性语句是计算机可执行的,指示性语句(伪指令)不能执行,用来定义变量,分配存储单元,指示程序开始和结束等,这两种语句的差别:在形式上:带不带冒号,是否可转向它.在本质上:汇编时能否形成对应的机器码.,8,标号:前缀 操作码;注释名字 伪操作操作数,操作数;注释操作数,操作数 标号和名字(标识符)的规定:英文字母、数字及专用字符最大长度不能超过 31 个且不能由数字打头不能用保留字(如寄存器名,指令助记符,伪指令)(P93),由以上实例可知,每一语句行由4部分组成:,4.2 语句行的构成,操作数,操作数,9,(2)字符串常量 用单引号括起来的字符或字符串 汇编时被翻译成对应的ASCII码
5、,数据项操作数包括常量、变量、标号及表达式,1.常量(1)数字常量 二进制常量 以B结尾 十进制常量 以D结尾或省略 八进制常量 以字母Q(或字母O)结尾 十六进制常量 以H结尾,10,变量是内存中的数据区在程序中作为存储器操作数来使用变量有三种属性段 值变量所在段的首地址偏移量变量单元地址与段首地址之间的位移量类 型字节、字和双字,2.变量,11,标号是指令所存放单元的符号地址,可作为转移指令或CALL指令的转移地址。标号也有三种属性:段值总是在CS段寄存器中,偏移量概念与变量同,类型分NEAR和FAR两种。若没有对类型进行说明,默认为NEAR。,3.标号,12,4.表达式,(1)算术运算符
6、+、-、*、/,以及MOD 例 MOV AL,2*7 LEA SI,SUM+3(2)逻辑运算符AND、OR、XOR和NOT 例 MOV CL,36H AND 0FH注意:逻辑运算符也是8086/8088的指令助记符运算符在汇编时进行指令在执行时进行,13,(3)关系运算符EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)关系为真,结果为0FFFFH关系为假,结果为0例:MOV BX,PORT_VAL GE 5,14,(4)取值运算符和属性运算符(P103)取值运算符获得存储器操作数的属性OFFSET获得标号或变量的偏移地址SEG获得标号或变量的段地址
7、例:MOV SI,OFFSET STRI1与 LEA SI,STRI1 类似属性运算符PTR指定操作数的类型例:MOV AL,BYTE PTR VAR,15,(5)其它运算符1)方括号“”表示存储器操作数,方括号里的内容表示操作数的偏移地址。,(2)段超越运算符“:”“:”跟在某个段寄存器名之后表示段超越用来指定一个存储器操作数的段属性,而不管其原来隐含的段是什么。,16,4.3 指示性语句(伪指令),常用的伪指令有:符号定义伪指令数据定义伪指令段定义伪指令过程定义伪指令宏定义伪指令结束语句,17,4.3.1 符号定义语句(P99),1.等值伪指令EQU格式:符号名EQU表达式 或:新符号名
8、EQU 老符号名例:CONSTANTEQU100NEW_PORTEQUPORT_VAL+1注意:EQU伪指令在未解除前,不能重新定义。2.解除伪指令PURGE例:PURGENEW_PORT NEW_PORTEQUPOTR_VAL+8,18,3.等号(=)伪指令与EQU类似,但允许重新定义例:EMP=7;值为7EMP=EMP+1;值为8,19,4.3.2 数据定义伪指令,格式:变量名 伪指令 操作数;注释其中变量名用符号地址表示,后面不能跟冒号伪指令助记符 DB用来定义字节DW用来定义字DD用来定义双字例1:DATA_BYTE DB 10,5,10H DATA_WORD DW 100H,100,
9、-4 DATA_DW DD 2*30,0FFFBH,20,汇编后:,DATA_BYTE,DATA_DW,DATA_WORD,10,5,10H,100H,100,-4,60,0FFFBH,DATA_BYTE DB 10,5,10HDATA_WORD DW 100H,100,-4DATA_DW DD 2*30,0FFFBH,21,例2:操作数可以是字符串STR DBHELLO,STR,H,E,L,L,O,22,?操作数用来保留存储空间,但不存入数据.例3:ABCDB0,1,?,?,?LPIDW?,54,?汇编后:,数据定义中的三个特殊符号:?,DUP,$,23,复制操作符DUP(P101)例4:A
10、BC DB 0,1,3 DUP(?)例5:DO-2 DB 2 DUP(0,1,2,?)与 DO-2 DB0,1,2,?,0,1,2,?等价$:表示的是地址计数器的当前值 例:BUFFER DW 3,4,$+3 设BUFFER的偏移地址为0088H,则汇编后$+3的值为多少,24,例:BUFFER DW 3,4,$+3设BUFFER的偏移地址为0088H,则汇编后如下图所示:,25,例:分析下面申请数据区的存储内容,NUM DB 75H;申请一字节,数为“75H”,ARRY DW 20H DUP(0);申请20H个字,数均为“0”,ADR1 DW NUM;申请一字,预置NUM的偏移地址,ADR2
11、 DD NUM;申请双字,预置NUM的逻辑地址,ADR3 DW ARRY+2;申请一字,预置ARRY的偏移地址加2,设:NUM的段地址为0915H,NUM的偏移地址为0004H。,75,DS:NUM,DS:ARRY,DS:ADR1,DS:ADR2,DS:ADR3,40H 个单元,0400,04001509,0700,0915:0004,0915:0005,0915:0045,0915:0047,0915:004B,0915:0000,26,分析运算符(P.103,也称为数值返回运算符)在源程序中,只对存储器进行操作,读取存储器的属性。,(1)SEG 运算符求取某存储器单元的段地址。例:MOV
12、AX,SEG NUM,(2)OFFSET 运算符 求取某存储器单元的偏移地址。例:MOV AX,OFFSET NUM,(3)TYPE 运算符求取某存储器单元的类型属性。例:MOV BL,TYPE NUM,属性类型,属性值,变量,字节 01H,字 02H,双字 04H,四字 08H,十字 0AH,27,举例:,28,(4)LENGTH 运算符求某存储器/存储器数组的长度(P104)LENGTH运算符返回一个与存储器地址操作数相联系的单元数(所定义的基本单元的个数)。注意:要用LENGTH返回的存储区必须用DUP()来定义,否则返回值为1。分析运算符SIZE返回一个为存储器地址操作数所分配的字节数
13、。一般来说,若一个存储单元操作数X,则 size X=(length X)(type X),(5)SIZE 运算符求某存储器/存储器数组的长度。,29,30,合成运算符,(1)PTR运算符(P.104)格式:类型 PTR 变量/标号/存储器,变量/存储器,类型,标号,BYTE(字节)WORD(字)DWORD(双字),NEAR(短调用)FAR(长调用),PTR举例,NUM1 DB 20H DUP(?)NUM2 DW 10H DUP(0),MOV AX,WORD PTR NUM1 MOV BYTE PTR NUM2,BL,临时修改操作数的属性,并不分配存储器,31,(2)THIS属性运算符伪指令(
14、P106),为当前存储单元定义一指定变量的类型,并不分配存储空间段地址和段内偏移是汇编时的当前值,格式:变量/标号 EQU THIS 类型,例:WBUFFER1 EQU THIS WORD BUFFER1 DB 100 DUP(0),字节操作采用BUFFER1,字操作采用WBBUFFER1,合成运算符,32,4.3.3 段定义语句(P106),因8086/8088 CPU的存储器是分段的,这就需要有段定义语句。与段有关的伪指令有:SEGMENT、ENDS、ASSUME 段定义伪指令的格式如下:段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS例:MY_SEG SEGMENT PAR
15、A AT 1A2BH,33,段定位(P109),表示对逻辑段起始边界的选择,可为:PAGE 段从一个页边界开始(XXX00H,256Bytes/Page)PARA段节边界16倍数地址开始(XXXX0H)DWORD段从一个4倍数地址开始WORD 段从一个偶地址开始BYTE 段可以从任意单元开始完整段定义伪指令的默认定位属性是PARAMY_SEG SEGMENT PARA AT 1A2BH段的起始边界为16倍数地址开始,段地址为1A2BH,34,成对出现前面的段名一致二者之间的部分对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段则是指令及伪指令。段和段寄存器的关系,可由ASSUM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-6284412.html