汇编语言与接口技术(第三章).ppt
《汇编语言与接口技术(第三章).ppt》由会员分享,可在线阅读,更多相关《汇编语言与接口技术(第三章).ppt(108页珍藏版)》请在三一办公上搜索。
1、汇编语言与接口技术,主讲教师张玉琢,学习要点正确定义各种符号,熟练使用地址表达式熟练掌握汇编语言的常用指令掌握符号指令的寻址方式汇编语言的格式,第三章 汇编语言与汇编程序,第三章 汇编语言与汇编程序,3.2,3.3,符号指令中的表达式,符号指令的寻址方式,常用指令,3.4,伪指令,3.1,3.5,常用系统功能调用和 BIOS,如:0FFH 数据 FFH 符号,符号,汇编中的各种符号由伪指令定义,有常量、变量和标号三类,.1 符号指令中的表达式,1、常量 在汇编时已有确定数值的量,ASCII码字符做数值常量时,需加单引号,.1.1 常量和数值表达式,(1)数值常量,例:AA EQU 10 CC=
2、66 MOV AX,AA;AX=10 MOV AX,CC;AX=66,注:汇编程序不给符号常量分配存储单元,(2)符号常量,2、数值表达式由常量与运算符组成的有意义的式子,结果为数值,在汇编中允许对常量进行三种类型的运算:(1)算术运算 包括,/,MOD(求余)(2)逻辑运算 包括AND,OR,XOR,NOT(3)关系运算 包括:EQ(),NE(),LT(),GT(),LE(),GE(),代表存储器的地址 变量是存储器中的数据或数据区的符号表示变量名是数据的地址或数据区的首地址地址表达式由变量、常量、寄存器(SI、DI、BX、BP,寄存器必须位于 中)和运算符组成,.1.2 变量和地址表达式,
3、如:SEG W;取变量W的段地址,如:OFFSET W;取变量W的偏移地址,1、存储器分段,变量和地址表达式有三重属性,变量的类型有:字节(byte),字(word),双字(dword),四字(qword),十字节(tbyte),一个数据分别占1,2,4,8,10个单元,格式:变量名 DB 表达式,;定义字节变量变量名 DW 表达式,;定义字变量变量名 DD 表达式,;定义双字变量,2、变量的定义,数据定义伪指令指明了变量的类型表达式确定了变量的初值,(1)常量或数值表达式存入数值(2)ASCII字符串(若串长 2,只能用DB定义)存入ASCII码值(3)重复子句,格式:N DUP(表达式)重
4、复N次(N1的正整数),其值由表达式确定(4)地址表达式可用DW或DD定义,当地址表达式为变量或标号名时,若用DW则取它的偏移地址来初始化变量;若用DD则取其偏移地址和段地址来初始化其变量(5)由以上表达式组成的序列,之间用,分隔,表达式可以有以下几种形式:,数据段DATA1定义的变量W1 DW B3B1 DB AB$W2 DW 5,1994HB2 DB 4 DUP(?)D DD EBB3 DB 2 DUP(-1)DB 1 DUP(10,E);重复因子1不能省 DB 13,1,3在附加数据段DATA2中定义的变量如下:EB DB 8 DUP(0)EW DW AB,CD;用DW定义变量时,字符串
5、长 度不超过2个字符,P44 例 画出数据的存储形式,8,0,1、标号的三个属性(1)段地址定义该标号所在段的段首址(2)偏移地址标号所在段的段首址到该标号定义指令的字节距离(3)类型两种:NEAR段内调用,FAR段间调用,标号指令地址的符号表示,也可以是过程名,.1.3 标号,(1)书写在指令助记符前,用:定义,只能为NEAR类型,(2)用PROCENDP伪指令定义过程名,例:CYCLE:MOV AL,SI;定义近标 号CYCLE近标号只能在段内使用!,例:ABC PROC FAR;定义过程名ABC为远标号 ABC ENDP,2、标号的定义,变量、标号以及由其组成的地址表达式均有类型属性。在
6、编程时往往需要临时改变原定义的变量或标号的类型属性,而仍保持它们原来的段地址和偏移地址属性不变 格式:类型 PTR 地址表达式,.1.4 变量和标号类型的变更,例1:B1 DB AB$;定义变量B1为字节类型 WORD PTR B1;临时改变B1的类型为字变量例2:BYTE PTR BX+5;明确地址表达式BX+5的类型为字节例3:A DW 1122H,3344H;变量A为字类型 MOV AX,A MOV AL,BYTE PTR A,第三章 汇编语言与汇编程序,.1,.3,符号指令中的表达式,符号指令的寻址方式,常用指令,.4,伪指令,.2,.5,常用系统功能调用和 BIOS,汇编语言的指令格
7、式:标号:操作码 目的操作数,源操作数;注释 1标号:表示一条指令的符号地址2操作码 规定操作的性质,表示指令所要执行的操作3操作数 表示指令执行过程中操作的对象(操作数/地址码),提供操作数的地址或操作数本身,即从何处获得操作数以及运算结果存在何处寻址方式。分为:立即寻址、寄存器寻址、存储器寻址。4注释 用于解释程序使之便于阅读的任何说明文字。,3.2 符号指令中的寻址方式,因为寄存器在CPU内部,所以采用寄存器寻址可提高运行效率,特别是AX,用它存放运算结果,则执行指令的时间短些,所以最常用,.2.1 寄存器寻址,例:AX=2035H,BX=0178H MOV BX,AX;BX=AX=20
8、35H ADD AL,BL;AL=ADH,BL=78H,AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器AH,AL,BH,BL,CH,CL,DH,DL8位通用寄存器,立即寻址方式只能用于源操作数,主要用来给寄存器或存储器赋初值,也可以与寄存器或存储器操作数进行算术逻辑运算 例:MOV 5,AL,.2.2 立即寻址,例:MOV AL,5;将字节05H送AL,AL=05H MOV AX,18;将字0012H送AX,AX=0012H MOV BL,1;将字节FFH送BL,BL=0FFH,.2.3 直接寻址,注:段地址默认在DS段 例:MOV AX,W 该指令的源操作数地址为 DS:OF
9、FSET W,直接寻址常用已定义的变量表示 例:W2 DW 5,1994H B1 DB AB$MOV AX,W2;AX=FFFBH MOV BX,W22;BX1994H MOV B1+3,AL;(B1+3)=FBH区分立即寻址与直接寻址 从变量中取数据属于直接寻址方式,注意与符号常量区别 例:AA EQU 10 MOV AX,AA;立即寻址,AX=000AH MOV AX,W2;直接寻址,AX=FFFBH,如:MOV CX,BX 如右图所示,若BX=0124H,则该指令执行的操作是将 0124H作为操作数的偏移地址,将当前数据段中0124H单元中的字 取出送CX,即CX=1958H,操作数为带
10、方括号的寄存器(SI,DI,BX,BP),寄存器的内容为操作数据的偏移地址,.2.4 间接寻址,注:寄存器寻址中,寄存器内容即为操作数据;间接寻址属于存储器寻址,寄存器内容为操作数据的偏移地址。只有SI,DI,BX,BP 可用于间接寻址 例:MOV AX,CX 若以SI,DI,BX 间址,约定段的段地址为DS寄存器 例:MOV AX,BX;(DS:BX)AX 若以BP间址,约定段的段地址为SS寄存器 例:MOV AX,BP;(SS:BP)AL,(SS:BP+1)AH,.2.4 间接寻址,操作数据在存储器中,其偏移地址为基址寄存器BX或BP的内容与位移量之和 EA=BX/BP+位移量 例1:MO
11、V BX+BUF+2,AL 或 MOV BUFBX+2,AL;AL(DS:BX+BUF+2)例2:MOV 6BP,AX 或 MOV BP+6,AX;AL SS:BP+6,AH SS:BP+7,3.2.5 基址寻址,3.2.6 变址寻址,操作数据在存储器中,其偏移地址为变址寄存器SI或DI的内容与位移量之和,与基址寻址类似 EA=SI/DI+位移量 例:MOV AX,2SI 或MOV AX,SI+2;(DS:SI+2)AL,(DS:SI+3)AH,3.2.7 基址变址寻址,EA=BX/BP+SI/DI+位移量例:MOV AX,4BX+DI 或MOV AX,BX+DI+4;(DS:BX+DI+4)
12、AL;(DS:BX+DI+5)AH 段地址由基址寄存器确定:以BX为基址寻址,操作数在DS段 以BP为基址寻址,操作数在SS段,操作数据在存储器中,其偏移地址为指令中指定的基址寄存器和变址寄存器的内容及位移量3项之和,例:W为一字变量,B为一字节变量,则:MOV AL,WBX MOV AL,BYTE PTR WBX MOV AX,BSI+5 MOV AX,WORD PTR BSI+5,变量名意义是取变量单元中的数据,所以其类型要与另一操作数的类型一致,在符号指令中的基址,变址,基址变址三种寻址中,其位移量可以是常数或符号常量,还可以是变量名。若是变量名,它给出变量所在段的偏移地址 例:将立即数
13、35H存入字节变量BUF+5单元中 MOV BX,OFFSET BUF+5 MOV BYTE PTRBX,35H;间接寻址 或:MOV BX,5 MOV BUFBX,35H;基址寻址,常以间址、基址、变址访问一片连续的单元 例:B1 DB AB$MOV BX,OFFSET B1;BX0000H MOV AL,BX;AL41H MOV AL,BX1;AL42H,寻址方式小结,寻址方式可分为三大类:立即寻址、寄存器寻址、存储器寻址。直接寻址、间接寻址、基址寻址、变址寻址、基址变址寻址都属于存储器寻址。立即寻址的操作数为立即数;寄存器寻址的操作数为寄存器;存储器寻址的操作数为地址表达式。地址表达式通
14、式为:变量+寄存器+常量 也可表示为:变量寄存器+常量,此种形式理解为,寄存器+常量是变量定义的数据区的位移量。,寻址方式小结,如果地址表达式中只出现寄存器,则一定要加;如果地址表达式中没有寄存器,则可加,也可不加如果地址表达式中只有寄存器,则为间接寻址;如果地址表达式中只有变量,则为直接寻址;如果地址表达式中除有寄存器外还有变量或者常量,则为基址寻址或变址寻址。,存储器存取方式 约定段 段更换 偏移地址,1.存储器寻址时段寄存器的基本约定和段更换见下表所示:(P50表21),取指令 CS 不允许 IP堆栈操作(PUSH,POP,CALL,RET等)SS 不允许 SP数据存取(BP间址、基址除
15、外)DS CS SS ES EABP间址,基址数据存取 SS CS,DS,ES EA字符串处理指令的源串 DS CS,SS,ES SI字符串处理指令的目的串 ES 不允许 DI,3.2.8 存储器寻址中段地址的确定,例:MOV ES:DI,AL;AL ES:DI MOV ES:2000H,AL;AL ES:2000H 其中,ES为前缀字节,当要否认以上默认状态,到其他段寻找操作数时,必须用跨段前缀指明操作数所在段的段寄存器名,2.段超越或段更换,段更换只是用来临时改变变量、标号、地址表达式的段属性,且只在所出现的语句中有效,不改变偏移地址和类型,第三章 汇编语言与汇编程序,3.1,符号指令中的
16、表达式,符号指令的寻址方式,常用指令,3.2,伪指令,3.3,3.4,3.5,常用系统功能调用和 BIOS,数据传送指令 加减运算指令 位操作(逻辑运算)指令 注:学习时注意指令格式及功能,3.3 常用指令,1.数据传送指令 格式:MOV dest,source 目的操作数 源操作数 功能:将一个字节或一个字操作数据从源传送至目的地址中,源保持不变,3.3.1 数据传送类指令,指令特点:将数据从一个部位传送到另一部位.不影响数据的状态标志位.,MOV指令的9种形式:,MOV REG,REGMOV REG,IMMMOV MEM,IMM MOV MEM,REGMOV REG,MEMMOV SEGR
17、EG,REG;CS除外MOV REG,SEGREGMOV SEGREG,MEM;CS除外MOV MEM,SEGREG,一个指令中,两操作数类型必须一致至少1个操作数的类型要明确,不能出现二义性代码段寄存器CS和立即数均不能作为目的操作数源操作数和目的操作数不能同时为存储器操作数 存储器类型由地址表达式的变量名确定立即数的类型属性不明确(字、字节).在立即数送存储器的指令中,若存储器操作数的类型不明确,则必需使用算符来明确其中一个操作数的属性,注意:,格式:XCHG dest,source 功能:将源地址与目的地址中的内容互换 XCHG REG,REG XCHG REG,MEM XCHG MEM
18、,REG,2.数据交换指令,例:数据段中有两个字变量W1和W2,编写程序段将两个字变量互换 W1 DW 1234H W2 DW 5678H用数据交换指令实现:MOV AX,W1;AX=1234H XCHG AX,W2;AX=5678H,W2=1234H MOV W1,AX;W1=5678H仅用MOV指令实现:MOV AX,W1 MOV BX,W2 MOV W1,BX MOV W2,AX,用堆栈操作指令:PUSH W1PUSH W2POP W1POP W2,练习:写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式:寄存器间接寻址基址寻址基址变址寻址,加减运算
19、的操作数:,注:两操作数需类型相同,不能同为存储器加减法指令执行后的结果将影响状态标志Flag,3.3.2 加减运算指令,1.加法类指令,格式:ADD dest,source操作:source+dest dest 即将源操作数据与目的操作数据相加,结果存入目的地址中,源地址内容不变,(2)加进位的加法指令ADC,格式:ADC dest,source操作:dest+source+CFdest;CF为前面指令产生的CF,例 3个32位无符号数12345678H、8765ABCDH和2468FEDCH相加,其和(仍为32位无符号数)放DX和AX中,程序段如下:MOV DX,1234H MOV AX,
20、5678H ADD AX,0ABCDH ADC DX,8765H ADD AX,0FEDCH ADC DX,2468H,格式:INC dest 操作:dest+1dest 例:MOV BX,1 INC BX;BX=0002H该指令不影响CF,对其它标志位的影响同ADD单操作数指令,只能为REG,MEM,类型要明确,不能出现二义性例:INC CL INC SI INC BYTE PTRSI INC 2000H 该指令常用于修改偏移地址和计数次数,(3)增量指令INC,例:有两个无符号字数组,每个数组20个字,分别放在8000H和9000H开始的存储单元中,要求进行数组对应字单元相加运算,得到的和
21、放在8000H开始的内存单元中,然后将AX清0 MOV SI,8000H MOV DI,9000H MOV CX,20 LP1:MOV AX,SI ADD AX,DI MOV SI,AX INC SI INC SI INC DI INC DI DEC CX JNZ LP1;转移指令,结果不为0则转到LP1,否则转到下一条指令 MOV AX,0,格式:DEC dest 操作:dest1dest,(1)减法指令SUB,2.减法类指令,格式:SUB dest,source操作:dest source dest,(2)带借位减指令SBB,格式:SBB dest,source操作:dest source
22、 CF dest;CF为前面指令产生的进位(借位),(3)减量指令DEC,例:2个32位无符号数8765ABCDH 和2468FEDCH相减,其差送DX和AX。程序段如下:,MOV AX,0ABCDH SUB AX,0FEDCH;CF=1 8765 ABCD MOV DX,8765H 2468 FEDC SBB DX,2468H;CF=0 62FC ACF1注:减法类指令对标志位的影响,除将进位改为借位外,与加法类指令相同DEC不影响CF,其余标志均受影响,3.比较指令CMP 格式:CMP dest,source 操作:dest source 执行减操作,只影响标志,不改变操作数 主要用来判断
23、两数的大小是否相等 后面常跟条件转移指令,根据比较结果实现程序的分支,例:在自BLOCK开始的内存缓冲区中,有100个带符号数,要找出其中的最大值,把它存放到MAX单元中。,MOV BX,OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99 AGAIN:CMP AX,BX JG NEXT MOV AX,BX NEXT:INC BX INC BX DEC CX JNZ AGAIN MOV MAX,AX HLT,格式:NEG dest操作:将操作数地址中的内容求补后再送入操作数地址中该指令是求补操作,而不是求补码操作单操作数指令,操作数只能是REG,MEM影
24、响标志,影响规律同减法指令,3.3.3 位操作指令,1.逻辑运算指令,(1)求补指令,若将执行求补指令前后的数均视为补码数,则求补指令将该数变为绝对值相等符号相反的另一个数。例:MOV AX,0FFFBH;AX=FFFBH NEG AX;AX=0005H 例:MOV BX,000AH;BX=000AH NEG BX;BX=FFF6H,格式:NOT dest操作:将操作数地址中的内容逐位取反后再送回操作数地址中注:该指令只是执行求反操作,而不是求反码指令,对符号位也求反 该指令不影响标志位,(2)求反指令NOT,格式:AND dest,source操作:destsourcedest作用:取出目的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 接口 技术 第三
链接地址:https://www.31ppt.com/p-6586378.html