版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计Assembly Language Programming,第四章 汇编语言程序格式,汇编语言程序格式,逻辑段,逻辑段,逻辑段,语句,语句,语句,伪指令语句,指令语句,宏指令语句,指令助记符,操作数,伪指令助记符,寻址方式,表达式,指令助记符,汇编语言程序格式,汇编语言源程序由一个或多个逻辑段组成。 一个程序中可以有几个同一类型的逻辑段。 必须至少有一个代码段。 源程序的结束标志“END”语句 注源程序分段的目的在于程序结构清晰、便于内存分配,寻址方便,一个源程序需要设置几个段应根据具体问题来定。,逻辑段,一个逻辑段由若干条汇编语言语句组成 逻辑段的类型 程序段(代码段)主要由
2、指令语句组成,完成源程序的功能。 数据段定义数据及符号的伪指令组成。 附加段定义数据及符号的伪指令组成。 堆栈段定义堆栈伪指令组成。,1. 变量、标号、表达式,1. 变量、标号、表达式,变量与标号 均为程序中定义的符号地址,以名标识并按名访问,汇编时确定偏移地址 表达式 包括数值表达式和地址表达式 汇编时求值,变量,变量 变量是指数据单元的符号地址。 变量的书写格式:不能使用系统保留字、不能以数字开头 变量的定义:用数据定义伪指令来定义 变量的属性: 段属性变量的段地址 偏移属性变量的偏移地址 类型属性变量所指单元的类型,字节变量、字变量、双字变量等,标号,标号 标号一个指令单元的符号地址。
3、标号的书写格式:不能使用系统保留字、不能以数字开头 标号的定义:在一条指令语句前输入标号且用“:”隔开,即定义了该标号;或用Label来定义 标号的属性: 段属性是指定义标号所在段的段地址。 偏移属性是指定义标号处到段地址的距离。 类型属性NEAR型和FAR型。,表达式,数值表达式用常数、符号常数和算术、逻辑、关系运算符组成的表达式。如:(75*2+X)/Y 地址表达式由“变量、标号、“+”、“-” 数值表达式组成。 如:DATA+5,VARYBX; 注含有变量的地址表达式其类型与该变量一致,如VARYBX,VARY4与VARY类型一样; 地址表达式可以相减,不能相加。,算术运算,算术运算符包
4、括:(加)、(减)、*(乘)、(除)、MOD(求模)几种,它既可以用于数值表达式又可用于地址表达式。 例如: MOV AL, 25*4 50 MOV DL, 10 MOD 3,地址计数器($),汇编器在将源地址转化为目标程序过程中,需要使用地址计数器跟踪其中代码或数据的偏移地址。 $是一个特殊的地址表达式,表示当前的偏移地址,即地址计数器的当前值。 在指令语句和伪指令语句中,常常引用$符号作为地址计数器,$的值在不断发生变化,即$在程序中不同的位置其值是不同的。 例如: ARRAY DW 1, $ , 2+$ ,4 - 5 SUM DW $ DS:0100H 01 00 02 01 06 01
5、 FF FF 08 01,符号地址 操作 操作数 ; 注释 ,变量 指令 寄存器 说明程序 分 标号 伪指令 标号 或语句 行 宏指令 变量 的功能 符 常数 表达式,2. 语句格式,3. 基本伪指令,伪指令语句非执行语句,用来指示编译器进行编译的语句,没有机器代码对应。 伪指令与具体的处理器类型无关,但与汇编程序的版本有关,伪指令分类,处理器选择伪指令 段定义语句 变量定义语句 符号定义语句 LABEL伪指令 段类型说明语句 程序结束伪指令 起始地址和对准语句,(1)处理器选择伪指令,在缺省方式下,MASM只承认8086指令。 为了使用更高的CPU指令,必须使用处理器选择伪指令,主要包括:
6、.8086.286 .286P .386.386P.486 .486P.586.586P.686.686P 分别表示其后面的代码使用相应CPU的指令。其中,结尾的P表示使用特权指令。 若使用32位CPU新增指令以及寄存器或内存寻址方式,则至少要用.386伪指令。,(2) 段定义伪操作完整段定义,段名segment STACK USE16/ USE32 .;语句序列 段名ends 完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束 段名对外表现为立即数,为该段的段地址 STACK定义堆栈段:自动给SS和SP赋值 USE1
7、6指出使用16位段。 在实模式下,只能使用16位段,而32位段只能用于保护模式程序。 在实模式下,如果要使用32位指令,还必须在段定义时给出USE16。,(3)数据定义语句,格式: 变量 DBDWDD/ DF / DQ / DT 操作数1,操作数n 功能: 定义变量; 在内存中分配一组存储单元; 并对单元进行初始化。 分类 DB:用来定义字节,其后每个操作数占用一个字节。 DW:用来定义字,其后每个操作数占用一个字。 DD:用来定义双字,其后每个操作数占用两个字。 DQ:用来定义四个字,其后每个操作数占用四个字。 DT:用来定义十个字节,其后每个操作数占用十个字节。,操作数,常数或一组常数或数
8、值表达式; 例如:DATA DB 2, 100*2-5, 0, -1 一组字符串 如: STRING DB This is a string 注意比较DB “ab”和 DW “ab”,STRING,操作数,变量名或标号名 ADDR1 DW BLOCK ;BLOCK偏址放在ADDR1单元 ADDR2 DD BLOCK ;BLOCK的偏址和段址依次存放在ADDR2四字节单元中。 一组“?” 只分配空间,不进行初始化 例如:BLOCK DW ?,? ;分配两个字节,但为随机值,操作数,重复DUP语句 格式:重复数 n DUP(重复内容) 功能:将DUP后的内容重复定义n次。 例如:BLOCK DB
9、3 DUP (0,1,-1) 如同:BLOCK DB 0,1,-1, 0,1,-1, 0,1,-1 注DUP语句中可以包含DUP语句。,NOTICE,汇编语言强类型! 变量有类型! BUFFER DW 1234H MOV AL, BUFFER MOV AL,BYTE PTR BUFFER MOV AX, BUFFER,(4)符号定义语句EQU,格式: EQU 表达式 符号名符号常数 表达式数值表达式或者字符串 功能: 出现符号的地方进行替换;不分配空间;相当于C语言的Define宏。 例如: XX EQU 1*10-2 DATA EQU 1000H MOV AX,XX*2; 16AX,(4)符
10、号定义语句, 数值表达式 例如: ZERO 0 “EQU”不能对同一个符号进行二次定义,但符号定义为指令“=”可以。,(5) LABEL,格式: 符号名 LABEL 类型 类型:BYTE, WORD,DWORD, ,NEAR,FAR 功能:从当前位置的地址强制转化为“类型”来定义“符号”,并不分配内存空间, 但定义变量或者标号。 例子: databyte label byte dataword dw 1,2,3 ;databyte和dataword地址一样,但是类型不同。 labelfar lable far labelnear: mov al, bl ;labelfar与labelnear地
11、址一样,但是类型不同。 ;Labelfar用于段间转移,(6) 段类型说明伪操作,在代码段开始必须用ASSUME伪操作声明段和寄存器之间的关系,格式为: ASSUME 段寄存器:段名 ,段寄存器名:段名, . 通知MASM,建立段寄存器与段的缺省关系;在需要时自动插入段超越前缀。这是ASSUME伪指令的主要功能。 实际上,数据段之所以成为数据段,是由于DS指向它。由于程序运行时可以改变DS的值,使得任何段都可以成为数据段。,DATA1 SEGMENT X DB 1 DATA1 ENDS DATA2 SEGMENT Y DB 2 DATA2 ENDS CODE SEGMENT ASSUME CS
12、:CODE,DS:DATA1 ,ES:DATA2 START: MOV AX,DATA1 MOV DS,AX MOV AX,DATA2 MOV ES,AX MOV AL,X MOV AH,Y MOV AH,4CH INT 21H CODE ENDS END START,MOV AH,ES:0000,NOTICE,ASSUME语句位于在程序段开始位置 在ASSUME语句中并没有给段寄存器赋值。,NOTICE,DS、ES的初值必须在程序中设置: MOV AX, MOV DS/ES/SS,AX CS与IP的初值不能在程序中显式设置,由系统自动设置为END后指定的起始地址 为SS与SP的初值 可在程序
13、中显式设置: SS同上,SP用 MOV SP,St_TOP 堆栈段定义时给出了属性STACK,则由系统自动设置。 其他,则由系统指定堆栈,编译时给出警告错误,(7)程序结束伪指令,格式:END 标号 功能:以示汇编源程序到此结束,停止汇编工作。 说明:标号仅在主程序模块文件的“END”语句中添加,以示执行程序的起始地址,而在子程序模块文件中不需给出,(8)起始地址和对准语句,ORG 格式:ORG 表达式 功能:指定随后指令或者定义数据的偏移地址 说明: “ORG”伪指令可设置程序段、数据段任何位置。 若程序中没有设置“ORG”语句,一般情况每个逻辑的起始地址为0000H。,(8)起始地址和对准
14、语句,EVEN 格式:EVEN 功能:偶地址对齐指令。若当前地址是奇数,则加1; ALIGN 格式: ALIGN n 功能:使随后的数据或者指令起始于n的偶数倍地址,4.4 操作符,类型(合成) 操作符 类型 PTR 表达式 例: MOV WORD PTR BX, 5 段操作符:段超越 例: MOV ES: BX, AL SHORT 标号 例: JMP SHORT NEXT THIS 类型 例: TA EQU THIS BYTE TB DW 100 DUP (?) NEXT EQU THIS FAR MOV CX, 100,4.5 操作符,地址(分析)操作符 SEG 运算符 OFFSET运算符
15、 TYPE运算符 LENGTHOF运算符 SIZEOF运算符 编译后相当于立即数,(1)SEG 运算符 格式:SEG 变量或标号 功能:分离出其后变量或标号所在段的段首址。 例如: MOVAX,SEGARR MOVDS,AX (2)OFFSET运算符 格式:OFFSET 变量或标号 功能:分离出其后变量或标号的偏移地址。 例如: MOV BX,OFFSET BUF,(3)TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。它们之间的关系见表3.2所示。,(4)LENGTHOF运算符 格式:
16、LENGTHOF 变量 功能:取出变量所含的数据存储单元个数。 (5)SIZEOF运算符 格式:SIZEOF 变量 功能:取出变量所含的数据存储区大小。 其返回值为: LENGTHOF 变量 * TYPE 变量,例:ARRAY DW 100 DUP (?) TABLE DB ABCDE ADD SI, TYPE ARRAY ; ADD SI, 2 ADD SI, TYPE TABLE ; ADD SI, 1 MOV CX, LENGTHOF ARRAY ; MOV CX, 100 MOV CX, LENGTHOF TABLE ; MOV CX, 5 MOV CX, SIZEOF ARRAY ;
17、 MOV CX, 200 MOV CX, SIZEOF TABLE ; MOV CX, 5,5. 汇编语言程序框架,.386 Stack segment stack use16 dw 512 dup(?) Stack ends Data segment .;在数据段定义数据 Data ends Code segment assume cs:code, ds:data, ss:stack start: mov ax,data mov ds,ax .;在代码段填入指令序列 mov ah,4ch int 21h .;子程序代码 Code ends end start,6.汇编语言的上机过程,汇编语言程序的上机过程 1、编写源程序 2、将源程序编译为目标程序 3、把目标程序连接为 DOS可执行程序 汇编程序的主要功能是: 1、报告源程序中的语法错误 2、形成目标程序,源程序:文件名.asm,目标模块:文件名.obj,可执行文件:文件名.exe,错误,建立汇编语言的工作环境-MASM 5.x,MASM.EXE LINK.EXE DEBUG.COM 使用: MASM myfile.asm ;编译 LINK myfile.obj ;连接,myfile.asm,编辑程序,汇编程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广州番禺职业技术学院单招职业倾向性测试题库带答案详解(轻巧夺冠)
- 2026年广东女子职业技术学院单招职业技能测试题库带答案详解(预热题)
- 2026年广东生态工程职业学院单招综合素质考试题库附答案详解(达标题)
- 2026年广东轻工职业技术学院单招职业适应性测试题库含答案详解ab卷
- 2026年广西交通职业技术学院单招职业适应性测试题库含答案详解(轻巧夺冠)
- 《国际接待业概论》试卷及答案
- 2026年平凉职业技术学院单招职业技能测试题库附参考答案详解(达标题)
- 雇主责任险课后问答试卷及答案
- 2026年广州城建职业学院单招职业倾向性考试题库附参考答案详解(基础题)
- 2026年广西安全工程职业技术学院单招职业倾向性考试题库附参考答案详解(能力提升)
- 《电工电子技术》课件-数字式万用表的使用
- 颌面部骨折围手术期的护理
- 《怡成血酮监测意义》课件
- 井字架搭拆作业架体的安装与拆除安全要求范本
- 主蒸汽管道更换施工方案
- 人工智能导论PPT完整全套教学课件
- 2023年浙江省普通高中学业水平考考纲物理
- ARJ21机型理论知识考试题库(汇总版)
- JJG 875-2019数字压力计
- 《薄膜材料与薄膜技术》教学配套课件
- 金属非金属地下矿山安全生产标准化评分办法-模板
评论
0/150
提交评论