(14)-4.2 伪指令计算机硬件技术_第1页
(14)-4.2 伪指令计算机硬件技术_第2页
(14)-4.2 伪指令计算机硬件技术_第3页
(14)-4.2 伪指令计算机硬件技术_第4页
(14)-4.2 伪指令计算机硬件技术_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计汇编语言程序设计本章内容:汇编语言概述;伪指令;系统功能调用;8086的工作时序。4.2伪指令包括如下内容:1.段定义伪指令SEGMENT/ENDS2.位置计数器$和定位伪指令ORG3.段寻址伪指令ASSUME4.过程定义伪指令PROC/ENDP5.数据定义伪指令与存储器分配6.记录与结构定义伪指令(RECORD、STRUC/ENDS)7.符号定义伪指令(EQU、LABEL)8.程序模块定义伪指令(NAME/END、PUBLIC/EXTRN)4.2伪指令伪指令语句汇编程序并不把它们翻译成机器代码,只是用来指示、引导汇编程序在汇编时做一些操作,它本身不占用存储单元指令语句汇编程序把它们翻译成机器代码,命令8086执行对应操作。4.2.1段定义伪指令SEGMENT/ENDS1.SEGMENT和ENDS

[段名]SEGMENT[定位方式][组合方式][类别名]语句1语句2…

[段名]ENDS定义方式4.2.1段定义伪指令SEGMENT/ENDS(1)段名段名是赋予该段的一个名称,SEGMENT与ENDS成对出现,且前面的段名要相同,段名的取法与文件名、标号及变量名等相同。(2)定位方式LINK程序除完成段与段的联合操作以外,还把联合后得到的各个段互相衔接起来,段与段的衔接方式叫做定位方式,共4种。4.2.1段定义伪指令SEGMENT/ENDS①PARA(未定义的):表示段从一个节的边界,即用十六进制数表示地址的最低位为0处开始。②BYTE(字节):表示段可从任一地址开始。③WORD(字):表示段从地址是一个最低位为0的二进制数开始。④PAGE(页):表示段从一个页的边界,即十六进制数表示地址的最低两位均为0处开始。(2)定位方式4.2.1段定义伪指令SEGMENT/ENDS定位类型起

址BYTE

XXXXXXXXXXXXXXXXXXXXBWORDXXXXXXXXXXXXXXXXXXX0BPARAXXXXXXXXXXXXXXXX0000BPAGEXXXXXXXXXXXX00000000B

X表示可取0或1(2)定位方式4.2.1段定义伪指令SEGMENT/ENDS(3)组合方式程序不同模块中具有相同性质的段若使用同样的段名,则连接时就会把同名的段按照指定的方式组合起来,组合方式共有6种。①NONE(缺省)方式:表示该段与其他模块的段没有任何关系,每段都有自己的基址。这是缺省方式。4.2.1段定义伪指令SEGMENT/ENDS(3)组合方式③STACK方式:连接时把所有STACK方式的同名段连接成一个段,运行时就是SS的装入值,且栈指针SP指向该段的起始地址。②PUBLIC方式:表示该段与其他模块中说明为PUBLIC方式的同名段互相组合成一个逻辑段,公用一个段址,运行时装入同一个物理段中。4.2.1段定义伪指令SEGMENT/ENDS(3)组合方式⑤MEMORY方式:表示该段应定位在所有其他段的上面,若有多个段选用MEMORY,则除第一个之外,其余段均作为COMMON处理。④COMMON方式:表示该段与其它模块中所有已说明为COMMON的同名段共享相同的存储区域,即具有相同的段起始地址,共享的长度为模块同名段中最大长度。4.2.1段定义伪指令SEGMENT/ENDS(3)组合方式⑥AT方式:表示该段按绝对地址定位,其段地址即为其后表达式的值,位移量为0。例:有A,B;C,A,B;A,C共7个段是3个模块中的段,用P,C,S分别代表PUBLIC,COMMON或STACK。组合成4个新段(见下图),新段的长度为被组合在一起的各段长度之和(用PUBLIC和STACK方式时),或是各段中最长段的长度(COMMON方式)。4.2.1段定义伪指令SEGMENT/ENDS(3)组合方式A(P)B(C)C(S)A(P)B(C)AC(S)模块1模块2模块3LINKPCSABCD连接程序的组合处理示意图4.2.1段定义伪指令SEGMENT/ENDS(4)类别名是一个用单引号括起来的字符串,LINK程序把类别名相同的所有段放在连续的存储区域内,先出现的在前,后出现的在后。例:ASEGMENT ‘FAT’ A BSEGMENT ‘BAZ’ E CSEGMENT ‘BAZ’ B DSEGMENT ‘ZOU’ C ESEGMENT ‘FAT’ D

LINK处理前LINK处理后4.2.1段定义伪指令SEGMENT/ENDS2.GROUP伪指令格式:[组名]GROUP[段名][,…]功能:用来把模块中若干不同名的段集合成一个组,使其装入同一个物理段中,组内各段之间的跳转可视为段内跳转。注:组名与段名是一样的取名规则,是代表该组的段地址,格式中的段名也可用表达式SEG[变量]或SEG[标号]。4.2.2位置计数器$和定位伪指令ORG

1.位置计数器$汇编程序专门设置了一个表示当前位置的计数器,称位置计数器$。正常情况下,汇编程序每扫描一个字节,位置计数器的值便加1。

语句:TOPEQU$-STACK含义:当前位置计数器的值$减去STACK代表的起始位置的值,然后把两者的差值赋予符号常量TOP。语句:JMP$

含义:程序跳转到本条指令执行。4.2.2位置计数器$和定位伪指令ORG

2.ORG伪指令格式:ORG[数据表达式]功能:把位置计数器的值设置为表达式的值。ORG后面的一条指令性语句或数据区定义命令即从指定的位置处进行汇编。4.2.3段寻址伪指令ASSUME格式:ASSUME[段寄存器]:[段名],[段寄存器]:[段名],…功能:用于告知汇编程序,段寄存器CS、DS、ES和SS的内容将被设定为那些段或组的段址。4.2.3段寻址伪指令ASSUME(1)段名可以是已定义过的任何段名或组名,也可以是表达SEG[变量]或SEG[标号],还可以是NOTHING。(2)除CS外,DS、ES、SS的设置必须通过指令性语句来完成。注:4.2.3段寻址伪指令ASSUMECODESEGMENTASSUMECS:CODE,DS:DATA,

SS:STACK,ES:NOTHINGMOV AX,DATAMOV DS,AX;设置DSMOV AX,STACKMOV SS,AX;设置SS

CODE ENDS例:4.2.4过程定义伪指令PROC/ENDP过程即是子程序。汇编语言规定必须对过程进行定义,以确定过程的三种属性。过程的属性确定之后,就可对调用指令CALL进行正确汇编,决定是产生近调用指令还是远调用指令。

4.2.4过程定义伪指令PROC/ENDP1.过程的三种属性①段属性:过程所在段的段地址。②偏移量属性:过程所处位置的段内偏移地址。③类型属性(NEAR或FAR)。过程为NEAR或FAR类型。NEAR近过程。该过程与调用指令CALL处在同一个代码段中(段名相同)。FAR远过程。该过程与调用指令CALL处在不同的代码段中(段名不同)。

4.2.4过程定义伪指令PROC/ENDP2.过程的定义使用格式:过程名PROCNEAR/FAR

RET

过程名ENDP…4.2.4过程定义伪指令PROC/ENDP2.过程的定义功能:把具有一定功能的程序段设计成为一个过程(子程序),便于实现模块化的程序设计。注:(1)CALL指令中过程名起着标号的作用。有段属性、偏移量属性和类型属性(NEAR和FAR)。(2)子程序中至少有一个RET。过程名是为该过程指定的一个名称,与变量、标号的定义法相同。4.2.5数据定义伪指令与存储器分配1.变量的三种属性(1)段属性即变量所使用的段;(2)段内偏移属性;(3)变量的类型:字节、字、双字等。DB—定义字节型变量,每个变量分配1个存储单元DW--定义字型变量,每个变量分配2个存储单元DD--定义双字型变量,每个变量分配4个存储单元任何变量均有下列三属性。4.2.5数据定义伪指令与存储器分配2.变量定义及存储器申请伪指令DB/DW/DD功能:定义一变量,并为其分配一定数量的存储单元,变量的初值由表达式的值指定。若初值可任意,则用问号(?)表示。变量名可省。HEXDB5AH;定义字节变量VWORDDW1234H;定义字变量(1)格式1:[变量名]{DB/DW/DD}表达式4.2.5数据定义伪指令与存储器分配2.变量定义及存储器申请伪指令DB/DW/DDBUFFERDW1,0,-1;定义了三个字单元STRDB‘Program’;定义了一个字符串HEX_OFFDWHEX;定义了一个字单元,其初值为已定义变量HEX的偏移量。DVARDD12345678H;定义了一个双字单元注:在存放字变量时,低字节在前,高字节在后。注:在存放字符串时,存储的是字符的ASCII码。4.2.5数据定义伪指令与存储器分配2.变量定义及存储器申请伪指令DB/DW/DDASCDB2DUP(?)功能:分配2个字节单元,初值任意BUFDW100DUP(0)功能:分配100个字单元,初值为0ZIPDB3DUP(0,2DUP(1))功能:存储单元依次初始化为:0,1,1,0,1,1,0,1,1。(1)格式2:[变量名]{DB/DW/DD}DUP表达式4.2.5数据定义伪指令与存储器分配2.变量的使用MOVAL,HEX;取变量HEX的内容送AL寄存器AL。MOVASC[BX],AL;取变量ASC的偏移地址,再与BX寄存器的内容相加,得到存储器操作数的有效地址EA,再将AL寄存器的内容送入该单元。变量经过定义及存储器申请之后,在程序中即可像高级语言一样使用。4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD记录:能进行位处理的8位或16位二进制数。字段:记录中相邻的若干位构成一个字段。记录类型:说明记录中有哪些字段,各字段分别有多少位。(1)记录类型的定义

记录名RECORD字段名:宽度[=初值表达式],…4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD记录名和字段名遵循标号的取名法则。宽度表示该字段占有的二进制位数,最多不能超过16位,初值表达式可省,表示该字段的初值。如:COLORRECORDX:3=5,Y:4=12,Z:9=2551011100011111111

151312980COLORXYZ4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD注:当定义中的字段总位数不能占满整个字节或字时,汇编程序就把所定义的字段与记录的低位端对齐。如:COOLRECORDA:5=17,B:7=127

XXXX100011111111

151211760COOL未定义AB4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD(2)记录类型变量的定义及存储器分配记录可以用记录名称作为操作符。[名称]记录名称<表达式,…>表达式DUP(<表达式,…>)一般格式:4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD如:COLOR1COLOR<,15,9>定义了一个记录型变量,其字段X、Y和Z的初值分别为5(缺省值),15和9,即COLOR1=1011,1110,0000,1001B4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

1.记录定义伪指令RECORD(3)记录的使用定义了记录型变量之后,在程序中可像一个字节或字型变量来使用。如:MOVDX,COLOR1指令执行后,DX=1011,1110,0000,1001B=BE09H4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

2.结构定义伪指令STRUC/END伪指令(1)结构类型的定义结构是一种复杂的数据类型。结构体中包含若干个字段,其数据类型一般为基本的数据类型。使用格式:结构名称

STRUC

[字段名称]{DB/DW/DD}结构名称

ENDS表达式,…表达式DUP(表达式,…)……4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

2.结构定义伪指令STRUC/END伪指令COURSESTRUC

NODD?CNAMEDB'Assembler’SCOREDW0COURSEENDS定义了结构名为COURSE的结构,该结构包含三个成员变量,结构体长度为15(=4+9+2)个字节。4.2.6记录与结构定义伪指令(RECORDSTRUC/ENDS)

2.结构定义伪指令STRUC/END伪指令(2)结构类型变量的定义及存储器分配格式:[变量名]结构名<[字段值表]>如COURSE1COURSE<>定义一个结构变量COURSE1,其初值为缺省。定义了结构型变量之后,在程序中即可使用。格式:结构变量名.字段名如:MOVAX,COURSE1.SCORE

(3)结构的使用4.2.7符号定义伪指令(EQU、LABEL)1.EQU伪指令格式:符号名EQU数值表达式功能:为常量、变量、表达式或其他符号定义一个名字,但不申请分配内存。如:THREEEQU3

TOPEQU$-STACK4.2.7符号定义伪指令(EQU、LABEL)1.EQU伪指令注:使用EQU可使程序简单明了和便于修改。“=”伪操作与EQU相似,其区别是前者可重复定义而后者不能。EQU可用PURGE解除。4.2.7符号定义伪指令(EQU、LABEL)2.LABEL伪指令格式:变量名/标号LABEL[类型]功能:为当前存储单元定义一个指定类型的变量名或标号,其类型为BYTE、WORD、DWORD、结构名、记录名、NEAR和FAR。4.2.7符号定义伪指令(EQU、LABEL)2.LABEL伪指令如定义不同类型的数组:BYTE_ARRAYLABELBYTE;定义字节型数组标号WORD_ARRAYDW50DUP(?);定义字型数组程序中的用法:MOVAL,BYTE_ARRAY[2];将2号字节单元内容送ALMOVAX,WORD_ARRAY[0];将0号字单元内容送AX4.2.7符号定义伪指令(EQU、LABEL)2.LABEL伪指令又如:TRANS_NLABELNEAR

TRANSPROCFAR这样TRANS不仅适合远程调用和转移也可用新名TRANS_N适合近程调用和转移

4.2.8程序模块定义伪指令(NAME/END、PUBLIC/EXTRN)汇编语言程序可划分为许多模块,对每个模块独立地进行汇编及调试(见右图),一般从低层到高层逐步进行。主模块EXTRNPUBLICPUBLICPUBLIC一级子模块1EXTRN一级子模块2EXTRN一级子模块mEXTRN…PUBLIC二级子模块1PUBLIC二级子模块2PUBLICPUBLIC二级子模块n-1二级子模块n…汇编语言程序的模块结构4.2.8程序模块定义伪指令(NAME/END、PUBLIC/EXTRN)1.NAME和END伪指令格式:NAME模块名

END标号功能:定义一个模块,作为一个独立的汇编单位,NAME缺省时模块若使用了TITLE语句,则TITLE语句中前6个字符为模块名,否则源文件名将作为模块名。注:一个模块是一个独立的汇编单位,汇编处理只进行到模块结束语句END为止。

…4.2.8程序模块定义伪指令(NAME/END、PUBLIC/EXTRN)2.PUBLIC伪指令格式:PUBLIC[符号表]功能:用来说明该模块中被定义的那些常量、变量和标号(含过程名)可以被其他模块所引用。如:PUBLICABC,BCD,CDE注:符号必须用“,”分开,且均在本模块中定义过。4.2.8程序模块定义伪指令(NAME/END、PUBLIC/EXTRN)3.EXTRN伪指令格式:EXTRN[符号:类型,…]功能:指出本模块中需要引用但却在其他模块中定义并说明为PUBLIC属性的符号(含常量,变量,标号和过程)。被引用符号的类型说明:BYTE、WORD、DWORD、NEAR、FAR、ABS(符号常量)。如:EXTRNABC:WORD,BCD:ABS,CDE:NEAR4.3汇编语言属性操作符包括如下内容:1.分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)2.属性修改操作符(PTR、THIS、SHORT)4.3.1分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)

1.分析操作符(数值返回操作符)返回的是变量或标号的段地址,偏移地址及类型的属性值。格式:分析运算符变量或标号其运算的结果为一常数4.3.1分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)

1.分析操作符(数值返回操作符)(1)SEG——取段址算符功能:分离出该变量或标号的段址如:MOVAX,SEGBUF(2)OFFSET——取偏移地址算符功能:分离出该变量或标号的偏移地址如:MOVSI,OFFSETBUF4.3.1分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)

1.分析操作符(数值返回操作符)(3)TYPE——取类型算符功能:分离出该变量或标号的类型的字节数。变量类型为BYTE、WORD和DWORD时,返回的值分别为1、2和4;标号类型为NEAR或FAR时,则返回-1或-2。(4)LENGTH——取变量所含存储单元的个数功能:分离出该变量所含存储单元的个数。4.3.1分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)

1.分析操作符(数值返回操作符)注意:在定义该变量时,数据定义伪指令后面的第一个表达式的形式为“nDUP(表达式)”时,取值为n,否则为1。如:BUF1DB100DUP(0)

BUF2DW10,5DUP(2)

BUF3DD5DUP(1,2DUP(0))则LENGTHBUF1=100,LENGTHBUF2=1

LENGTHBUF3=5。4.3.1分析操作符(SEG、OFFSET、TYPE、LENGTH、SIZE)

1.分析操作符(数值返回操作符)(5)SIZE——取变量所含存储区的总字节数。功能:SIZE=LNGTH*TYPE

SIZEBUF1=100(因为TYPEBUF1=1)

SIZEBUF2=2(因为TYPEBUF2=2)

SIZEBUF3=20(因为TYPEBUF3=4)4.3.2属性修改操作符(PTR、THIS、SHORT)1.PTR操作符格式:类型PTR表达式类型:

变量的类型有:BYTE、WORD和DWORD;

标号的类型有:NEAR和FAR;

结构名称表达式:是变量、标号或数值PTR操作符用于暂时修改变量或标号的原有属性。4.3.2属性修改操作符(PTR、THIS、SHORT)1.PTR操作符功能:PTR把它左边的属性指派给它右边的变量、标号或数值,使之产生一个新的存储器地址操作数。新存储器操作数的段地址和段内偏移量与PTR运算符右边的操作数的对应量相同。

PTR给已分配的存储器一个另外的定义但并不重新分配存储器。如:(1)INCBYTEPTR[BX]

(2)ADDDX,WORDPTRFOOB[20]4.3.2属性修改操作符(PTR、THIS、SHORT)2.SHORT操作

SHORT用于条件转移、转移和调用指令中,指出其转移的相对位移量不超过一个字节所能表达的范围。4.3.2属性修改操作符(PTR、THIS、SHORT)3.THIS操作符THIS操作符与PTR操作符有类似的功能,但新的属性放在THIS的右边。格式:THIS类型/距离其中类型是BYTE、WORD和DWORD,距离是

温馨提示

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

最新文档

评论

0/150

提交评论