收藏 分享(赏)

IBM-PC%20汇编语言%20%20期末复习[1].ppt

上传人:hskm5268 文档编号:5812415 上传时间:2019-03-18 格式:PPT 页数:134 大小:1.10MB
下载 相关 举报
IBM-PC%20汇编语言%20%20期末复习[1].ppt_第1页
第1页 / 共134页
IBM-PC%20汇编语言%20%20期末复习[1].ppt_第2页
第2页 / 共134页
IBM-PC%20汇编语言%20%20期末复习[1].ppt_第3页
第3页 / 共134页
IBM-PC%20汇编语言%20%20期末复习[1].ppt_第4页
第4页 / 共134页
IBM-PC%20汇编语言%20%20期末复习[1].ppt_第5页
第5页 / 共134页
点击查看更多>>
资源描述

1、IBM-PC 汇编语言 期末复习,兰州大学网络教育学院,课程学习目标与要求:,掌握以Intel系列微处理器为基础的PC机的基本结构掌握Intel系列微处理器的指令系统及寻址方式掌握IBM-PC汇编语言设计、编写、调试和运行的方法学会使用DOS和BIOS功能调用及高级汇编语言技术 了解图形、显示、发声和磁盘文件存取编程技术,基础理论第一章 基础知识 第二章 80x86计算机组织 编程工具第三章 80x86指令系统和寻址方式 第四章 汇编语言程序格式 编程方法第五章 循环与分支程序设计 第六章 子程序结构 第七章 高级汇编语言技术 第八章 输入/输出程序设计 第九章 BIOS和DOS中断 实际应用

2、 (自学)第十章 图形与发声系统的程序设计 第十一章 磁盘文件存取技术,教材结构,第一章 基础知识,1.1 进位计数制与不同基数的数之间的转换 1.2 二进制数和十六进制数运算 1.3 计算机中数和字符的表示1.4 几种基本的逻辑运算, 十进制:基数为10,逢十进一,权为10k 12.34 = 1101 + 2 100 + 3 10-1 + 4 10-2 二进制:基数为2,逢二进一,权为2k 11012 = 1 23 + 1 22 + 1 20 = 1310 十六进制:基数为16,逢十六进一,权为16k 918716 = 9 163 + 1 162 + 8 161 + 7 160 八进制:基数

3、为8,逢八进一,权为8k,1.1.1 进位计数制,基数:进位计数制中基本数码的个数 权 :形式为:基数位置(1,0,-1,),数 制 基 数 数 码,二进制 Binary 2 0,1八进制 Octal 8 0,1,2,3,4,5,6,7十进制 Decimal 10 0,1,2,3,4,5,6,7,8,9十六进制 Hexadecimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,方法: (1)降幂法(2)除 法 (1)降幂法步骤:1.写出要转换的十进制数2.写出所有小于此数的各位二进制权3.用要转换的十进制数减去与他最相近 的二进制权,如够减记1,否则记0 4.不断反

4、复,直到该数为0,十进制数转换为二进制数,(2)除 法 整数部分:除二取余,直到商为0 小数部分:乘二取整,直到结果的小数部分为0,或达到精度。 例:N=117D117/2=58 a0=158/2=29 a1=029/2=14 a2=114/2=7 a3=07/2=3 a4=13/2=1 a5=11/2=0 a6=1 得:N=1110101B,1.3计算机中数和字符的表示,真值:日常生活中用+、-加绝对值的方法表示的数,如,+0.1011,-0.1011等等 机器数:计算机中使用的,连同数符一起数字化的数,如 0.1011,1.1011 机器字长:表示机器数所用的位数 有符号数的表示方法有:原

5、码、补码、反码等,计算机中数的表示,原码:数的最高位是符号位,正数时为0,负数时为1,数值部分不变。,反码:正数的反码同原码,负数的反码数值位与原码 相反各位取反,1变0,0变1,0的表示不唯一,补码:将某数x对模M的补数称为x的补码,形式为:x补=M + x (mod=M),0补= 0000 0000 -128补=10000000(定义),0的表示唯一,方法1:根据定义 方法2:符号位不变,其余位按位求反,末位(最 低 位)加1 。,负数补码的求法,求补运算 : 方法: 对一个二进制数按位求反、末位加1,第二章 80x86计算机组织,2.1 80X86微处理器 2.2 基于微处理器的计算机系

6、统构成 2.3 中央处理机 2.4 存储器 2.5 外部设备,计算机的五个组成部分:运算器、控制器、存储器、输入设备、输出设备。 80x86微处理器 是美国Intel公司生产的微处理器系列。微处理器即中央处理机(central processing unit CPU),包括运算器和控制器。 微计算机系统:微处理器+存储器+输入输出设备+系统软件 386微机:80386微处理器+存储器+输入输出设备+系统软件 586微机:80586微处理器+存储器+输入输出设备+系统软件,5总 线 计算机中的一组公共信号线 6数据总线 负责计算机中数据在各组成部分之 间的传送 数据总线宽度:芯片内部数据传送的宽

7、度 外部数据总线宽度:芯片内和芯片外交换数据的宽度 7地址总线 负责指出信息的来源和目的 地址总线宽度:专用于传送地址的总线宽度 寻址空间:处理器可以访问的存储器的最大范围 存储器容量的单位:基本单位210=1024,1024K=1M,1024M=1G 8控制总线 负责控制总线的动作,10工作方式实模式 8086的工作方式 保护模式 80286+,可提供虚拟存储的管理和多任务的管理机制 虚86模式 80386+ 一台机器可同时模拟多个8086处理器的工作 系统管理模式 供系统设计人员实现十分高级功能的工作方式,l算数逻辑部件ALU l控制逻辑 l寄存器组,CPU一般组成,2.3 中央处理机,2

8、.3.2 80x86的寄存器组,1、程序可见的寄存器 汇编语言程序中用到 2、程序不可见的寄存器 系统所用,通用 寄存器,专用 寄存器,段寄 存器,80x86程序可见的寄存器,1、通用寄存器,数据寄存器 AX (accumulator) BX (base) CX (count) DX (data),指针或变址寄存器 SP (stack pointer) BP (base pointer) SI (source index) DI (destination index ),80x86通用寄存器,相同点:每个寄存器的专用特征相同不同点:1、16位可以保存的数据宽度可以是8位、16位,而32位可以保

9、存的数据宽度可以是8位、16位、32位2、16位只有SP、BP、SI、 DI、 BX五个寄存器可用于存放地址,而32位则8个都可以用于存放地址,16位与32位通用寄存器的异同点:,2、专用寄存器,IP (instruction pointer)指令指针寄存器(存放代码段中的偏移地址, 始终指向下一条指令的首地址) FLAGS (PSW program status word)程序状态字寄存器条件码标志控制标志系统标志位,OF 溢出标志 SF 符号标志 ZF 零标志 CF 进位标志 AF 辅助进位标志 PF 奇偶标志,TF 陷阱标志 IF 中断标志 IOPL I/O特权级,DF 方向标志,808

10、6/8088标志寄存器(程序状态字寄存器 PSW),15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,条件码标志: 控制标志: 系统标志位:,OF 溢出标志 DF 方向标志 IF 中断标志 SF 符号标志 TF 陷阱标志 ZF 零标志 CF 进位标志 AF 辅助进位标志 PF 奇偶标志,OF DF IF TF SF ZF AF PF CF,程序状态字(PSW),3、段寄存器,CS (code segment)代码段 DS (data segment) 数据段 SS (stack segment)堆栈段 ES (extra segment) 附加段 FS 附加的数据段

11、GS 附加的数据段,代码段,数据段,堆栈段,附加段,2.4 存储器,计算机存储信息的基本单位是一个二进制位(bit) ,1或0存储器以字节(8bit)为单位存储信息汇编语言的数据类型:字节、字、双字、四字每个字节单元有一个唯一的物理地址,从0编号,顺序加1地址也用二进制数表示(无符号整数,写成十六 进制)16位二进制数可表示216=65536=64K个地址0000H FFFFH 字长16位,一个字要占用相继的两个字节 低位字节存入低地址,高位字节存入高地址 机器以偶地址访问(读/写)存储器 字、 4字单元地址用它的最低字节地址来表示,2.4.2 实模式存储器寻址,实模式即8086/8088的工

12、作方式,工作在20位地址,单任务工作方式下,独占系统所有资源。,8086/8088的数据总线宽度是16位,地址总线宽度是20位,因220=210*210 =1024K=1M(地址范围 00000H FFFFFH) 所以实模式下允许的最大寻址空间为1MB,但由于其数据总线宽度是16位,所以实模式要解决在16位字长的情况下实现20位的寻址。如何解决?,1、存储器地址的分段,每个段的最大长度可达64KB(216KB),段内地址是连续的、线性增长的,允许单个逻辑段在整个1MB存储空间内浮动。,小段(Paragraph):从0地址开始,每16个字节为一小段,共有64K个小段00000H,00001H,

13、,0000EH,0000FH00010H,00011H, ,0001EH,0001FH00020H,00021H, ,0002EH,0002FHFFFF0H, FFFF1H, , FFFFEH,FFFFFH,小段首地址的特征: 在十六进制表示的地址中,最低位为0(即20位地址的低四位为0),逻辑地址 是程序中使用的地址,它由段基址和段内偏移值所组成,段基址与段内偏移值都为16位的二进制数。 物理地址 也叫实际地址或绝对地址,是CPU访问存储器时实际使用的地址,为20位地址。 段地址:段起始地址的高16位 偏移地址:段内相对于段起始地址的偏移值(16位)(有效地址EA),物理地址段基址16段内偏

14、移地址。,16 位 段 地 址,16 位 偏 移 地 址,0000,+,20 位 物 理 地 址,8086/88/286的段寄存器和相应存放偏移地址的寄存器之间的默认组合,段 偏移 CS IP SS SP或BP DS BX、DI、SI或一个16位数 ES DI(用于串指令),80386+的段寄存器和相应存放偏移地址的寄存器之间的默认组合,段 偏移 CS EIP SS ESP或EBP DS EAX 、EBX、 ECX、 EDX、EDI、ESI一个8位数或一个32位数 ES EDI(用于串指令) FS 无默认 GS 无默认,2.5外部设备,外部设备:实现人机交互和机间通讯为目的的一些机电设备,如键

15、盘、鼠标、显示器、硬盘等等,外部设备与主机( CPU 和存储器)的通信是 通过外设接口(Interface)进行的,每个接口包括 一组寄存器。数据寄存器:存放外设和主机间传送的数据 状态寄存器:保存外设或接口的状态信息 命令寄存器:保存CPU发给外设或接口的控制命令,端口(port)地址:又称端口号,是外设中的每个寄存器的编号 I/O地址空间:独立于内存储器,80x86机可达64KB,也即端口地址的范围是:0000FFFFH,主机与外设交换信息的方式:直接查询中断成组传送,BIOS (basic input/output system)基本输入输出系统 DOS (disk operating

16、system)磁盘操作系统,共同点:都是系统编制的子程序,通过终端方式转入所需要的子程序去执行,执行完后返回原来的程序继续执行,不同点:1. BIOS存放在机器的只读存储器ROM中,而DOS是操作系统DOS的一部分2. BIOS的层次比DOS更低,更接进硬件,而DOS例行程序可以一次或多次调用 BIOS,已完成比BIOS更高级的功能,BIOS和DOS简介,第3章 80x86的指令系统和寻址方式,3.1 程序语言简介 3.2 80x86的寻址方式 3.3 程序占有的空间和时间 3.4 80x86的指令系统,CPU是一个可以完成一些基本操作的电子器件。用编码表示CPU的一个基本操作,称为一条指令。

17、全部指令集称为指令系统。,指令系统反映 CPU的基本功能,是硬件设计人员和程序员能见到的机器的主要属性,是硬件构成的计算机系统向外部世界提供的直接界面。,指令、指令系统和程序,(1) 操作码 指明CPU要执行什么样的操作。 是一条指令必不可少的部分,用助记符表示。,(5)8086/8088指令格式简介,操作数来源 指明操作数所在的地方,有三种来源: 操作数在指令中,称立即数操作数如 MOV AL , 9 操作数在寄存器中,称寄存器操作数 指令中给出用符号表示的寄存器名。如 MOV AL , 9 操作数在内存单元中,称存储器操作数或内存操作数指令中给出该内存单元的地址。用 表示存储器操作数如 M

18、OV AL , 2000H ,3.2 80x86的寻址方式,与数据有关的寻址方式 与转移地址有关的寻址方式,存储器寻址(除代码段)四种成分的组合,EA基址+(变址*比例因子)+位移量,位移量:存放在指令中的一个8位、16位或32位的数, 通常是个地址 基 址: 基址寄存器中的内容,通常用来指向数组或字符串的首地址 变 址: 变址寄存器中的内容,通常用来指向数组中的某个元素或字符串中的某个字符 比例因子:386+,值可为1,2,4,8,与变址相乘用于访问元素长度为2、4、8字节的数组,16位/32位寻址时有效地址的四种成分的组成,段跨越前缀用于改变系统所指定的默认段选择规则,有三种情况不允许使用

19、段跨越前缀: 1、串处理指令的目的串必须用ES 2、PUSH指令的目的和POP指令的源必须用SS段 3、指令必须存放在CS段中,* SRC 和 DST的字长一致 MOV AH, 3064H,* CS不能用MOV指令改变 MOV CS, AX,80x86规定:双操作数指令中,只能有一个操作数使用存储器方式,因此,经常有一个变量要送到寄存器。,* 不允许使用AX、CX、DX存放EA MOV AX, CX,* 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BXBP,3.1.2 与转移地址有关的寻址方式,用来确定 转移指令 及 CALL指令 的转向地址。,段内寻址段间寻址,段内直接寻址

20、段内间接寻址,段间直接寻址 段间间接寻址,以 转移(条件转移/无条件转移)指令 为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。 段间:转移指令与转向的目标指令在两个代码段中, (CS)变化。,3.4 80x86的指令系统,80x86的指令系统中共有136种基本指令, 可以分成6个功能组:数据传送(Data transfer) 25算术运算(Arithmetic) 21逻辑运算和移位指令(Logic& Shift) 21串处理(String manipulation) 7控制转移(Control Transfer) 47 处理机控制(Processor Control) 15

21、,指令助记符表1,指令助记符表2,学习指令的要点从以下几个方面来掌握一条指令:指令的助记符指令的格式:操作数的个数、类型(B,W,DW)执行的操作:指令执行后的结果 包括: 哪些寄存器、内存单元的值发生了变化对标志位有无影响,哪些受影响特点及注意事项,MOV指令特点及注意事项:双操作数指令 (注意双操作指令的特点)可进行字节或字传送不允许存储器传送到存储器 MOV BX , value MOV DI, SI MOV AX ,value MOV BX ,AX MOV AL ,SI MOV DI ,AL,什么是堆栈,为什么需要堆栈堆栈是按照先进后出原则组织的一段内存区域存在于堆栈段中,SP在任何时

22、候都指向栈顶。通常用于存放一些重要数据,如:程序的地址、或是需要恢复的数据。 为方便数据的存放和恢复,设置专门的指针,指向堆栈中要操作的单元。段值由 SS 给出,偏移地址由 SP 给出SS 堆栈段寄存器 (stack segment)SP 堆栈指针寄存器 (stack point),堆栈:“先进后出”的存储区,,堆栈使用的场合用堆栈保存恢复信息子程序的调用、返回以及中断调用、返回用堆栈传送数据,加法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF 位表示 无符号数 相加的溢出。 OF 位表示 带符号数 相加的溢出。,*除INC指令不影响CF标志外,均对条件标志位有影响。,例:双精度数的

23、加法(DX) = 0002H (AX) = 0F365H(BX) = 0005H (CX) = 0E024H指令序列 (1) ADD AX, CX (2) ADC DX, BX(1) 执行后,(AX) = 0D389H CF=1 OF=0 SF=1 ZF=0(2) 执行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0,减法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF 位表示 无符号数 减法的溢出。 OF 位表示 带符号数 减法的溢出。,注意: * 除DEC指令不影响CF标志外,均对条 件标志位有影响。, 乘法指令无符号数乘法指令: MUL SRC执行操作:字节操

24、作数 (AX) (AL) * (SRC)字操作数 (DX, AX) (AX) * (SRC)双字操作 (EDX, EAX) (EAX) * (SRC)带符号数乘法指令: IMUL SRC,注意: * AL (AX、EAX) 为隐含的乘数寄存器。 * AX (DX,AX)、 (EDX,EAX)为隐含的乘积寄存器。 * SRC不能为立即数。 * 除CF和OF外,对条件标志位无定义。, 除法指令无符号数除法指令: DIV SRC执行操作: 字节操作 (AL) (AX) / (SRC) 的商(AH) (AX) / (SRC) 的余数字操作 (AX) (DX, AX) / (SRC) 的商(DX) (D

25、X, AX) / (SRC) 的余数双字操作 (EAX) (EDX, EAX) / (SRC) 的商(EDX) (EDX, EAX) / (SRC) 的余数带符号数除法指令: IDIV SRC 注意: * AX、 (DX,AX)、 (EDX,EAX) 为隐含的被除数寄存器。* AL、 (AX) 、(EAX)为隐含的商寄存器。* AH 、(DX) 、 (EDX)为隐含的余数寄存器。* SRC不能为立即数。* 对所有条件标志位均无定义。,逻辑非指令:NOT OPR * OPR不能为立即数 执行操作: (OPR) (OPR) * 不影响标志位 逻辑与指令:AND DST, SRC 执行操作: (DS

26、T) (DST) (SRC)逻辑或指令:OR DST, SRC 执行操作: (DST) (DST) (SRC)异或指令: XOR DST, SRC 执行操作: (DST) (DST) (SRC)测试指令: TEST OPR1, OPR2 执行操作: (OPR1) (OPR2),CF OF SF ZF PF AF0 0 * * * 无定义,根据运算结果设置,逻辑运算指令,逻辑左移 SHL OPR, CNT逻辑右移 SHR OPR, CNT算术左移 SAL OPR, CNT(同逻辑左移)算术右移 SAR OPR, CNT,移位指令,循环移位指令: 循环左移 ROL OPR, CNT循环右移 ROR

27、 OPR, CNT带进位循环左移 RCL OPR, CNT带进位循环右移 RCR OPR, CNT,注意: * OPR可用立即数以外的任何寻址方式 * 对于8086,CNT可以是1或CLCNT=1,SHL OPR, 1CNT1,MOV CL, CNTSHL OPR, CL ; 以SHL为例对于其他机型,CNT可以是CL或CNT(8位立即数) * 条件标志位:CF = 移入的数值1 CNT=1时,最高有效位的值发生变化0 CNT=1时,最高有效位的值不变移位指令:SF、ZF、PF 根据移位结果设置AF无定义循环移位指令:不影响 SF、ZF、PF、AF,OF =,移位指令在程序设计中的使用:移位指

28、令常常用来作乘以2或除以2的操作算术移位指令适用于带符号数运算,SAL用来乘以2 ,SAR用来除以2逻辑移位指令适用于无符号数运算,SHL用来乘以2 ,SHR用来除以2,串的基本概念顺序存放在内存中的一组数据,称为串。用串的首(末)地址、元素类型、串的长度表示。,执行REP MOVS之前,应先做好:(1)首地址(末地址) SI (2)目的串首地址(末地址) DI (3)串长度 CX (4)建立方向标志(CLD使DF=0,STD使DF=1),注意:源串必须在数据段中,目的串必须在附加段中,但源串可以使用段跨越前缀来修改,(SI),低地址,高地址,数据段,附加段,(SI),(DI),(DI),DF

29、=0 向前,DF=1 向后,条件转移指令 使用了相对寻址方式,只可以使用JMP中的短转移和近转移两种格式:8086/80286:只可以使用JMP中的短转移,即只能使用段内直接寻址的8位位移量(-128127)80386+: 可以使用短转移和近转移两种格式,可以转移到段内的任何位置。8086/80286+:均不提供段间转移格式。,所有的条件转移指令都不影响条件码,根据单个条件标志的设置情况转移格式 测试条件 JZ(JE) OPR ZF=1JNZ(JNE) OPR ZF=0JS OPR SF=1JNS OPR SF=0JO OPR OF=1JNO OPR OF=0JP(JPE) OPR PF=1J

30、NP(JPO) OPR PF=0JB(LNAE,JC) OPR CF=0JNB(LAE,JNC) OPR CF=1,比较两个无符号数,并根据比较结果转移*格式 测试条件JNBE(JA) OPR CFZF=0* 适用于地址或双精度数低位字的比较,比较两个带符号数,并根据比较结果转移*格式 测试条件JNLE(JG) OPR (SFOF)ZF=0* 适用于带符号数的比较,测试CX/ECX的值为0则转移格式 测试条件JCXZ OPR (CX)=0JECXZ OPR (ECX)=0,中断指令: INT TYPE 或 INT 执行操作: PUSH (FLAGS)IF0TF0AC0PUSH (CS)PUSH

31、 (IP)(IP)(TYPE*4)(CS)(TYPE*4+2) 溢出中断指令:INTO 执行操作: 若OF=1,(IP)(10H)(CS)(12H),从中断返回指令:IRET/ IRETDIRET执行操作:(IP)POP ( )(CS) POP ( )(FLAGS) POP ( ),注意:* TYPE (0 255) 是中断类型号, 隐含的类型号为3。* INT(INTO)指令执行完,把IF和TF置0,但不影响其它标志位。* IRET指令执行完,标志位由堆栈中取出的值确定。,处理机控制指令,1、标志处理指令:CLC CF0CMC CFCFSTC CF1CLD DF0STD DF1CLI IF0

32、 STI IF1注意: * 只影响本指令指定的标志,进位位置0 进位位置取反 进位位置1方向标志置0 方向标志置1中断标志置0 中断标志置1,第四章汇编语言程序格式,4.1汇编程序功能 4.2伪操作 4.3汇编语言程序格式 4.4汇编语言程序的上机过程,4.1 汇编程序功能,目前常用的汇编程序Microsoft: MASMBorland: TASM注:教材中的例题及说明均已MASM5.0版本为准,汇编程序的主要功能: (1)、检查源程序 (2)、测出源程序的语法错误,并给出出错信息 (3)、产生源程序的目标文件,并给出列表文件 (4)、展开宏指令,4.2.2 段定义伪操作 1、完整的段定义伪操

33、作 格式: 段名 SEGMENT 定位类型, 组合类型, 使用类型,类别段名 ENDS,段定义由伪操作SEGMENT开始、ENDS结束。其中: SEGMENT 和ENDS 必须成对出现,且语句前必须有段名,段名必须相同。SEGMENT和ENDS语句之间可以有指令和其他伪操作,表示存放在该段内存的变量、指令或其他伪操作对该段内存 的处理程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的段值。,ASSUME伪操作 格式 ASSUME 段寄存器:段名 , 段寄存器:段名, 其中: 段寄存器为CS、DS、ES、SS中的一个段名为用伪操作SEGMENT定义过的段名例 ASSUME CS:

34、 cc , DS:aaASSUME 伪操作的作用明确段和段寄存器的关系,指示汇编程序指令中用到的标号、过程及变量所在的段。其中 对标号、过程必须用 CS 段寄存器指示对变量可用 CS、DS、ES、SS 段寄存器指示,若未用ASSUME语句指示指令中用到的标号、过程和变量所在的段, 汇编程序将给出错误信息。ASSUME语句只起指示作用,并无实际的操作。 在程序中引用定义的变量做内存操作数时, 需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。,data_seg1 segment data_seg1 ends ; 定义数据段 data_seg2 segment data_seg2 ends

35、; 定义附加段code_seg segmentassume cs:code_seg, ds:data_seg1, es:data_seg2 start:mov ax, data_seg1mov ds, axmov ax, data_seg2mov es, ax ; 段地址段寄存器 code_seg endsend start,例:,第1,第3,第2,2、存储模型与简化段定义伪操作(MASM5.0以上版本) 简化段定义的特点:虽然没有SEGMENT那样的较完整的 表达能力,但简单易用。,(1)存储模型功能:说明在存储器中是如何安排各个段的,同时也是使用简化段定义的前提条件。格式:.MODEL 模

36、型定义,模型选项,存储模型(7种),Tiny 所有的代码和数据都放在一个段内,其代码和数据都是近访问。用于.COM文件 Small 所有的数据都放在一个64KB数据段,所有的代码都放在一个64KB代码段,其代码和数据都是近访问。最常用 Medium 代码使用多个段,数据在一个64KB数据段,数据是近访问,代码是远访问。 Compact 数据使用多个段,代码在一个64KB数据段,代码是近访问,数据是远访问。 Large 代码和数据使用多个段,其代码和数据都是远访问 Huge 与Large模型相似,但允许数据段超过64KB Flat 允许用32位偏移量,DOS下不能用,只能在OS/2下或其他保护模

37、式的操作系统下使用。,(2)、编写一个独立的汇编语言程序,不需如(1)那样细分,一般采用:.CODE段名 对于一个代码段的模型,段名为可选项;对于多个代码段的模型,则应为每个代码段指定段名 .DATA .STACK大小 默认值是1KB,(5)简化段定义举例,例4.2.MODEL SMALL ;定义存储模型.STACK 100H ;定义堆栈段.DATA ;定义数据段. ;数据定义伪操作.CODE ;定义代码段 START: ;程序开始执行地址MOV AX,DATAMOV DS,AX.MOV AX,4C00HINT 21HEND START ;程序结束,;数据段段地址送DS寄存器,;返回DOS,例

38、4.3.MODEL SMALL ;定义存储模型.STACK 100H ;定义堆栈段.CONST ;定义常数段. ;数据定义伪操作.DATA ;定义数据段. ;数据定义伪操作.CODE ;定义代码段 START: ;程序开始执行地址MOV AX,DGROUPMOV DS,AX.MOV AX,4C00HINT 21HEND START ;程序结束,;段组名作为段地址 装入DS寄存器,;返回DOS,4.2.3 程序开始和结束伪操作,1 . NAME 和 TITLE 伪操作格式 : NAME 模块名格式 : TITLE text(前6个字符/60个字符)在源程序开始可用 NAME 或 TITLE 为模

39、块命名,模块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。模块命名的规则:NAMETITLE源文件名,2. END伪操作格式 END 标号多个程序模块相连,则只有主程序要使用标号, 其他子程序则只用END而不用指定标号作用是指示源程序到此结束。 汇编程序对 END 之后的语句不进行处理。 程序中所有有效语句应放在 END 语句之前。源程序中必须有 END 结束语句。汇编程序对无 END 语句的源程序不进行处理,只给出无 END 语句错误信息。,指示程序的启动地址,即程序的入口处,为了使运行着的程序正确返回到DOS操作系统,有下面几种方式可供参考:,(1)采用

40、DOS的4CH号功能调用 调用方式:MOV AH,4CH ;功能号4CH AHINT 21H ;中断调用 是返回DOS最有效且兼容性最好的方式。,(2)将主程序定义为远过程 在代码段中,按下述方式定义主程序, CSEG SEGMENT ASSUME 主过程名 PROC FARPUSH DSMOV AX,0PUSH AXRET 主过程名 ENDPGND 主过程名,(3)利用20H号中断调用 调用方式:INT 20H注:这种方式在产生扩展名为.EXE的可执行文件中是不能使用的,但可用于小模式扩展名为.COM的可执行文件中作为返回DOS的一种方式。,(4)利用DOS的0号功能调用 调用方式:MOV

41、AH,0INT 21H 注:只有在.COM格式的文件中才可使用,4.2.4 数据定义及存储器分配伪操作,格式 变量名 类型助记符 操作数 ,操作数 , . 用来定义程序中所用的内存操作数。其中 变量名 指示内存操作数的地址(符号地址), 其值是该伪操作中第一个数据项的第一个字节的偏移地址,另外,还有个类型属性表示该语句中每一 个数据项的长度(以字节为单 位),如DB为1,DT为10。类型助记符指示内存操作数的类型(字节、字、双字等)操作数 指示内存操作数的内容汇编程序将定义的操作数,按其类型分配内存单元数,顺序存入变量名指向的内存单元中。,例2: 定义字符串变量( 只能用DB定义 )data

42、SEGMENTstr1 DB TsingHua str2 DB INPUT: , 0dH , 0aH ,$data ENDS,操作数的类型属性的定义 指令中的操作数的类型属性应该一致,1、数据伪操作中的定义,如DB为1,DT为10,2.1、PTR属性操作符格式:type PTR 变量常数表达式type可以是:BYTE,WORD,DWORD,FWORD,QWORD,TBYTE如:OPER1 DB ?,?MOV AX,WORD PTR OPER1MOV AX,DWORD PTR OPER1,可见:同一个变量可以具有不同的类型属性,2、使用PTR和LABEL指定操作数的类型属性,2.2、LABEL伪

43、操作格式:name LABEL typetype可以是:BYTE,WORD,DWORD,FWORD,QWORD,TBYTENEAR,FAR如:BYTE_ARRAY LABEL WORDWORD_ARRAY DW 50 DUP(?),可见:同一个地址可以赋予不同类型的变量名,4.2.5 表达式赋值伪操作EQU,(不占存储单元) 格式:表达式名 EQU 表达式 优点:提高程序的可读性,也使其便于修改CONSTANT EQU 256ALPHA EQU 7BETA EQU ALPHA-2“=”伪操作 (允许重复定义) 格式:变量=表达式EMP=7EMP=EMP+1,4.2.6地址计数器与对准伪操作,1

44、、$ 地址计数器:保存当前正在汇编的指令的偏移地址,每 处理一条指令,其值就加1个值 (该指令的字节数)$用在指令中,表示本条指令的第一个字节的地址 例: JNE $+6 ; 转向地址是JNE的首址+6 $用在伪操作中,表示的是地址计数器的当前值 例:$用在伪操作的参数字段表示地址计数器的当前值ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4,4.3 汇编语言程序格式,汇编语言源程序的语句组成:,汇编语言上机过程D:EDIT ABC.asm D:MASM ABC;有语法错,回EDIT下改该程序 D:LINK ABC;有错,回在EDIT下改程序 D:ABC运行结果错,回EDIT

45、下改程序或在DEBUG下调试,找原因。 D:DEBUG ABC.exe,1、汇编语言文件 ?2、汇编程序 ?3、OBJ文件 ?4、LIST文件 ?5、CRF文件 ?6、MAP文件 ?,1、汇编语言文件 ?2、汇编程序 ?3、OBJ文件 ?4、LIST文件 ?5、CRF文件 ?6、MAP文件 ?,用汇编语言编写的源程序将源文件转换成目标文件的程序(是一种工具)二进制的目标文件同时列出源程序和机器语言程序清单,同时给出了符号表,便 于调试,可有可无给出了用户定义的所有符号,及其所在行号和引用行号给出了每个段在存储器中的分配情况,第七章 高级汇编语言技术,宏汇编重复汇编条件汇编,方法2、当这组指令较

46、短或不适合把它写成一个子程序 时,可以把它义成一个宏,每次需要执行时就去调用这个宏。,问 如果在一个程序中多次使用同一组指令时,为了避免每次都要重写,该如何解决?,方法1、把这组指令写成一个子程序,每次需要执行时 只要调用这个子程序就可以了。,7.1 宏汇编为用户提供更加容易、更加灵活、更加向高级语言靠拢的汇编工具。宏:源程序中一段有独立功能的程序代码。 宏指令:用户自定义的指令。在编程时,将多次使用的功能用一条宏指令来代替。,汇编语言程序语句,指令 伪指令(伪操作) 宏指令,宏定义macro_name MACRO 哑元表 ; 形参/虚参 LOCAL 标号表 ENDM * macro_name 宏指令名(宏名),调用时用。 第一个符号必须是字母(注意与名称的差异)* 哑元表 形参表,哑元之间用逗号隔开 * 如果宏定义体有一个或多个标号,则必须用LOCAL伪操作列出所有的标号。?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报