版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4.1 汇编程序功能 4.2 伪操作 4.3 汇编语言程序格式 4.4 汇编语言程序的上机过程,第四章 汇编语言程序格式,4.1 汇编程序的功能,汇编语言 源文件(.ASM),汇编程序 (MASM或ASM),目标代码文件.BOJ,列表文件.LST,交叉索引文件.CRF,翻译,连接程序 LINK,. EXE 文件,编辑程序 输入,EDIT、PE、ED,可直接执行,连接目标文件、库件和其它目标文件,汇编程序的功能: 汇编程序对源程序进行两遍扫视 1、检查源程序 2、测出源程序中的语法错误,并给出错误信息。 3、产生目标程序,也可给出列表程序和交叉索引程序 4、扩展宏指令,4.2 伪操作(伪指令),
2、完成处理器选择、定义程序模块、定 义数据、分配存储区、指示程序结束等,4.2.1 处理器选择伪操作,. 8086 ;选择8086指令 . 286 ;选择80286指令 . 286P ;选择8086指令 . 386 ;选择保护方式下的80286指令 . 386P ;选择保护方式下的80386指令 . 486 ;选择80486指令 . 486P ;选择保护方式下的80486指令 . 586 ;选择Pentium指令系统 . 586P ;选择保护方式下的Pentium指令系统,缺省值,段定义的一般格式:, SEGMENT 定位类型组合类型使用类型类别, ENDS,段开始语句,段结束语句,例:一个简单
3、的程序段 CODE SEGMENT MOV AX,0 CODE ENDS,1、完整的段定义伪指令 SEGMENT,4.2.2 段定义伪操作, 定位类型(align_type),定位类型指出了对当前段起始地址的要求,有4个选项,PAGE 指定起始地址的低8位是0,即其值能被256整除(称页边界) PARA 指定起始地址的低4为是0,即其值能被16整除(称段边界) WORD指定起始地址的最低位是0,即其值能被2整除(称为字边界) BYTE 指定起始地址是任意值 DWORD其值能被4整除(双字边界),缺省定位,定位类型是用来确定程序段与程序段之间的衔接,如BYTE 使得当前段紧接前一段,而PAGE可
4、能导致最大的段间隔, 组合类型(combine_type),组合类型告诉连接程序本段可按某种方式连接,PUBLIC告诉连接程序本段与其它同名同类别 的段连接起来,公用一个起始点。 STACK 表示是堆栈段,组合类型同上。 NONE 表示本段不与任何段连接。 COMMON表示本段与同名同类别的段共用同一段地址, 即同名同类段相重叠。 MEMORY本段连接时定位在所有段之上,即高地址处。 AT 表达式表示本段定位在表达式值指定的段地址处。,隐含组合类型,一个源程序至少有一个堆栈段,返回, 使用类型(use_type),USE16 使用16位寻址方式 USE32 使用32位寻址方式,缺省值,段长度不
5、超过64KB,段长度不超过 4GB, 类别名,类别名是由程序员指定的字符串,没有给出类别时, 这个段的类别就为空。,例:某个源程序,格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 功能:告诉汇编程序在汇编时,段寄存器的符号基址,段寄存器说明伪指令ASSUME,4.2.3 程序开始和结束伪指令,3、 列表伪指令,格式: TITLE 标题 ;为列表文件每页第一行定义标题 SUBTTL 小标题 ;为列表文件每页定义小标题,大标题之后 PAGE 行数,行字数;为列表文件定义每页行数,每行字符数。,缺省值是66行,80列,NAME、TITLE伪指令不是每个程序必须的, 视需要而选择,4
6、.2.4 数据定义及存储器分配伪操作,1、DB定义字节伪指令,格式:名字 DB 功能:表达式值或项表中的每一项是一个字节数, 它们从符号名地址开始按字节连续存放。,例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,6,?,2*3,可以使用重复操作符DUP如: BUFFER DB 8 DUP(0),2、 DW定义字伪指令,格式:名字 DW 功能:表达式值或项表中的每一项是一个字数, 它们从符号名地址开始按字连续存放。,例:FLAG DW 2FCDH,24H DW ?,3、 DD定义四字节伪指令(双字),格式:名字 DD 功能:表达式值或项表中的每一项是四个字节数,它们 从
7、符号名地址开始按四字节从低地址连续存放。,5、 DT定义10字节伪指令指令,例:,DAT DB 10,10H WORDD DW 100H,? ARRAY DB 2 DUP(2,3) AAA DD 0FFFDH,DUP可以嵌套如: ARRAY DB 100 DUP(0,2 DUP(1,2),3),变量的类型属性(type attribute),DAT1 DB 1,5,? DAT2 DW 1234H,? ,符号地址(变量),类型是字节BYTE,类型是字WORD,属性操作符,1、PTR,格式: type PTR expression 功能:给已分配的存储器地址赋予另一种属性,BYTE、WORD DW
8、ORD、 NEAR、FAR等,;(AX)=0501H ;(BL)=34H,4.2.5 表达式赋值伪指令EQU,格式: EQU 功能:用符号来代表表达式的内容,1、赋值语句EQU,表达式可以是常数、数值表达式、字符串、存储器符号等,例:COUNT EQU 100 ;符号COUNT代表常数100 BUFF EQU 4*COUNT ;BUFF代表400 HELLO EQU “How are you! ” ;HELLO代表How are you VARW EQU THIS WORD ;变量VARW的类型是字,注意:EQU赋值语句的符号名不能被重新赋值,2、 =等号赋值语句,格式: = 功能:用符号来代
9、表表达式的数值,数值表达式,4.2.6 地址计数器与对准伪指令,1、地址计数器 $,汇编语言用符号“$”表示地址计数器的值,例2:“$”在伪指令中的应用,DAT SEGMENT DATA1 DB 1,2,3,4,5 CNT1 EQU $-DATA1 DATA2 DW 1,2,3,4,5 CNT2 EQU ($-DATA2)/2 DAT ENDS,CNT1、CNT2的值分别为DATA1、DATA2中数据元素的个数,格式:ORG 功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。,2、ORG 伪指令,3、EVEN对准伪指令,格式:EVEN 功能:使下一个字的地址从偶地址开始,
10、4.2.7 基数控制伪指令,格式:RADIX 表达式 功能:改变默认进制数,4.3 汇编语言程序格式,名字项,操作项,操作数项,;注释项,,,标号: 变量,常数 寄存器 标号 变量 表达式,用来说明 某段程序 的功能或 说明某条 指令的功 能。,表达式:是由常数、寄存器、标号、变量和 一些操作符组成的式子,有五种操作符,AND、OR、NOT、XOR SHL、SHR,例: 24H OR 0FH=2FH ORG 40H SHL 2,按位运算,2、 逻辑与移位操作符,只用于数字运算,100H,4、数值回送(Value_returning)操作符,TYPE、LENGTH、SIZE、OFFSET、SEG
11、,(1)TYPE 回送类型值,格式:TYPE expression 功能:汇编程序将变量的类型以字节数回送,DB为1 DW为2 DD为4 DQ为8 DT为10 变量如果 是标号 NEAR为-1 FAR为-2,(2) LENGTH 回送DUP分配给变量的单元数,格式:LENGTH Variable 功能:汇编程序将变量使用DUP的情况回送,没使用DUP 回送1,例: FEES DW 100 DUP(1,2) ARRY DW 1,2,3 MOV CX,LENGTH FEES MOV BX,LENGTH ARRY ,汇编后 MOV CX,100,汇编后 MOV BX,1,(3)SIZE 回送分配给变
12、量的字节数,格式:SIZE Variable 功能:汇编程序回送分配给变量的字节数,例: FEES DW 100 DUP(0) ARRY DW 1,2,3 MOV CX,SIZE FEES MOV BX,SIZE ARRY ,汇编后 MOV CX,200,汇编后 MOV BX,2,(4)OFFSET 回送变量或标号的偏移地址值,格式:OFFSET Variable 或 label 功能:汇编程序将变量或标号的偏移地址以立即数回送,例: FEES DW 100 DUP(1,2) ARRY DW 1,2,3 MOV BX,OFFSET ARRY ,相当于 LEA BX,ARRY,(5)SEG 回送
13、变量或标号的段地址值,格式:SEG Variable 或 label 功能:汇编程序将变量或标号的段地址以立即数回送,例: DAT SEGMENT ARRY DW 1,2,3 DAT ENDS CSEG SEGMENT ASSUME DS:DAT,CS:CSEG MOV AX,DAT MOV DS,AX MOV BX,SEG ARRY ,( BX)=(DS),5、属性操作符,PTR、段操作符、SHORT、THIS、HIGH、LOW、 HIGHWORD、LOWWORD,(1) PTR,格式: type PTR expression 功能:给已分配的存储器地址赋予另一种属性,BYTE、WORD D
14、WORD、 NEAR、FAR等,;(AX)=0501H ;(BL)=34H,格式: 段寄存器名直接加在地址操作数前面以说明所在段 功能:用来表示一个变量、标号或地址表达式的段属性,(2) 段操作符,(3)SHORT,格式: SHORT 标号 功能:用来修饰 JMP 指令中转向地址的属性,转向 地址在下一条指令地址的127个字节范围内,例: JMP SHORT TAG TAG: ,(4)THIS 指定新类型,格式: THIS attribute 或 type 功能:为某个符号名建立新类型,并 下一个地址单元的地址相同,例: FIRST EQU THIS BYTE TABLE DW 100 DUP
15、(?) ,FIRST,TABLE,字节变量,字变量,(5)HIGH和LOW 分离操作符,格式: HIGH 表达式 功能:接收一个数或地址表达式的高位字节,格式: LOW 表达式 功能:接收一个数或地址表达式的低位字节,例: CONST EQU 0ABCDH MOV AL,HIGH CONST MOV AH,LOW CONST,汇编后 MOV AL,0ABH MOV AH,0CDH,(6)HIGHWORD和LOWWORD 分离操作符,格式: HIGHWORD 表达式 功能:接收一个数或地址表达式的高位字,格式: LOWWORD 表达式 功能:接收一个数或地址表达式的低位字,汇编运算符的优先级,括
16、号 LENGTH、SIZE PTR、OFFSET、SEG、TYPE、THIS、段操作符 HIGH、LOW *、/、MOD +、- EQ、NE、LT、LE、GT、GE NOT AND OR、XOR SHORT,4.4 汇编语言程序的上机过程,4.4.1 建立汇编语言的工作环境,EDIT.COM 或 PE.COM 或 ASM.EXE 或 MASM.EXE LINK.EXE DEBUG.COM EXE2BIN.EXE,小汇编 不支持 宏指令,宏汇编,4.4.2 建立ASM文件,例:请把40个字母a的字符串从源缓冲区传送 到目的缓冲区,4.4.3 用MASM程序产生OBJ文件,MASM 文件名 或 M
17、ASM 文件名;,4.4.4 用LINK程序产生EXE文件,LINK 文件名;,4.4.5 程序的执行,文件名,DEBUG程序命令(1),A命令(汇编命令) 格式:A 地址 功能:从指定地址把编语言语句直接汇编入内存,2. D命令(显示命令) 格式:D 地址 或 D 范围 功能:从指定地址开始显示内存中40字节的内容, 或显示指定范围的内容,DEBUG中所写入的数, 直接就是十六进制数,DEBUG程序命令(2),G命令(执行命令) 格式:G =起始地址断点地址表 功能:从当前地址或指定地址执行遇到断点停止执行,R命令(寄存器命令) 格式:R ;显示所有寄存器的内容 R 寄存器名 ;显示并可修改
18、寄存器的内容 RF ;显示并可修改标志寄存器的内容,Q命令(停止命令) 格式:Q 功能:退出DEBUG程序,不保存内存中调试的文件,没有指定,从当前IP开始,DEBUG程序命令(3),T命令(跟踪命令) 格式:T =地址数值 功能:从当前地址或指定地址执行一条或指定的条数指令 并显示各寄存器的内容及下一条要执行的指令,U命令(反汇编命令) 格式:U 范围 或 U 地址 功能:把指定范围的内容反汇编或从指定地址开始反汇 编16条,1. 编辑程序,EDIT 文件名.ASM 回车,在DOS方式下,输入程序 存盘,上机步骤:,第五章 循环与分支程序设计,5.1 循环程序设计 5.2 分支程序设计 5.
19、3 如何在实模式下发挥80386及 后继机型的优势,DOS系统功能调用,DOS 系统功能调用的方法: 1、在AH寄存器中存入所要调用功能的功能号 2、根据所调用功能的规定设置入口参数 3、用INT 21H 指令转入子程序入口 4、取出口参数归己用,1. 键盘输入单字符01H号功能调用,功能:从键盘读一字符,并将该字符回显在显示器上 入口参数:无 出口参数:AL=输入字符的ASCII码 说明:如果读到的字符是Ctrl+c或Ctrl+Break则结束程序,例: MOV AH,1 INT 21H ,2. 键盘输入字符串0AH号功能调用,功 能:从键盘读一字符串。 入口参数: DS:DX=缓冲区首址,
20、缓冲区的第 一个字节放缓冲区最大容量数 出口参数:接收到的字符串在缓冲 区中第三个字节开始 说 明: 缓冲区第二个字节存放实际读入 的字符数。 字符串以回车结束 如果输入字符串超过了缓冲的区容 量, 超出的部分丢失,同时响铃 如果在输入时按Ctrl+C或Ctrl+Break, 则结束程序,例: BUF DB 20 DB ? DB 20 DUP(?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H ,3. 输出单字符02H号功能调用,功能:寄存器DL中的字符从屏幕上显示输出 入口参数:DL=要输出字符的ASCII码 出口参数:无,例: MOV DL,A MOV AH,2
21、 INT 21H ,4. 输出字符串09H号功能调用,功 能:将指定缓冲区中的字符串从屏幕上显示输出 入口参数:DS:DX=要输出字符的首址,字符串以字符 为结束标志 出口参数:无,功 能:从键盘上读一个字符到AL 入口参数:无 出口参数:AL=读到字符的代码,5、无回显键盘输入单字符08H,6、 返回操作系统4CH号功能调用,功 能:结束当前正在执行的程序,并返回操作系统 入口参数:无 出口参数:无,如:出现提示符C:,例: MOV AH,4CH INT 21H ,程序设计步骤, 分析问题、确定算法 根据算法画出程序框图 根据框图编写程序 上机调试程序,程序:是计算机命令(语句)的有序集合。
22、,汇编语言程序设计步骤:,开始,分支,处理,处理,结束,处理,Y,N,5.1.1 循环程序的结构形式,循环控制条件,循环体,Y,循环控制条件,循环体,Y,DO UNTIL 结构,DO WHILE结构,循环初始状态,N,循环初始状态,循环程序举例,例: 求两个多字节数之和。 这两个数在10050H 开始的单元中, 连续存放,低位 在小地址一端, 结果放在两个数 之后。设这两个 多字节数均为 八个字节长。,5.1.2 循环程序设计方法,例 5.1 试编制一个 程序把BX 寄存器内的 二进制数用 十六进制数 的形式在屏 幕上显示出 来,例 5.2 在 ADDR 单元中 存放着数 Y 的地 址,试编制
23、一程 序把 Y 中 1 的个 数存入 COUNT 单元中(Y是16位 二进制数),例:5.3 在附加段有一个首地址 为LIST和未经排序的字 数组,在数组的第一个 字中存放着该数组的长 度,数组的首地址已存 放在DI寄存器中。AX 寄存器中存放着一个数。 要求编一程序,在数组 中查找该数,如果找到 此数则把它从数组中删 除。,例5.4 将正数 N 插入一个 已整序的字数组的 正确位置。该数组 的首地址和末地址 分别为 ARRYHEAD 和ARRYEND, 其中所有的数均为 正数且已按递增的 次序排列。,例 5.5 设有数组X和Y。X数组中有X1,X10;Y数组中 有Y1,Y10。试编制程序计算
24、 Z1=X1+Y1 Z5=X5-Y5 Z8=X8-Y8 Z2=X2+Y2 Z6=X6+Y6 Z9=X9+Y9 Z3=X3-Y3 Z7=X7-Y7 Z10=X10+Y10 Z4=X4-Y4,开始,DX=0,测试 逻辑尺第I位的 值,Zi 结果,DX+1,Xi+Yi,结束,=0,0,初始化循环计数值CX,XiYi,循环计数值 CX=0?,Y,N,数组下标,32 8,84,5.1.3 多重循环程序设计,例5.7 有一个首地址为 A 的 N 字数组, 请编制程序使该 数组中的数从大 到小的次序排序,16,84,8,16,32 5,第1遍比较了N-1次,84,5 5 5,8 8,第2遍比较了 N-2次,
25、32 16,16,84 32,第3遍比较了N-3次,第4遍比较了N-4次(1次),共比较了N-1遍,开始,(COUNT1)N-1,(COUNT2)(COUNT1),I0,AiAi+1?,I+1,(COUNT2)1,(COUNT2)=0?,(COUNT1)1,(COUNT1)=0?,结束,比较遍数,外循环,每遍比较次数,内循环,Y,N,N,Y,N,Y,34 ,84,23,18,7,开始,(COUNT1)N,(COUNT2)(COUNT1),I0,AiAi+1?,I+1,(COUNT2)1,(COUNT2)=0?,交换标志=0?,结束,比较遍数,每遍比较次数,Y,N,N,Y,N,Y,交换标志=1,
26、交换标志=0,(COUNT1)-1,如果为0就结束,5.2 分支程序设计,判定条件,语句系列1,语句系列2,Y,N,5.2.1 分支程序的结构形式,判定条件,IF THEN ELSE 结构,CASE 结构,例5.9 在附加段中,有一个按从小到大顺序排列的无符号数, 其首地址存放在DI寄存器中,数组中的第一个单元存 放着数组长度。在AX中有一个无符号数,要求在数组 中查找(AX),如找到则使CF=0,并在SI中给出该 元素在数组中的偏移地址;如未找到则使CF=1,5.2.2 分支程序设计方法,SEARCH,STARTADDR(DI),(SI)=下标,(SI)取偶,(DI)=(DI)+(SI),(
27、AX)=DI?,(SI)=2 ?,(DI)=(DI)(SI),(SI)取偶,(SI)=(SI)/2,(SI)(DI),(DI) STARTADDR,退出,(SI)=2 ?,(SI)=(SI)/2,CF=1,1,1,=,已知DI存放数组的开始地址,数组长度,5.2.3 跳跃表法,例5.10 试根据AL寄存器中的哪一位为1(从低位到高位)把 程序转移到8个不同的程序分支去。,5.3 如何在实模式下发挥 80386及后继机型的优势,5.3.1 充分利用高档机的 32位字长特性,Data segment dat1 dd 12345678h dat2 dd 0fedcba98h dat3 dd ? Da
28、te ends Code segment assume ds:data,cs:code Start: mov ax,data mov ds,ax lea si,dat1 lea di,dat2 lea bx,dat3 mov eax,si add eax,di mov bx,eax mov ah,4ch int 21h Code ends end start,5.3.2 通用寄存器可作为指针寄存器,5.3.3 与比例因子有关的寻址方式,第六章 子程序结构,6.1 子程序的设计方法 6.2子程序的嵌套 6.3 子程序举例,6.1 子程序的设计方法,6.1.1 过程定义伪指令(PROC ENDP)
29、,功能:定义一个过程,格式:过程名 PROC 过程属性 过程名 ENDP,段间为FAR 段内为NEAR,用户定义的,是子程序的符号地址,标志着过程的结束,XXX SEGMENT main proc far call subr1 ret main endp subr1 proc near ret subr1 endp XXX ENDS,XXX SEGMENT main proc far call subr1 ret subr1 proc near ret subr1 endp main endp XXX ENDS,例 6.1 调用程序和子程序在同一代码段中,一个过程,一个过程,例6.2 调用过程和 子过程不在 同一个代码 段内,SEGX SEGMENT subt proc far ret subt endp call subt SEGX ENDS SEGY SEGMENT call subt SEGY ENDS,所以过程属性为FAR,6.1.2 子程序的调用和返回,CALL 子程序名,汇编程序根据子程序的属性, 确定把下一条指令的 IP 入栈, 还是IP和CS入栈保存,RET,返回指令也是由汇编程序根据 子程序的属性(FAR或NEAR) 确定堆栈的内容弹出到IP, 还是弹出到IP和CS,6.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 珠宝行业智能零售管理平台开发方案
- 协商采购价格达成共识函6篇
- 高级行政管理人员文件守秘管理指导书
- 重庆市江北区2026届初三下学期模拟检测试题语文试题含解析
- 财务预算编制与执行报告模板成本控制型
- 浙江省上杭县2025-2026学年初三入学调研物理试题(2)试卷含解析
- 凝心聚力共促发展承诺书8篇范文
- 2026届四川省遂宁市射洪中学初三(语文试题文)4月第一次综合练习试卷含解析
- 建筑行业安全生产操作指南手册
- (正式版)DB32∕T 2641-2014 《靖江香沙芋生产技术规程》
- ASTM-D3359-(附著力测试标准)-中文版
- 部编版三年级语文下册1-8单元主题阅读附答案
- 团队建设与管理 课件 第1章 团队概述
- DBJ15-22-2021-T 锤击式预应力混凝土管桩工程技术规程(广东省)
- 【铁路信号设计中的计算机联锁系统探究13000字(论文)】
- 狱内案件立案表
- 《设计公司各专业负责人岗位职责》
- 泥水平衡机械顶管操作规程范本
- 江苏建筑职业技术学院单招职业技能测试参考试题库(含答案)
- 动车组牵引传动系统-牵引变流器
- 《渔家傲-秋思》省优质课一等奖课件
评论
0/150
提交评论