第四章汇编语言程序设计_第1页
第四章汇编语言程序设计_第2页
第四章汇编语言程序设计_第3页
第四章汇编语言程序设计_第4页
第四章汇编语言程序设计_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章汇编语言程序设计主要内容n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句格式汇编语言语句格式n伪指令伪指令n功能调用功能调用n汇编语言程序设计汇编语言程序设计4.1 汇编语言源程序了解:了解:n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句类型及格式汇编语言语句类型及格式一、汇编语言源程序结构1. 汇编语言源程序与汇编程序n汇编语言源程序汇编语言源程序n汇编程序汇编程序用助记符编写用助记符编写汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序源程序的编译程序源程序的编译程序2. 汇编语言程序设计与执行过程n输入汇编语言源程序(输入汇编语言

2、源程序(EDITEDIT)n汇编(汇编(MASMMASM)n链接(链接(LINKLINK)n调试(调试(TDTD)源文件源文件 . ASM目标文件目标文件 .OBJ可执行文件可执行文件.EXE最终程序最终程序二、汇编语言语句类型及格式二、汇编语言语句类型及格式1. 汇编语言语句类型指令性语句指令性语句指示性语句指示性语句CPU执行的语句,能执行的语句,能够生成目标代码够生成目标代码CPU不执行,而由汇编不执行,而由汇编程序执行的语句,不生程序执行的语句,不生成目标代码成目标代码2. 汇编语言语句格式 指令性语句:指令性语句: 标号:标号: 前缀前缀 助记符助记符 操作数操作数,操作数操作数 ;

3、注释;注释指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号指示性语句格式名字名字 伪指令助记符伪指令助记符 操作数操作数 ,操作数,操作数, ;注释;注释变量的符号地址变量的符号地址其后不加冒号其后不加冒号指示性语句中至指示性语句中至少有一个操作数少有一个操作数3. 标号、名字n标号后有冒号,在指令性语句前;名字后不加标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。冒号,在指示性语句前。n英文字母、数字及专用字符组成英文字母、数字及专用字符组成, ,最大长度不最大长度不能超过能超过3131个个, ,且不能由数字打头且不能由数字打头, ,

4、不能用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助记符指令助记符, ,伪指令伪指令) )。 4. 操作数寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式常 量n数字常量数字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD汇编时被译成对应的汇编时被译成对应的ASCII码码用单引号引起的字符或字符串用单引号引起的字符或字符串变 量n代表内存中的数据区,程序中视为存储器代表内存中的数据区,程序中视为存储器操作数操作数n变量的属性:变量的属性: 变量所在段的段地址变量所在段的段地址 变量单元地址与段首地址之变量单元地址与段首地址之 间的位

5、移量。间的位移量。 字节型、字型和双字型字节型、字型和双字型段段 值值偏移量偏移量类类 型型表达式算术运算算术运算逻辑运算逻辑运算*关系运算关系运算取值运算和属性运算取值运算和属性运算其它运算其它运算算术运算和逻辑运算符n算术运算符算术运算符n+,-,*,/,MODn逻辑运算符逻辑运算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-1取值运算符取得其后变量或标号的偏移地址取得其后变量或标号的偏移地址取得其后变量或标号的段地址取得其后变量或标号的段地址TYPE 取取LENGTH 取所定义存储区的长度取所定义存储区的长度SIZE 取所定义存储区的字节

6、数取所定义存储区的字节数n用于分析存储器操作数的属性用于分析存储器操作数的属性n获取变量的属性值获取变量的属性值OFFSETSEG取值运算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等价于等价于取值运算符例n若若BUFFER存储区用如下伪指令定义:存储区用如下伪指令定义: BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0) 则:则: TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER等于等于200200 SIZE BUFFERS

7、IZE BUFFER等于等于400400属性运算符n 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型n 运算符:运算符:PTRn 例:例: MOV BYTR PTRBX,12H其它运算符n方括号:方括号: n段重设符段重设符 段寄存器名:段寄存器名: 方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址用于修改默认的段基地址用于修改默认的段基地址4.2 伪指令掌握:掌握:n伪指令的格式及实现的操作伪指令的格式及实现的操作n伪指令的应用伪指令的应用伪指令n由汇编程序执行的由汇编程序执行的“指令系统指令系统”n作用:作用:n定义变量;定义变量;n分配存储区分配存储区n定义逻辑

8、段;定义逻辑段;n指示程序开始和结束;指示程序开始和结束;n定义过程等。定义过程等。常用伪指令数据定义伪指令数据定义伪指令符号定义伪指令符号定义伪指令段定义伪指令段定义伪指令结束伪指令结束伪指令过程定义伪指令过程定义伪指令宏命令伪指令宏命令伪指令一、数据定义伪指令n用于定义数据区中变量的类型及大小用于定义数据区中变量的类型及大小n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 操作数,操作数, ;注释注释符号地址符号地址定义变量类型定义变量类型定义变量值定义变量值及区域大小及区域大小1. 数据定义伪指令助记符nDB 定义的变量为字节型定义的变量为字节型nDW 定义的变量为字类型(双字节)

9、定义的变量为字类型(双字节)nDD 定义的变量为双字型(定义的变量为双字型(4字节)字节)nDQ 定义的变量为定义的变量为4字型(字型(8字节字节)nDT 定义的变量为定义的变量为10字节型字节型数据定义伪指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 11H*2,22H,33445566H以上变量在内存以上变量在内存中的存放形式中的存放形式数据定义伪指令例_变量在内存中的分布变量在内存中的分布DATA111223344DATA2224411000033DATA32200220000XX66554433数据定义伪指令的几

10、点说明n伪指令的性质决定所定义变量的类型;伪指令的性质决定所定义变量的类型;n定义字符串必须用定义字符串必须用DB伪指令伪指令n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H2. 重复操作符n作用:作用:n为一个数据区的各单元设置相同的初值为一个数据区的各单元设置相同的初值n目的:目的:n常用于声明一个数据区常用于声明一个数据区n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)n例:例: BW 20 DUP(0)M1 DB 10 DUP(0)3. “?”的作用n表示随机值,用于预留存储空间表示随机值,用于预留存储空间nMEM1

11、 DB 34H,A,?,? DW 20 DUP(?)(?)预留预留40个字节单元,每单元为随机值个字节单元,每单元为随机值随机数随机数占占1个字节单元个字节单元数据定义伪指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)变量在内存中的分区变量在内存中的分区数据定义伪指令例M1How aM211H11H00H44H33H r e you?11H00H00H随机数随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX二、符号定义伪指令n格式:格式: 符号名

12、符号名 EQUEQU 表达式表达式n操作:操作: 用符号名取代后边的表达式,不可重新定义用符号名取代后边的表达式,不可重新定义n例:例: CONSTANTCONSTANTEQUEQU100100 VAR EQU 30H+99HVAR EQU 30H+99HEQU说明的表达式不占用内存空间说明的表达式不占用内存空间三、段定义伪指令n说明逻辑段的起始和结束;说明逻辑段的起始和结束;n说明不同程序模块中同类逻辑段之间的联系形说明不同程序模块中同类逻辑段之间的联系形 态态段定义伪指令格式段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS说

13、明逻辑说明逻辑段的起点段的起点说明不同模块中同名说明不同模块中同名段的组和连接方式段的组和连接方式定位类型nPARA: 段的起点从节边界开始段的起点从节边界开始 (16个字节为个字节为1节)节)nBYTE: 段的起点从存储器任何地址开始段的起点从存储器任何地址开始nWORD:段的起点从偶地址开始段的起点从偶地址开始nPAGE: 段的起点从页边界开始段的起点从页边界开始 (256个字节为个字节为1页)页)组合类型n与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提 下具有的组合方式:下具有的组合方式:nNONE: 不组合不组合nPUBLIC: 依次连接(顺序由依次连

14、接(顺序由LINK程序确定)程序确定)nCOMMON: 覆盖连接覆盖连接nSTACK: 堆栈段的依次连接堆栈段的依次连接nAT 表达式:段定义在表达式值为段基的节边界表达式:段定义在表达式值为段基的节边界nMEMORY: 相应段在同名段的最高地址处。相应段在同名段的最高地址处。类别n不同模块连接时将相同类别的段放在连不同模块连接时将相同类别的段放在连续的内存区域中续的内存区域中段定义伪指令例DATA SEGMENT MEM1 DB 11H,22H MEM2 DB Hello! MEM3 DW 2 DUP(?)(?)DATA ENDS变量在逻辑段变量在逻辑段中的位置就代中的位置就代表了它的偏移表

15、了它的偏移地址地址表示变量所在表示变量所在逻辑段的段地逻辑段的段地址址表示变量的类表示变量的类型型四、设定段寄存器伪指令n说明所定义逻辑段的性质说明所定义逻辑段的性质n格式:格式: ASSUME 段寄存器名段寄存器名:段名段名,段寄存器名,段寄存器名:段名,段名,五、结束伪指令n表示源程序结束表示源程序结束n格式:格式: END 标号标号汇编语言源程序结构数据段名数据段名 SEGMENT 数据段名数据段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆栈段名堆栈段名 SEGMENT 堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENT 代码段名代码段名 ENDS

16、END 一个完整源程序结构例DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?)(?) DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT STACK STACK DB 200 DUP(?)(?)SSEG ENDS一个完整源程序结构例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX C

17、SEG ENDS END START源程序源程序 代码代码段寄存器初始化段寄存器初始化将段地址送将段地址送相应的段寄存器相应的段寄存器六、过程定义伪指令n用于定义一个过程体用于定义一个过程体n格式:格式: 过程名过程名 PROC NEAR / FAR RET 过程名过程名 ENDPP157例例过程入口的过程入口的符号地址符号地址过程定义及调用例n定义延时子程序定义延时子程序 nDELAY PROCn PUSH BXn PUSH CXn MOV BL,2nNEXT: MOV CX,4167nW10M: LOOP W10Mn DEC BLn JNZ NEXTn POP CXn POP BXn RE

18、TnDELAY ENDPn调用延时子程序:调用延时子程序: nCALL DELAY 七、宏命令伪指令n 源程序中由汇编程序识别的具有独源程序中由汇编程序识别的具有独 立功能的一段程序代码立功能的一段程序代码n格式:格式: 宏命令名宏命令名 MACRO ENDM宏体宏体宏宏八、其它伪指令 段内程序代码或变量的起始偏移地址段内程序代码或变量的起始偏移地址n格式:格式: ORG 表达式表达式n例:例: ORG 2000H计算值为计算值为非负常数非负常数ORG其它伪指令nNAME-为目标程序设定一个名字为目标程序设定一个名字n格式:格式: NAME 模块名模块名nTITLE-为程序清单指定打印标题为程

19、序清单指定打印标题n格式:格式: TITLE 标题名标题名4.3 功能调用DOS 功能调用功能调用 BIOS功能调用功能调用DOS 功能调用n包含多个子功能的功能包;包含多个子功能的功能包;n用软中断指令调用,中断类型码固定为用软中断指令调用,中断类型码固定为21H;n各子功能采用功能号来区分。各子功能采用功能号来区分。DOS 功能调用设备设备管理管理DOS 功能调用n调用格式:调用格式: MOV AH,功能号功能号 INT 21H一、单字符输入n调用方法:调用方法: MOV AH,01 INT 21Hn输入的字符在输入的字符在AL中中单字符输入例GET_KEY:GET_KEY: MOVMOV

20、AH,1AH,1 INTINT21H21H CMPCMPAL,AL,Y Y JZ JZ YESYES CMP CMPAL,AL,N N JZ JZ NONO JMP JMPGET_KEYGET_KEY YES: YES: NO: NO: 交互式应交互式应 答程序答程序二、字符串输入n注意问题:注意问题:n调用格式调用格式n字符输入缓冲区的定义字符输入缓冲区的定义1. 调用格式 功能号功能号OAH 字符串在内存中的存放地址字符串在内存中的存放地址nINT 21Hn AHn DS:DX2. 定义字符缓冲区n用户自定义缓冲区格式:用户自定义缓冲区格式:0DHN1N2整个缓冲区整个缓冲区最大可键入字符数最大可键入字符数实际键入字符数实际键入字符数存放键入的字符存放键入的字符存放字符个数:存放字符个数:255输入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?) n LEA DX,DAT1 MOV AH,0AH INT 21H在数据段在数据段中定义中定义输入缓冲区14H ?20个字节个字节定义后的输入缓冲定义后的输入缓冲区初始状态:区初始状态:三、单字符显示输出 功能号功能号O2H 待输出字符待输出字符nINT 21Hn AHn DL单字符显示输出例nMOVAH,02nMOVDL,41HnINT21H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论