您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 微机原理课件.ppt
第4章综合运算符包括:PTR、THIS、HIGH、LOW、SHORTPTR:对名字或标号的类型属性进行设置格式:类型名PTR变量/标号/地址表达式其中类型名可以是BYTE、WORD、DWORD等,或者是NEAR、FAR。4.1.3:2.表达式与运算符PTR——改变存储器地址操作数的操作类型,但其段地址和偏移地址不变。如:DATA1DW100DUP(?)05A2001085DSMOVAL,DATA1MOVAL,BYTEPTRDATA1MOVAX,DATA1√DATA1×√4.1.3:2.表达式与运算符THIS:用来建立新的存储器地址操作数,但不分配存储单元。新的操作数类型在THIS中指定,而其段地址和偏移量就是汇编时的当前值。格式:THIS类型一般通过EQU伪指令,为符号名赋予一个THIS指定的类型4.1.3:2.表达式与运算符DATA1SEGMENTWBUFFEREQUTHISWORDBUFFERDB12H,34H,00H,91HDATA1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA1MOVDS,AXMOVAL,BUFFERMOVBX,WBUFFER……CODE1ENDSENDSTART1234009185DSBUFFERWBUFFERAL=12HBX=3412H4.1.3:2.表达式与运算符SHORT:用来指定JMP指令中转移地址的属性HIGH与LOW:对数值或地址表达式分离出高字节或低字节。格式:HIGH表达式LOW表达式例如:CONSTEQU4455HMOVAH,HIGHCONST;AH=44HMOVAL,LOWCONST;AL=55H4.1.3:2.表达式与运算符运算符的优先级:当一个表达式中有多个运算符时,先算优先级高的,再算低的,如优先级相同,则按从左至右的顺序运算。参考课本P98表4-34.1.3:2.表达式与运算符4.2汇编程序伪指令伪指令(伪操作)不生成机器代码,只告诉汇编程序如何汇编可完成数据定义、存储区分配、程序开始和结束等功能。包括:符号定义伪指令数据定义伪指令模块定义与连接伪指令过程定义伪指令4.2.1符号定义伪指令为常量或表达式赋符号名。符号名EQU表达式符号名=表达式:允许重复定义符号名LABEL类型PURGE符号1,符号2,…,符号N:解除定义4.2.1符号定义伪指令符号定义伪指令“EQU”:格式:符号名EQU数值表达式符号名EQU字符串;MASM5.x不支持更多例题参考课本P98【例题4-8】如:DATA_PORTEQU3F8HSTAT_PORTEQU3F8H+2SEEDEQU10FUNCEQUSEED*SEED+2*SEED+14.2.1符号定义伪指令符号定义伪指令“=”:格式:符号名=数值表达式它与EQU的区别是EQU不能重复定义符号名,而“=”操作可以重复定义。例如:X=7;等效于:Xequ7X=X+5;“XEQUX+5”是错误的如:X=3Y=6Y=Y*Y-X……MOVAX,Y通过上述操作,最后使Y=33,后面的MOV语句中,当生成目标代码时将用33取代Y。即MOVAX,21H(33D)4.2.1符号定义伪指令LABEL:定义标号名称和属性,它和下一条指令共享存储器单元。符号名LABEL类型BYTE-ARRAYLABELBYTEWORD-ARRAYDW100DUP(?)MOVWORD-ARRAY,0;是把第一个字置为0。MOVBYTE-ARRAY,0;是把第一个字节置为0。4.2.1符号定义伪指令4.2.2数据定义伪指令数据定义伪指令也称为定义变量的伪指令变量实质上是指内存单元的数据,虽然内存单元地址不变,但其中存放的数据可以改变变量需要事先定义才能使用数据定义伪指令为变量申请固定长度的存储空间,并可以同时将相应的存储单元初始化,也可以只分配存储空间而不存入确定的数值定义后的变量可以利用变量名等方法引用其中的数据,即变量的数值定义数据的操作符有:字节定义——DB字定义——DW双字定义——DD四字定义——DQ十字节定义——DT重复定义——mDUP(n)(重复m次个数据n)多个存储单元如果初值相同,可以用复制操作符DUP进行定义:重复次数DUP(重复参数)4.2.2数据定义伪指令变量定义的汇编语言格式为:变量名伪指令初值表变量名为用户自定义标识符,表示初值表首元素的逻辑地址,常称为符号地址。变量名也可以没有初值表是用逗号分隔的参数,主要由常量、数值表达式或“?”组成。其中“?”表示未赋初值4.2.2数据定义伪指令4.2.2:字节变量的定义DB(DefineByte)DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值初值表中每个数据一定是字节量,存放一个8位数据:可以是0~255的无符号数或是-128~+127带符号数也可以是字符串常数字节变量定义实例;数据段Xdb'a',-5db2dup(100),?Ydb'ABC'4.2.2:字节变量的应用moval,X;此处X表示它的第1个数据,故AL←'a'decX+1;对X为始的第2个数据减1,故成为-6movY,al;现在Y这个字符串成为'aBC'4.2.2:字变量的定义DW(DefineWord)DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据是字量,一个字单元可用于存放任何16位数据:一个段地址一个偏移地址两个字符0~65535之间的无符号数-32768~+32767之间的带符号数字变量定义实例;数据段countdw8000h,?,'AB'maxintequ64hnumberdwmaxintarraydwmaxintdup(0)注意:数据定义语句定义的数据在存储器中占有相应的单元,而EQU只是定义了一个数据,在汇编后以实际数据的形式体现在程序中。也就是说,EQU语句不会占有存储单元。4.2.2:双字变量的定义DD(DefineDoubleword)DD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值初值表中每个数据是一个32位的双字量:可以是有符号或无符号的32位整数也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针varddDD0,?,12345678hfarpointDD00400078h4.2.2变量的应用变量具有存储单元的逻辑地址程序代码中通过变量名引用其指向的首个数据通过变量名加减位移量存取以首个数据为基地址的前后数据例题4.2变量的定义和应用4.2.2:例题4.2变量的定义;数据段bvar1db100,01100100b,64h,'d';字节变量:不同进制表达同一个数值,内存中有4个64Hminint=5;符号常量:minint数值为5,不占内存空间bvar2db-1,minint,minint+5;内存中数值依次为FFH,5,0AHdb?,2dup(20h);预留一个字节空间,重复定义了2个数值20Hwvar1dw2010h,4*4;字变量:两个数据是2010H、0010H,共占4个字节wvar2dw?;wvar2是没有初值的字变量4.2.2:例题4.2变量的定义(续)dvardd12347777h,87651111h,?;双字变量:2个双字数据,一个双字空间abcdb’a’,’b’,’c’,?;定义字符,实际是字节变量maxintequ0ah;符号常量:maxint=10stringdb’ABCDEFGHIJ’;定义字符串:使用字节定义DB伪指令crlfsdb13,10,’$’;回车符0DH、换行符0AH和字符'$'=24Harray1dwmaxintdup(0);10个初值为0的字量,可以认为是数组arraydb2dup(2,3,2dup(4));6个字节内容依次为:02030404020304044.2.2:例题4.2变量的应用;代码段movdl,bvar1;DL=100decbvar2+1;bvar2+1=5movabc[3],dl;abc=’abcd’movax,wordptrdvar[0];取双字到DX.AXmovdx,wordptrdvar[2]addax,wordptrdvar[4];加双字到DX.AXadcdx,wordptrdvar[6]movwordptrdvar[8],ax;保存双字的求和结果movwordptrdvar[10],dx4.2.2:例题4.2变量的应用(续)movcx,maxint;CX=10movbx,0;BX=0again:addstring[bx],3;string每个数值加3incbxloopagain;循环leadx,abc;从abc开始movah,9;09H号DOS功能调用int21h;显示结果:abcdDEFGHIJKLMNAME/TITLE:在程序的开始用来定义模块的名字,汇编时从这里开始,可缺少。(P101)格式:NAMEMODULETITLETEXT;指定列表文件的每一页上打印标题4.2.3模块定义与连接伪指令END:表示汇编程序到此结束将源程序翻译成目标模块代码的过程。格式为:END[LABEL]标号(LABEL)指示程序开始执行的起始地址,连接程序据此设置CS和IP值。如果多个程序模块相连接,则只有主程序要使用标号,其他子程序模块只用END而不必指定标号。4.2.3模块定义与连接伪指令————不要糊涂————程序终止和汇编结束是两码事4.2.3模块定义与连接伪指令段定义伪指令:SEGMENT/ENDS在段定义中,SEGMENT和ENDS总是成对使用的格式:段名SEGMENT[定位类型][组合类型][‘类别’]…;本段程序内容(指令语句或伪指令语句)段名ENDS当用于定义数据段、附加数据段和堆栈段时,处于SEGMENT/ENDS伪指令中间的语句,只能包括伪指令语句,不能包括指令语句。一般情况下,带有‘[]’的部分可以不用。但是,如果需要用连接程序把本程序与其他程序模块相连接时,就需要使用这些说明,并且各项的顺序不能变。定位类型:连接时用于指定该段应开始于什么样的物理地址。可选择下列4种之一:BYTE:从当前可用的字节地址XXXXXXXXXXXXXXXXXXXX(任一地址)开始;WORD:从当前可用的字地址XXXXXXXXXXXXXXXXXXX0(偶数地址)开始;PARA(缺省):从当前可用的节地址XXXXXXXXXXXXXXXX0000(16的倍数)开始;PAGE:从当前可用的页地址XXXXXXXXXXXX00000000(256的倍数)开始。其中,1节(paragraph)为16字节,1页为16节即256字节。•合理选择定位类型,可充分利用存储器空间。4.2.3模块定义与连接伪指令组合类型:连接时用于指定同名的各段之间的组合方式。可选择下列6种之一:PUBLICSTACKCOMMONMEMORYAT表达式NONE(缺省)若省略组合类型或说明为NONE类型,则表示各个段不组合,各有自己的段基值。对堆栈段,必须用STACK类型说明,不能省略。4.2.3模块定义与连接伪指令′类别′:是要将组合后的各段按′类别′分类存放,同类别的段将被依次存放在连续的存储区内,但各段仍独立。′类别′是由用户定义的、用一对引号括起来的、长度不超过40个字符的名字(标识符)。典型的类别名:’CODE’,’DATA’,’STACK’等。4.2.3模块定义与连接伪指令ASSUME伪操作是汇编时进行的,它用于在汇编时告诉汇编器,哪个是数据段,哪个是代码段,哪个是堆栈段。只是指定某个段分配给哪一个段寄存器,它并不能把段地址装入段寄存器中,要把段地址装入段寄存器中,就必须在代码段中有对段地址装入相应的段寄存器中的指令。参考课本P103【例题4-17】4.2.3模块定义与连接伪指令定位伪指令ORG:控制数据或代码所在的偏移地址格式:ORG参数例如:ORG100h;从100H处安排数据或程序VECT1DW47A5HORG$+10;偏移地址加10,即跳过10个字节空间汇编语言程序中,符号“$”表示当前偏移地址值ORG伪指令可以放在源程序的任何位置,没
本文标题:微机原理课件.ppt
链接地址:https://www.777doc.com/doc-7491572 .html