第2章W微机原理,汇编与接口技术课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1微机原理、汇编与接口技术王燕芳2第二章汇编语言与汇编程序2.22.3符号指令中的表达式符号指令的寻址方式常用指令2.4伪指令2.12.5常用系统功能调用和BIOS31.机器指令用二进制编码形式表示的指示和命令。如:1100110100100001机器语言编写程序烦琐,难记忆,不易理解,易出错2.符号指令由助记符、符号组成,它与机器指令一一对应。如:1100110100100001INT21H3.汇编—机器只能识别机器指令,将汇编语言翻译成机器指令,翻译的过程称作汇编。《汇编程序》——完成汇编任务的程序。引言41EPUSHDS2BC0SUBAX,AX50PUSHAXB84D14MOVAX,144D8ED8MOVDS,AX汇编语言源程序汇编程序目标文件汇编语言源程序——用符号指令书写的程序。编写编译存储5正确定义各种符号,熟练使用地址表达式熟练掌握汇编语言的常用指令掌握符号指令的寻址方式汇编语言的格式学习要点6以字母开头的一串字符为了区别符号和数据,以字母开头的十六进制数,其前面要加一个前导0如:0FFH数据FFH符号符号汇编中的各种符号由伪指令定义,有常量、变量和标号三类2.1符号指令中的表达式7•常用:二进制数、十进制数、十六进制数ASCII字符如:1010B,10,0AH,’A’,’$’,’ABC’1、常量—在汇编时已有确定数值的量•ASCII字符为数值常量时,需加单引号2.1.1常量和数值表达式(1)数值常量8•程序中为经常使用的数值取的名。用EQU或“=”伪指令定义,如:PEQU314P=314注:汇编时,汇编程序不给符号常量分配存储单元(2)符号常量2.1.1常量92、数值表达式(1)数字表达式:由常量与运算符组成;结果为一数值。(2)汇编语言源程序中,允许对常量进行的运算:﹡算术运算包括:+,-,×,/,MOD(求余)﹡逻辑运算包括:AND,OR,XOR,NOT﹡关系运算包括:EQ(=),NE(≠),LT(<),GT(>),LE(≤),GE(≥)2.1.1常量101、标号的三个属性(1)段地址—定义该标号所在段的段首址(2)偏移地址—标号所在段的段首址到该标号定义指令的字节距离(3)类型—NEAR和FAR两种NEAR—段内调用,FAR—段间调用标号:指令地址的符号表示2.1.2标号112.1.3标号2、标号的定义(1)标号只在代码段中定义和使用,(2)两种定义方式:•书写在指令前:用‘:’定义,为NEAR类型,例:CYCLE:MOVAL,[SI];定义近标号CYCLE•用PROC…ENDP伪指令定义过程名例:ABCPROCFAR;定义过程名ABC为FAR型标号ABCENDP12汇编中使用变量和地址表达式来表示存储器的地址。变量是存储器中的数据或数据区的符号表示。变量名是数据的地址或数据区的首地址。地址表达式由变量、标号、寄存器(16位的寄存器SI、DI、BX、BP和32位的通用寄存器,寄存器必须位于[]中)、常量和运算符组成。2.1.3变量1.变量和地址表达式13(1)段地址—定义变量所在段的段首地址.由SEG算符指定如:SEGW;取变量W的段地址(2)偏移地址—变量所在段的段首址到该变量的字节距离.由OFFSET算符指定如:OFFSETW;取变量W的偏移地址2、变量的属性(3)类型—存取该变量中数据的字节数变量的类型有:字节(byte),字(word),双字(dword),四字(qword),十字节(tbyte),一个数据分别占1,2,4,8,10个字节单元14①数据存放规律字节数据---一个字节单元存放字数据---二个字节单元存放双字数据---四个字节单元存放②规定:“低对低,高对高”低位字节的地址为字的地址3、变量存储区中数据的存放15在数据段或附加数据段中用伪指令定义格式:[变量名]DB表达式[,……];定义字节变量[变量名]DW表达式[,……];定义字变量[变量名]DD表达式[,……];定义双字变量[变量名]DQ表达式[,……];定义四字变量[变量名]DT表达式[,……];定义十字节变量数据定义伪指令指明了变量的类型表达式确定了变量的初值4、变量的定义16(1)表达式为常量或数值表达式→存入数值如:W1DW1(2)表达式为ASCII字符串→存入ASCII值如:B1DW‘AB’;用DW定义时,串长不可大于2B2DB‘AB$’;用DB定义时,串长可大于2(3)表达式为重复子句格式:NDUP(表达式)如:B3DB2DUP(0)B4DB2DUP(5,‘A’)4、变量的定义17(4)地址表达式(只适用DW、DD和DF3个伪指令)格式:[变量名]DW地址表达式;取其偏移地址来初;始化变量[变量名]DD地址表达式;取其偏移地址和段;地址来初始化其变量(5)由以上表达式组成的序列,之间用‘,’分隔B5DB1,2,3B6DB’1,2,3’;此行的,不是序列分隔符4、变量的定义18W1DWB2;用B2的偏移地址初始化W1变量B1DBAB$;变量B1用A、B、$的ASCII码初始化W2DW1994HDDDEW;用变量EW的高16位段基址和偏移地址初始DB2DB2DUP(-5,-1)DB1DUP(10,E);重复因子1不能省DB13,1,3在附加数据段DATA2中定义的变量如下:EQDB1234567890ABCDEFHEWDWAB,CD;用DW定义变量时,长度不超过2个字符例画出数据的存储形式19变量、标号以及由其组成的地址表达式均有类型属性。地址表达式的类型属性由其中的变量或标号(一个地址表达式不可能同时含有变量和标号)决定。不含变量或标号,仅含寄存器的地址表达式没有类型属性。在编程时往往需要临时改变原定义的变量、标号或地址表达式的类型属性,或者明确没有类型属性的地址表达式的类型。而仍保持它们原来的段地址和偏移地址属性不变。格式:类型PTR地址表达式如:BYTEPTR[BX+5]WORDPTRB25.地址表达式类型的变更20例:BDB3WDW1122HWORDPTRB;将B临时改变为字类型BYTEPTRW;将W临时改变为字节类型BYTEPTRB+1;例:BYTEPTRBX╳;寄存器有类型属性BYTEPTR[BX]√2.1.4变量和标号类型的变更21第二章汇编语言与汇编程序2.12.3符号指令中的表达式符号指令的寻址方式常用指令2.4伪指令2.22.5常用系统功能调用和BIOS22符号指令的格式:操作助记符[目的操作数][,源操作数];注释操作助记符——指明指令进行什么操作目的操作数或源操作数指明用什么方式寻找操作的数据寻址方式——寻找操作数据存放位置(地址)的方式寻址方式可分为三大类:立即寻址:操作数就是操作数据寄存器寻址:操作数是寄存器名存储器寻址:操作数是地址表达式2.2符号指令中的寻址方式23操作数据在指定的寄存器中2.2.1寄存器寻址例:AX=2035H,BX=0178HMOVBX,AX;BX=AX=2035HADDAL,BL;AL=ADH,BL=78HAH,AL,BH,BL,CH,CL,DH,DL→8位通用寄存器AX,BX,CX,DX,SI,DI,BP,SP→16位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP→32位通用寄存器传送指令助记符目的操作数源操作数24操作数即为操作数据,操作数据就在指令中立即寻址方式只能用于源操作数,主要用来给寄存器或存储器赋初值例:MOV5,AL╳立即数没有类型属性2.2.2立即寻址例:MOVAL,5;将字节05H送AL,AL=05HMOVAX,18;将字0012H送AX,AX=0012HMOVBL,-1;将字节FFH送BL,BL=0FFH25操作数据在存储器中,其偏移地址由指令直接给出(地址表达式中只有变量名和常量)2.2.3直接寻址地址表达式为:变量名或变量名+常量段地址默认在DS中例:MOVAX,W该指令的源操作数的地址为DS:OFFSETW26直接寻址常用已定义的变量表示例:W2DW-5,1994HMOVAX,W2;AX=FFFBHMOVBX,W2+2;BX=1994H区分立即寻址与直接寻址从变量中取数据属于直接寻址方式,注意与符号常量区别例:AAEQU10MOVAX,AA;立即寻址,AX=000AHMOVBX,AA+5;直接寻址,BX=000FH2.2.3直接寻址27若BX=0124H,MOVAX,BX;寄存器寻址,AX=0124HMOVCX,[BX];间接寻址,CX=1958H操作数为带方括号的寄存器:[SI],[DI],[BX],[BP],[EAX]…[ESP]寄存器的内容为操作数据的偏移地址2.2.4间接寻址28间接寻址只有一种形式[寄存器]寄存器寻址中,寄存器内容即为操作数据;间接寻址属于存储器寻址,寄存器内容为操作数据的偏移地址。只有SI,DI,BX,BP和32位的寄存器可用于间接寻址。例:MOVAX,[ECX]MOVAX,[CX]╳若以SI,DI,BX间址,约定段的段地址为DS例:MOVAX,[BX];(DS:[BX])→AX若以BP间址,约定段的段地址为SS例:MOVAX,[BP];(SS:[BP])→AX2.2.4间接寻址29操作数据在存储器中,其偏移地址为基址寄存器BX或BP或32位的寄存器的内容与位移量之和地址表达式:变量名[BX/BP+常量]变量名[BX/BP]常量[BX/BP]或[BX/BP+常量]例1:MOVBL,2[BX]或MOVBL,[BX+2];(DS:[BX+2])→BL例2:MOV6[BP],AX或MOV[BP+6],AX;AX→SS:[BP+6]2.2.5基址寻址302.2.5基址寻址例3:MOVAL,[BX+W1]或MOVAL,W1[BX]以BX的内容作基地址,W1的偏移地址为位移量或者以W1的偏移地址作基地址,BX的内容看作该变量数据区的位移量AL=19H312.2.6变址寻址操作数据在存储器中,其偏移地址为变址寄存器SI或DI或32位的寄存器的内容与位移量之和EA=[SI]/[DI]/[EAX]…/[ESP]+位移量例:MOVAX,2[SI]或MOVAX,[SI+2]执行的操作是(DS:[SI+2])→AX322.2.7基址变址寻址EA=[BX]/[BP]+[SI]/[DI]+位移量例:MOVAX,4[BX+DI]或MOVAX,[BX+DI+4];(DS:[BX+DI+4])→AX段地址由基址寄存器确定:以BX基址,操作数在DS段以BP基址,操作数在SS段操作数据在存储器中,其偏移地址为指令中指定的基址寄存器和变址寄存器的内容及位移量3项之和33例:W为一字变量,B为一字节变量,则:MOVAL,W[BX]╳MOVAL,BYTEPTRW[BX]√MOVAX,B[SI+5]╳MOVAX,WORDPTRB[SI+5]√在符号指令中的基址,变址,基址变址三种寻址中,其位移量可以是常数或符号常量,还可以是变量名。若是变量名,它给出变量所在段的偏移地址,其意义是取变量单元中的数据,所以其类型要与另一操作数的类型一致34例:将立即数35H存入字节变量BUF+5单元中直接寻址:MOVBUF+5,35H间接寻址:MOVBX,OFFSETBUF+5MOVBYTEPTR[BX],35H基址寻址:MOVBX,5MOVBUF[BX],35H;常以间址、基址/变址访问一片连续的单元例:B1DB’AB$’MOVAL,B1[BX];AL=41HMOVAH,B1[BX+1];AH=42H352.2.8比例变址寻址例:MOVEBX,[ESI×4]注:比例因子可为且只可为1、2、4、8操作数据在存储器中,其偏移地址为指令中给出的含有变址寄存器×比例因子的地址表达式的偏移地址362.2.9基址比例变址寻址可将基址变址寻址看作是比例因子为1的基址比例变址寻址。如:MOVECX,[EDI×8+EAX]MOVEAX,[ESI×8+EBX]操作数据在存储器中,其偏移地址为指令给出的地址表达式的偏移地址,地址表达式中既有一个基址寄存器又含有变址寄存器×比例因子371.存储器寻址与地址表达式地

1 / 123
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功