1 / 88

第四章 汇编语言程序格式

第四章 汇编语言程序格式. 4.1 汇编程序功能 4.2 伪操作 4.3 汇编语言程序格式 4.4 汇编语言程序的上机过程. 检查源程序,测出语法错误 产生目标程序、列表程序等 扩展宏指令. 4.1 汇编程序的功能. 连接目标文件、库件和其它目标文件. 翻译. 目标代码文件 . BOJ. 连接程序 LINK. 汇编语言 源文件( . ASM ). 汇编程序 ( MASM 或 ASM ). 列表文件 .LST. 交叉索引文件 .CRF. . EXE 文件. 编辑程序 输入. 可直接执行. EDIT 、 PE 、 ED…….

lesley
Download Presentation

第四章 汇编语言程序格式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 汇编语言程序格式 4.1 汇编程序功能 4.2 伪操作 4.3 汇编语言程序格式 4.4 汇编语言程序的上机过程

  2. 检查源程序,测出语法错误 • 产生目标程序、列表程序等 • 扩展宏指令 4.1 汇编程序的功能 连接目标文件、库件和其它目标文件 翻译 目标代码文件.BOJ 连接程序 LINK 汇编语言 源文件(.ASM) 汇编程序 (MASM或ASM) 列表文件.LST 交叉索引文件.CRF .EXE 文件 编辑程序 输入 可直接执行 EDIT、PE、ED……

  3. 汇编程序的功能: 汇编程序对源程序进行两遍扫视 1、检查源程序 2、测出源程序中的语法错误,并给出错误信息。 3、产生目标程序,也可给出列表程序和交叉索引程序 4、扩展宏指令

  4. 伪指令语句格式 , 标号名 伪指令 操作数 ;注释 常数 字符串 常量名 变量名 标号 专用符号(如BYTE、FAR…) 没有冒号! 常量名 变量名 过程名 结构名 记录名等 4.2 伪操作(伪指令) 完成处理器选择、定义程序模块、定 义数据、分配存储区、指示程序结束等

  5. 4.2.1 处理器选择伪操作 缺省值 . 8086 ;选择8086指令 . 286 ;选择80286指令 . 286P ;选择8086指令 . 386 ;选择保护方式下的80286指令 . 386P ;选择保护方式下的80386指令 . 486 ;选择80486指令 . 486P ;选择保护方式下的80486指令 . 586 ;选择Pentium指令系统 . 586P ;选择保护方式下的Pentium指令系统

  6. 注意: 开始的段名与结 束的段名必须相 同,段的长度不 能超过64KB, SEGMENT后面 的参数是可选的 4.2.2 段定义伪操作 1、完整的段定义伪指令 SEGMENT 段开始语句 段定义的一般格式: <段名> SEGMENT [定位类型][组合类型][使用类型][‘类别’] … 段结束语句 <段名> ENDS 例:一个简单的程序段 CODE SEGMENT …… MOV AX,0 …… CODE ENDS

  7. ① 定位类型(align_type) 定位类型指出了对当前段起始地址的要求,有4个选项 PAGE ——指定起始地址的低8位是0,即其值能被256整除(称页边界) PARA ——指定起始地址的低4为是0,即其值能被16整除(称段边界) WORD——指定起始地址的最低位是0,即其值能被2整除(称为字边界) BYTE ——指定起始地址是任意值 DWORD——其值能被4整除(双字边界) 缺省定位 定位类型是用来确定程序段与程序段之间的衔接,如BYTE 使得当前段紧接前一段,而PAGE可能导致最大的段间隔

  8. ② 组合类型(combine_type) 一个源程序至少有一个堆栈段 组合类型告诉连接程序本段可按某种方式连接 PUBLIC——告诉连接程序本段与其它同名同类别 的段连接起来,公用一个起始点。 STACK ——表示是堆栈段,组合类型同上。 NONE ——表示本段不与任何段连接。 COMMON—表示本段与同名同类别的段共用同一段地址, 即同名同类段相重叠。 MEMORY—本段连接时定位在所有段之上,即高地址处。 AT 表达式—表示本段定位在表达式值指定的段地址处。 隐含组合类型 返回

  9. ③ 使用类型(use_type) 缺省值 段长度不超过64KB USE16 使用16位寻址方式 USE32 使用32位寻址方式 段长度不超过 4GB

  10. SSEG SEGMENT PARA STACK DB 1024 DUP(?) SSEG ENDS ; DSEG SEGMENT PARA COMMON MESS DB ‘HELLO’,0DH,0AH,’$’ DSEG ENDS ; CSEG SEGMENT PARA PUBLIC … CSEG ENDS END START ③ ‘类别名’ 类别名是由程序员指定的字符串,没有给出类别时, 这个段的类别就为空。 例:某个源程序

  11. CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG1,ES:DSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV ES,AX … … CSEG ENDS … 例:DSEG1 SEGMENT VARW DW 12 … DSEG1 ENDS ; DSEG2 SEGMENT XXX DW 0 YYY DW 0 DSEG2 ENDS ; • 段寄存器说明伪指令ASSUME 格式:ASSUME 段寄存器:段定义名1[,段寄存器:段定义名2,…] 功能:告诉汇编程序在汇编时,段寄存器的符号基址

  12. 1、程序(模块)开始伪指令 格式:NAME 模块名 2、程序( 模块)结束伪指令 格式:END [启动标号] 功能:告诉汇编程序源文件结束,并给出执行程 序的入口地址 4.2.3 程序开始和结束伪指令

  13. 3、 列表伪指令 格式: TITLE 标题 ;为列表文件每页第一行定义标题 SUBTTL 小标题 ;为列表文件每页定义小标题,大标题之后 PAGE 行数,行字数;为列表文件定义每页行数,每行字符数。 缺省值是66行,80列 NAME、TITLE伪指令不是每个程序必须的, 视需要而选择

  14. 06 × 06 × VARW→ 24 0A 0D 低 COUNT→ 64 4.2.4 数据定义及存储器分配伪操作 1、DB定义字节伪指令 格式:[名字] DB <表达式或数据项表> 功能:表达式值或项表中的每一项是一个字节数, 它们从符号名地址开始按字节连续存放。 例:COUNT DB 100 DB 0DH,0AH,’$’ VARW DB ?,6,?,2*3 可以使用重复操作符DUP如: BUFFER DB 8 DUP(0)

  15. × × 00 24 汇编后对应的存储区域分配情况 2F FLAG→ CD 低 2、 DW定义字伪指令 格式:[名字] DW <表达式或数据项表> 功能:表达式值或项表中的每一项是一个字数, 它们从符号名地址开始按字连续存放。 例:FLAG DW 2FCDH,24H DW ?

  16. 4、 DQ定义八字节伪指令(4字) 格式:[名字] DQ <表达式或数据项表> 功能:表达式值或项表中的每一项是八个字节数,它们 从符号名地址开始按八字节从低地址连续存放。 386以后 6、DF定义6字节伪指令 3、 DD定义四字节伪指令(双字) 格式:[名字] DD <表达式或数据项表> 功能:表达式值或项表中的每一项是四个字节数,它们 从符号名地址开始按四字节从低地址连续存放。 5、 DT定义10字节伪指令指令

  17. 00 00 FF AAA→ FD 03 02 高 03 02 ARRAY→ 汇编后的内存分配情况 → × × 01 00 WORD_D→ 10 低 DAT→ 0A 例: DAT DB 10,10H WORD_D DW 100H,? ARRAY DB 2 DUP(2,3) AAA DD 0FFFDH DUP可以嵌套如: ARRAY DB 100 DUP(0,2 DUP(1,2),3)

  18. DB——1 DW——2 DD——4 DQ——8 DT——10 类型属性 语法错误 类型不匹配 MOV AX,DAT1 MOV BL,DAT2 • 变量的类型属性(type attribute) 符号地址(变量) 类型是字节BYTE DAT1 DB 1,5,? DAT2 DW 1234H,? …… 类型是字WORD

  19. 例: DAT1 DB 1,5,? DAT2 DW 1234H,? …… MOV AX,WORD PTR DAT1 MOV BL,BYTE PTR DAT2 • 属性操作符 BYTE、WORD DWORD、 NEAR、FAR等 1、PTR 格式: type PTR expression 功能:给已分配的存储器地址赋予另一种属性 ;(AX)=0501H ;(BL)=34H

  20. 4.2.5 表达式赋值伪指令EQU 表达式可以是常数、数值表达式、字符串、存储器符号等 1、赋值语句EQU 格式:<符号名> 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赋值语句的符号名不能被重新赋值

  21. 例:ABCD = 100 YY = 20+300/4 ABCD = 2*ABCD+1 可以重新赋值 2、 =等号赋值语句 数值表达式 格式:<符号名> = <表达式> 功能:用符号来代表表达式的数值

  22. × × × 满足条件后要执行的指令 例: JNE $+4 × × 4 × 06 74 低 × 4.2.6 地址计数器与对准伪指令 1、地址计数器 $ 汇编语言用符号“$”表示地址计数器的值

  23. 例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中数据元素的个数

  24. 00 0023H 0022H 0021H 0020H 例: 06 DAT SEGMENT ORG 10H BUF DB 3,4 ORG 20H ARRY DW 5,6 DAT ENDS …… 00 ARRY→ 05 …… …… 04 0011H 0010H 03 BUF→ 2、ORG 伪指令 格式:ORG <数值表达式> 功能:把以下语句定义的内存数据或程序,从表达式 指定的起点开始连续存放。

  25. 00 高 05 00 04 00 DAT SEGMENT BUF DB 1,2 CONT DB 2 EVEN ARRY DW 3,4,5 DAT ENDS …… 例: ARRY→ 03 × CONT→ 02 02 低 01 BUF→ 3、EVEN对准伪指令 格式:EVEN 功能:使下一个字的地址从偶地址开始

  26. 后面可以不跟H 例:.RADIX 16 MOV AX,0FA4 MOV BX,100D … 后面必须跟D,表示 十进制数 4.2.7 基数控制伪指令 格式:.RADIX 表达式 功能:改变默认进制数

  27. 指令助记符 伪指令助记符 宏指令助记符 4.3 汇编语言程序格式 , 名字项 操作项 操作数项 ;注释项 标号: 变量 常数 寄存器 标号 变量 表达式 用来说明 某段程序 的功能或 说明某条 指令的功 能。

  28. 1、 算术操作符 +、-、*、/、MOD(除法取余) 算术操作符 可用于数字 表达式或地 址表达式 例: DAT SEGMENT ARRY DW 1,2,3,4,5 DEND DW ? DAT ENDS …… MOV CX,(DEND-ARRY)/2 MOV AX,100*4+5;AX=405 …… 表达式计算出了数组长度5 表达式:是由常数、寄存器、标号、变量和 一些操作符组成的式子 有五种操作符

  29. 3、 关系操作符 关系运算结果总是 一个数值若关系不 成立,则结果为0若 关系成立,则结果 为0FFFFH EQ、NE、LT、LE、GT、GE 例:MOV AX,1234H GT 1024H MOV AX,0FFFFH 按位运算 2、 逻辑与移位操作符 AND、OR、NOT、XOR SHL、SHR 只用于数字运算 例: 24H OR 0FH=2FH ORG 40H SHL 2 100H

  30. 例: ARRY DW 1,2,3 …… ADD SI,TYPE ARRY …… 汇编后 ADD SI,2 操作符 4、数值回送(Value_returning)操作符 DB为1 DW为2 DD为4 DQ为8 DT为10 变量如果 是标号 NEAR为-1 FAR为-2 TYPE、LENGTH、SIZE、OFFSET、SEG (1)TYPE 回送类型值 格式:TYPE expression 功能:汇编程序将变量的类型以字节数回送

  31. (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

  32. (3)SIZE 回送分配给变量的字节数 格式: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

  33. (4)OFFSET 回送变量或标号的偏移地址值 格式:OFFSET Variable 或 label 功能:汇编程序将变量或标号的偏移地址以立即数回送 例: FEES DW 100 DUP(1,2) ARRY DW 1,2,3 …… MOV BX,OFFSET ARRY …… 相当于 LEA BX,ARRY

  34. (5)SEG 回送变量或标号的段地址值 格式: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)

  35. 例: DAT1 DB 1,5,? DAT2 DW 1234H,? …… MOV AX,WORD PTR DAT1 MOV BL,BYTE PTR DAT2 5、属性操作符 PTR、段操作符、SHORT、THIS、HIGH、LOW、 HIGHWORD、LOWWORD BYTE、WORD DWORD、 NEAR、FAR等 (1) PTR 格式: type PTR expression 功能:给已分配的存储器地址赋予另一种属性 ;(AX)=0501H ;(BL)=34H

  36. 物理地址 (DS)*16+EA 例: MOV AX,[BX+SI] MOV AX,ES:[BX+SI] 物理地址: (ES)*16+有效地址 段操作符 (2) 段操作符 格式: 段寄存器名直接加在地址操作数前面以说明所在段 功能:用来表示一个变量、标号或地址表达式的段属性

  37. (3)SHORT 格式: SHORT 标号 功能:用来修饰 JMP 指令中转向地址的属性,转向 地址在下一条指令地址的±127个字节范围内 例: …… JMP SHORT TAG …… TAG: …… ……

  38. (4)THIS 指定新类型 格式: THIS attribute 或 type 功能:为某个符号名建立新类型,并 下一个地址单元的地址相同 × …… 例: FIRST EQU THIS BYTE TABLE DW 100 DUP(?) …… × 字变量 × 字节变量 × FIRST→ TABLE→ ×

  39. (5)HIGH和LOW 分离操作符 格式: HIGH 表达式 功能:接收一个数或地址表达式的高位字节 格式: LOW 表达式 功能:接收一个数或地址表达式的低位字节 例: CONST EQU 0ABCDH MOV AL,HIGH CONST MOV AH,LOW CONST 汇编后 MOV AL,0ABH MOV AH,0CDH

  40. 例: CONST EQU 0ABCD1234H MOV AX,HIGHWORD CONST MOV BX,LOWWORD CONST 汇编后: MOV AX,0ABCDH MOV BX,1234H (6)HIGHWORD和LOWWORD 分离操作符 格式: HIGHWORD 表达式 功能:接收一个数或地址表达式的高位字 格式: LOWWORD 表达式 功能:接收一个数或地址表达式的低位字

  41. 汇编运算符的优先级 括号 LENGTH、SIZE PTR、OFFSET、SEG、TYPE、THIS、段操作符 HIGH、LOW *、/、MOD +、- EQ、NE、LT、LE、GT、GE NOT AND OR、XOR SHORT

  42. 4.4 汇编语言程序的上机过程 4.4.1 建立汇编语言的工作环境 EDIT.COM 或 PE.COM 或 …… ASM.EXE 或 MASM.EXE LINK.EXE DEBUG.COM EXE2BIN.EXE 宏汇编 小汇编 不支持 宏指令

  43. EDIT 文件名.ASM↙ 文件扩展名 或文件类型 MOVS 4.4.2 建立ASM文件 例:请把40个字母a的字符串从源缓冲区传送 到目的缓冲区

  44. 4.4.3 用MASM程序产生OBJ文件 MASM 文件名↙ 或 MASM 文件名;↙ 4.4.4 用LINK程序产生EXE文件 LINK 文件名;↙ 4.4.5 程序的执行 文件名↙

  45. 说明: 地址:由段值和偏移两部分组成。如CS:100,段值可以省略 范围:有两种表示方法,一种是用起始地址和结束地址如CS:100 110, 另一种用起始地址和长度表示。如CS:100 L10 DEBUG程序命令(1) DEBUG中所写入的数, 直接就是十六进制数 • A命令(汇编命令) • 格式:A [ 地址] • 功能:从指定地址把编语言语句直接汇编入内存 2. D命令(显示命令) 格式:D [ 地址] 或 D [ 范围] 功能:从指定地址开始显示内存中40字节的内容, 或显示指定范围的内容

  46. DEBUG程序命令(2) 没有指定,从当前IP开始 • G命令(执行命令) • 格式:G [=起始地址][断点地址表] • 功能:从当前地址或指定地址执行遇到断点停止执行 • R命令(寄存器命令) • 格式:R ;显示所有寄存器的内容 • R 寄存器名 ;显示并可修改寄存器的内容 • RF ;显示并可修改标志寄存器的内容 • Q命令(停止命令) • 格式:Q • 功能:退出DEBUG程序,不保存内存中调试的文件

  47. DEBUG程序命令(3) • T命令(跟踪命令) • 格式:T [=地址][数值] • 功能:从当前地址或指定地址执行一条或指定的条数指令 • 并显示各寄存器的内容及下一条要执行的指令 • U命令(反汇编命令) • 格式:U [范围] 或 U [地址] • 功能:把指定范围的内容反汇编或从指定地址开始反汇 • 编16条

  48. 缺省方式,以源文件名为目标文件名,无列表文件;无交叉索引文件缺省方式,以源文件名为目标文件名,无列表文件;无交叉索引文件 2. 汇编程序 MASM 文件名;回车 如果有语法错误,用EDIT修改源文件 4. 执行程序 文件名 回车 如果执行程序有错,进入第5步 进入了DEBUG调试状态 3. 程序连接 5. 调试程序 LINK 文件名;回车 DEBUG 文件名. EXE 回车 上机步骤: 1. 编辑程序 在DOS方式下 EDIT 文件名.ASM 回车 输入程序 存盘

  49. 第五章 循环与分支程序设计 5.1 循环程序设计 5.2 分支程序设计 5.3 如何在实模式下发挥80386及 后继机型的优势

  50. DOS系统功能调用 DOS 系统功能调用的方法: 1、在AH寄存器中存入所要调用功能的功能号 2、根据所调用功能的规定设置入口参数 3、用INT 21H 指令转入子程序入口 4、取出口参数归己用

More Related