微机接口第七讲补充资料与习题

上传人:y****n 文档编号:248109275 上传时间:2024-10-22 格式:PPT 页数:31 大小:288KB
返回 下载 相关 举报
微机接口第七讲补充资料与习题_第1页
第1页 / 共31页
微机接口第七讲补充资料与习题_第2页
第2页 / 共31页
微机接口第七讲补充资料与习题_第3页
第3页 / 共31页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1 汇编语言数据项、表达式、运算符,数据项,包括常量、变量、标号及表达式,下面分别加以介绍。,1.常量,(1)数字常量,二进制常量,以B结尾,如10101011B,十进制常量,以D结尾或省略(汇编语言中默认无标记数为十进制数),十六进制常量,以H结尾,如0A8C6H.,汇编语言提供基数控制,.RADIX伪指令可以改变,默认进制。,伪指令格式: .RADIXn,要求:n为216范围内任何数值。,功能:把n表示的数值作为默认基数。,例如指令“.RADIX 8”,将缺省基数改为8,这时,mov ah,9就不能写了,因为8进制数字的范,围为0到7.,但是, mov ah,7是可以的,系统把这个7看作8进,制数字.,如果用.radix 8;再出现mov ah,9则出错,但是mov ah,9h是可以的.因为h说明9是16进制数了,(2)字符串常量,用,单引号,引起来的字符或字符串也代表常数。,例:A,BCDE,汇编时被翻译成对应的ASCII码41H和42H,43H,44H,45H。,字符串最大长度为255个字符,(3)符号常量,利用一个标识符表达的一个数值。常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性。,汇编语言提供等价机制,用来为常量定义符号名,符号定义伪指令有“EQU”和“”(后面会解释),2.变量,变量是内存中的数据区,在程序中作为存储,器操作数来使用。,如: data segment,m1 db 5h,data ends,变量有三种属性:,(1)段 值变量定义所在段的段地址,(2)偏移量变量单元地址与段起始地址之,间的位移量。,(3)类 型有字节、字和双字三种。,3.标号,标号是,某条指令所存放单元的符号地址,可作为转移指令或CALL指令的转移地址(在学习子程序时会介绍)。,标号也有三种属性:,段值总是在CS段寄存器中,偏移量概念与变量的偏移量相同,类型分NEAR和FAR两种。,NEAR表示标号所在语句与转移指令或调用指令在同一码段内,只需改变IP即可。对于初学者来说,NEAR,比较常用.,FAR标号所在语句与转移指令或调用指令不在同一代码段内。,若没有对类型进行说明,默认为NEAR。,4.表达式,表达式,是,常量、寄存器、标号、变量与一些运算符组合的序列,分,数字表达式,和,地址表达式,两种。汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址。下面介绍五种运算符:,(1)算术运算符,(2)逻辑运算符,(3)关系运算符,(4)分析运算符,(5)合成运算符,(6)其它运算符,(注意,这里的表达式是,常量表达式,),mov ax, 3+5 是对的,mov ax, bx+cx 是错的,运算符类型,运算符号及说明,算术运算符,+(加) (减) *(乘) /(除) MOD(取余),逻辑运算符,AND(与) OR(或) XOR(异或) NOT(非),移位运算符,SHL(逻辑左移) SHR(逻辑右移),关系运算符,EQ(相等) NE(不相等) GT(大于) LT(小于) GE(大于等于) LE(小于等于),高低运算符,HIGH(高字节) LOW(低字节) HIGHWORD(高字) LOWWORD(低字),移位运算符 /关系运算符/高低运算符考试不作要求,运算符的优先级,(考试不做要求),优先级,运算符,1,() LENGTH SIZE WIDTH MASK,2,PTR OFFSET SEG TYPE THIS :,3,HIGH LOW,4,* / MOD SHL SHR,5,+,6,EQ NE GT LT GE LE,7,NOT,8,AND,9,OR XOR,10,SHORT,(1)算术运算符,有+、-、*、/,以及MOD,其中MOD表示除法运算后得到的余数。例:,19/7的商是2,19 MOD 7则为5(余数),算术运算符可以用于数字表达式,例:,MOV AL,2*7汇编后为B0,0E,算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义,例两个地址的乘或除无意义,而加或减则可以,例:,LEA SI,SUM+3,表示变量SUM的地址加上3得到的和作为新存储器地址。,(2)逻辑运算符,逻辑运算符有AND、OR、XOR和NOT,它们只能用于数字表达式中。,例:MOVCL,36H AND 0FH,经汇编后:MOV CL,06H,8086的指令中也有AND OR XOR NOT,指令,指令,和,逻辑运算符,的区别:,逻辑运算符,在汇编时进行,而,指令,在程序执行时进行的。,例:,AND,DX,81H,AND,0FEH,这里,逻辑运算符AND,在汇编时进行, 汇编后表达式,81H,AND,0FEH 的值为80H.执行前一个AND,指令,时,将,(DX)与立即数80H相与,结果在DX中。,(3)关系运算符,共有6个,它们为:,EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于),关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。,关系为真,结果为0FFFFH,关系为假,结果为0,例:MOV BX,PORT_VAL GE 5,若PORT_VAL的值大于等于5,则汇编后为:,MOV BX,0FFFFH,若PORT_VAL的值小于5, 则汇编后为:,MOV BX,0,(4)分析运算符,它们可以把存储器一些特征作为数值送回。,这些操作符有OFFSET,SEG,TYPE,SIZE及LENGTH。,OFFSET,运算符可以得到一个标号或变量的偏移地址,例:MOV SI,OFFSET STRI1;代表将变量STRI1 处的地址偏移量取到SI中.,注意与 MOV SI,STRI1的差别.,但MOV SI,OFFSET STRI1与 LEA SI,STRI1类似.,SEG,运算符用来取存储单元的段值,data segment,aa db 1,data ends,code segment,assume cs:code,ds:data,start1:,mov ax,data ;等价于 mov ax,seg aa,mov ds,ax,data segment,m1 dw 5a6ch,m2 db 34h,m3 db 56h,data ends,code segment,assume cs:code,ds:data,start: mov ax,data,mov ds,ax,mov ax,1234h,mov ax,seg m1,;这句的效果同mov ax,data,mov ds,ax,; mov ds,ax,lea si,m2,mov bx,offset m2 ;,这句的效果同lea bx,m2,mov ah,4ch,int 21h,code ends lec10_2.asm,TYPE运算符用来取存储器的单元类型,各单元类型对应值如下:同时注意学习书本127页表4.3及相关的例子,存储器单元类型 对应值,DB(字节) 1,DW(字) 2,DD(双字) 4,NEAR -1,FAR -2,若BUFFER1存储区是用如下伪指令定义的:,BUFFER1 DB100 DUP(?),则 TYPEBUFFER1等于1 (注意p128页例4.5),LENGTH运算符用来计算一个存储区的单元(单元可以是字节,字或双字)的数目。,注意:LENGTH返回的存储区必须用复制操作符DUP( )来定义,否则返回值为1。,例:,若FEES被定义为:FEES DW4,5,6,则 MOV CX,LENGTH FEES,汇编后,MOVCX,1,SIZE运算符用来计算一个存储区的字节总数。,例:,若BUFFER2存储区是用如下伪指令定义的: BUFFER2 DW200 DUP(0),则:,TYPEBUFFER2等于2,LENGTHBUFFER2等于200,SIZEBUFFER2等于400,(5)合成运算符,用来建立或临时改变变量或标号的类型或存储器操作的存储单元类型。包括:PTR、THIS、SHORT。,PTR运算符,用来指定或修改存储器操作数的类型,通常和伪指令BYTE、 WORD等连起来使用。,例:MOVBYTE PTRDI,0,MOVWORD PTRDI,0,例:STRI1 DW?;定义为字类型,可用如下语句:,PPEQUBYTE PTR STRI1,QQEQUBYTE PTR STRI1+1,通过PP,QQ把STRI1和STRI1+1又规定为字节类型。,MOVSTRI1,AX是合法的,MOVAL,STRI1是非法的,只能用: MOV AL,PP,或 MOV AL,BYTE PTR STRI1,THIS运算符,可以指定存储器操作数的类型。使用THIS运算符可以使标号或变量具有灵活性。,例:,AREAW EQU THIS WORD,AREAB DB,1,2,3,4,5,6,EQU THIS 又等同于LABEL,因此,上面这两句话又可以写为,AREAW LABEL WORD,AREAB DB,1,2,3,4,5,6,这里,AREAW为字类型而AREAB为字节类型,此时,AREAW的偏移地址和,AREAB的偏移地址相同,但,AREAW是字(WORD)类型,而,AREAB是字节(BYTE)类型,data segment,AREAW EQU THIS WORD,AREAB DB 1,2,3,4,5,6,data ends,code segment,assume cs:code,ds:data,start: mov ax,data,mov ds,ax,mov ax,0,mov al,areab,mov ax,0,mov ax,areaw,;,mov ax,word ptr areab,mov ah,4ch,int 21h,code ends,end start (lec10_3.asm),data segment,areaw equal this word,areab db 1,2,3,4,5,6,data ends,mov ax,areaw ;(ax)=0201,mov bx,areaw+2;(bx)=0403,完整的程序位于lec10_1.asm,SHORT运算符,可以指定一个标号的类型为SHORT(短标号),即标号到引用该标号之间的距离在127127个字节范围内。短标号可以用于转移指令中,使用短标号的指令比使用近程标号的指令少一个字节。,(5) 其它运算符,1)方括号 ,指令中用方括号表示存储器操作数,方括号里的内容表示操作数的偏移地址。例如:,MOV AX,BX;,将(,BX),和(,BX+1),指向的存储器两个单元的内容送,AX,2)段超越运算符“:”,运算符“:”(冒号)跟在某个段寄存器名(DS、ES、SS或CS)之后表示段超越,用来指定一个存储器操作数的段属性,而不管其原来隐含的段是什么。例如:M0V AX,ES:DI;,把ES段中由DI指向的字操作数送(AX),伪指令语句,常用的伪指令有:,数据定义伪指令,符号定义伪指令,段定义伪指令,过程定义伪指令,结束伪指令,数据定义伪指令,1.定义字节单元伪指令DB,2.定义字单元伪指令DW,3定义双字单元伪指令DD,1. 等价“EQU”伪指令,伪指令格式:符号名 EQU 数值表达式,符号名 EQU ,DOSWRITECHAREQU2,CALLDOSEQU ,注:1、仅在汇编源程序时作为替代符号用,不产生任何目标代码,也不占用存储单元,因此符号名没有段、偏移量和类型这3种属性。,2、EQU定义伪指令,同一符号名不能重复定义,,,必须取消(用PURGE伪指令)后才能重复再定义。,符号定义伪指令,2. 等号 “ ”伪指令,格式:符号名数值表达式,功能与EQU伪指令相同,但是可以重复定义符号名。,X7 ;X EQU7是正确的,XX+5;X EQUX+5是错误的,3. LABLE伪指令,格式:名字 LABLE 类型,变量的类型可以是BYTE、WORD、DWORD,标号的类型可以是NEAR或FAR.,LABLE可以使同一个数据区域兼有两种属性,例子位于幻灯片21页,lable 等同于 equal this,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!