微机原理与汇编-伪指令_第1页
微机原理与汇编-伪指令_第2页
微机原理与汇编-伪指令_第3页
微机原理与汇编-伪指令_第4页
微机原理与汇编-伪指令_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、段定义伪指令2、变量定义伪指令1.段定义伪指令段定义伪指令指示汇编程序如何按段组织程序和使用存储器。段定义伪指令主要有:

SEGMENT/ENDSASSUMEORG1.段定义伪指令SEGMENT/ENDS格式:段名SEGMENT[定位类型][,组合类型][,字长类型][,类别]

……(段体)……

段名ENDS

任何一个逻辑段从SEGMENT语句开始,以ENDS语句结束。伪指令名SEGMENT和ENDS是本语句的关键字,不可以默认,并且必须成对出现。语句中段名是必选项,定位类型、组合类型、字长类型、类别为可选项。用户自己选定,不能省略,其规定同变量或标号,一个段开始与结尾用的段名应一致。2.段分配伪指令ASSUME

段分配伪指令用来完成段的分配,说明当前哪些逻辑段被分别定义为代码段、数据段、堆栈段和附加段。

1、代码段用来存放被执行的程序;

2、数据段用来存放程序执行中需要的数据和运算结果;

3、当用户程序中使用的数据量很大或使用了串操作指令时,可设置附加段来增加数据段的容量;

4、堆栈段用来设置堆栈。

说明:格式中,ASSUME是伪指令名,是语句中的关键字,不可省略。段寄存器名后面必须有冒号,如果分配的段名不止一个,则应用逗号分开。段名是指用SEGMENT/ENDS伪指令语句定义过的段名。ASSUME伪指令设置在代码段内(只能设置在代码段内),放在段定义语句之后。

格式:ASSUME段寄存器:段名[,段寄存器:段名,…]功能:说明源程序中定义的段由哪个段寄存器去寻址。段寄存器可以是CS,SS,DS,ES,FS或GS。

在用ASSUME语句来完成段的分配时,要注意以下几点:①在一个代码段中,如果没有另外的ASSUME语句重新设置,则原有的ASSUME语句的设置一直有效。②每条ASSUME语句可设置1-6个段寄存器。③可以使用NOTHING将以前的设置删除,例如:

ASSUMEES:NOTHING

;删除对ES与某段的关联设置

ASSUMENOTHING

;删除对全部6个段寄存器的设置④段寄存器的装入。【例1】

DATA

SEGMENT;定义数据段

XX

DB

?

YY

DB

?

ZZ

DB

DATA

ENDS

EXTRA

SEGMENT;定义附加段

RSS1

DW?

RSS2

DW?

RSS3

DD?

EXTRA

ENDS

STACK

SEGMENT;定义堆栈段

DW50

DUP()

TOP

EQUTHISWORD

STACK

ENDS

CODE

SEGMENT;定义代码段

ASSUMECS:CODE,DS:DATA

ASSUMEES:EXTRA,SS:STACK

START:MOVAX,DATA

MOVDS,AX

MOVAX,EXTRA

MOVES,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

……

CODEENDS

ENDSTART例1解析:

在例1中,用SEGMENT和ENDS分别定义了四个段:数据段、附加段、堆栈段和代码段。在数据段和附加段中分别定义了一些数据,在堆栈段中定义了50个字单元的堆栈空间。段分配伪指令ASSUME指明CS寄存器指向代码(CODE)段,DS指向数据(DATA)段,ES指向附加(EXTRA)段,SS指向堆栈(STACK)段,如果一行写不下,可分为两个ASSUME语句来说明。2.变量定义伪指令变量定义伪指令用来定义变量的类型,并为变量中的数据项分配存储单元。变量定义伪指令有两种不同的格式。格式1格式:[变量名]DB/DW/DD/DQ/DT表达式格式2

格式1.[变量名]DB/DW/DD/DQ/DT表达式功能:DB(definebyte):定义一个字节类型的变量,其后的每个操作数均占用1个字节。

DW(defineword):定义一个字类型的变量,其后的每个操作数均占用1个字(2个字节)。

DD(definedoubleword):定义一个双字类型的变量,其后的每个操作数均占用2个字(4个字节)。

DQ(definequadword):定义一个四字类型的变量,其后的每个操作数均占用4个字(8个字节)。

DT(definetenbytes):定义一个十字节类型的变量,其后的每个操作数均占用5个字(10个字节)。其中,各变量定义伪指令都将高位字节数据存放在高地址中,低位字节数据存放在低地址中。格式1又可分为以下几种具体用法:(1)用数值表达式定义变量

【例2】K1DB10,4,10H

K2DW100,100H,-5

K3DD3*20,0FFFDH

变量K1,K2,K3经汇编后的结果如图1所示。图1:(2)用地址表达式定义变量

【例3】RS1DWADDR1

DW

ADDR2

RS2

DDLOOP1

DDLOOP2汇编程序在汇编时,在相应存储区域中存入有关变量或标号的地址值,其中偏移地址或段基址均占一个字,低位字节占用第一个字节地址,高位字节占用第二个字节地址。若用DD定义变量或标号,则偏移地址占用低位字,段基址占用高位字。变量RS1,RS2经汇编后的结果如图2所示。图2:(3)用字符串定义变量字符串必须用单引号引起来,其中字符的个数可以是一个,也可以是多个。注意空格也是字符(ASCII码为20H)。【例4】STRING1

DB

'123'

STRING2

DB

'HOWAREYOU?'

STRING3

DW

'C','DE'

变量STRING1,STRING2,STRING3经汇编后的结果如图3。注:对字符串的定义可用DB伪指令,也可用DW伪指令。用DW和DB定义的变量在存储单元中存放的格式是不同的。用DW语句定义的字符串只允许包含一个或两个字符,如果字符多于两个时,必须用DB语句来定义。图3:(4)用问号(?)定义不确定值的变量可为变量保留空单元,常用来存放运算的结果。

【例5】OPER1DB35H,?,0AH

OPER2DW0C0DH,?

OPER3DD?变量OPER1,OPER2,OPER3经汇编后的结果如图4所示。图4:格式2的说明:与格式1的不同之处在于格式2增加了nDUP(duplicate)用于表示重复次数,同时表达式需用圆括号括起。其中,重复次数n可以是常数,也可以是表达式,它的值应该是一个正整数,数值范围为1~65535,其作用是指定括号中操作数项的重复次数。括号中的操作数项

温馨提示

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

评论

0/150

提交评论