版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第4 4章章汇编语言程序设计汇编语言程序设计2主要内容n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句格式汇编语言语句格式n伪指令伪指令n功能调用功能调用n汇编语言程序设计汇编语言程序设计34.1 汇编语言源程序了解:了解:n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句类型及格式汇编语言语句类型及格式4一、汇编语言源程序结构51. 汇编语言源程序与汇编程序n汇编语言源程序汇编语言源程序n汇编程序汇编程序用助记符编写用助记符编写汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序源程序的编译程序源程序的编译程序62. 汇编语言程序设计与执行过程n输入
2、汇编语言源程序(输入汇编语言源程序(EDIT)n汇编(汇编(MASM)n链接(链接(LINK)n调试(调试(TD)源文件源文件 . ASM目标文件目标文件 .OBJ可执行文件可执行文件.EXE最终程序最终程序7二、汇编语言语句类型及格式二、汇编语言语句类型及格式81. 汇编语言语句类型指令性语句指令性语句指示性语句指示性语句CPU执行的语句,执行的语句,能够生成目标代码能够生成目标代码CPU不执行,而由汇不执行,而由汇编程序执行的语句,编程序执行的语句,不生成目标代码不生成目标代码92. 汇编语言语句格式 指令性语句:指令性语句: 标号:标号: 前缀前缀 助记符助记符 操作数操作数,操作数操作
3、数 ;注释;注释指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号10指示性语句格式名字名字 伪指令助记符伪指令助记符 操作数操作数 ,操作数,操作数, ;注释;注释变量的符号地址变量的符号地址其后不加冒号其后不加冒号指示性语句中至指示性语句中至少有一个操作数少有一个操作数113. 标号、名字n标号后有冒号,在指令性语句前;名字后不加标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。冒号,在指示性语句前。n英文字母、数字及专用字符组成英文字母、数字及专用字符组成, ,最大长度不最大长度不能超过能超过3131个个, ,且不能由数字打头且不能由
4、数字打头, ,不能用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助记符指令助记符, ,伪指令伪指令) )。 124. 操作数寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式13常 量n数字常量数字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD汇编时被译成对应的汇编时被译成对应的ASCII码码用单引号引起的字符或字符串用单引号引起的字符或字符串14变 量n代表内存中的数据区,程序中视为存储器代表内存中的数据区,程序中视为存储器操作数操作数n变量的属性:变量的属性: 变量所在段的段地址变量所在段的段地址 变量单元地址与段首地址之变量单
5、元地址与段首地址之 间的位移量。间的位移量。 字节型、字型和双字型字节型、字型和双字型段段 值值偏移量偏移量类类 型型15表达式算术运算算术运算逻辑运算逻辑运算*关系运算关系运算取值运算和属性运算取值运算和属性运算其它运算其它运算16算术运算和逻辑运算符n算术运算符算术运算符n+,-,*,/,MODn逻辑运算符逻辑运算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-117取值运算符取得其后变量或标号的偏移地址取得其后变量或标号的偏移地址取得其后变量或标号的段地址取得其后变量或标号的段地址TYPE 取取LENGTH 取所定义存储区的长度取所定义存储
6、区的长度SIZE 取所定义存储区的字节数取所定义存储区的字节数n用于分析存储器操作数的属性用于分析存储器操作数的属性n获取变量的属性值获取变量的属性值OFFSETSEG18取值运算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等价于等价于19取值运算符例n若若BUFFER存储区用如下伪指令定义:存储区用如下伪指令定义: BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0) 则:则: TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER
7、等于等于200200 SIZE BUFFERSIZE BUFFER等于等于40040020属性运算符n 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型n 运算符:运算符:PTRn 例:例: MOV BYTR PTRBX,12H21其它运算符n方括号:方括号: n段重设符段重设符 段寄存器名:段寄存器名: 方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址用于修改默认的段基地址用于修改默认的段基地址224.2 伪指令掌握:掌握:n伪指令的格式及实现的操作伪指令的格式及实现的操作n伪指令的应用伪指令的应用23伪指令n由汇编程序执行的由汇编程序执行的“指令系统指令系统”n作用
8、:作用:n定义变量;定义变量;n分配存储区分配存储区n定义逻辑段;定义逻辑段;n指示程序开始和结束;指示程序开始和结束;n定义过程等。定义过程等。24常用伪指令数据定义伪指令数据定义伪指令符号定义伪指令符号定义伪指令段定义伪指令段定义伪指令结束伪指令结束伪指令过程定义伪指令过程定义伪指令宏命令伪指令宏命令伪指令25一、数据定义伪指令n用于定义数据区中变量的类型及大小用于定义数据区中变量的类型及大小n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 操作数,操作数, ;注释注释符号地址符号地址定义变量类型定义变量类型定义变量值定义变量值及区域大小及区域大小261. 数据定义伪指令助记符nDB
9、 定义的变量为字节型定义的变量为字节型nDW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)nDD 定义的变量为双字型(定义的变量为双字型(4字节)字节)nDQ 定义的变量为定义的变量为4字型(字型(8字节字节)nDT 定义的变量为定义的变量为10字节型字节型27数据定义伪指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 11H*2,22H,33445566H以上变量在内存以上变量在内存中的存放形式中的存放形式28数据定义伪指令例_变量在内存中的分布变量在内存中的分布DATA111223344DATA222441
10、1000033DATA32200220000XX6655443329数据定义伪指令的几点说明n伪指令的性质决定所定义变量的类型;伪指令的性质决定所定义变量的类型;n定义字符串必须用定义字符串必须用DB伪指令伪指令n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H302. 重复操作符n作用:作用:n为一个数据区的各单元设置相同的初值为一个数据区的各单元设置相同的初值n目的:目的:n常用于声明一个数据区常用于声明一个数据区n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)n例:例: BW 20 DUP(0)M1 DB 10 DUP(
11、5)20个初值为个初值为0的字单元的字单元10个初值为个初值为5的字节单元的字节单元313. “?”的作用n表示随机值,用于预留存储空间表示随机值,用于预留存储空间nMEM1 DB 34H,A,?,? DW 20 DUP(?)(?)预留预留40个字节单元,每单元初值为随机值个字节单元,每单元初值为随机值随机数随机数占占1个字节单元个字节单元32数据定义伪指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)变量在内存中的分区变量在内存中的分区33数据定义伪指令例M1How a
12、M211H11H00H44H33H r e you?11H00H00H随机数随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX34二、符号定义伪指令n格式:格式:n符号名符号名 EQU EQU 表达式表达式n操作:操作:n用符号名取代后边的表达式,不可重新定义用符号名取代后边的表达式,不可重新定义n例:例:nCONSTANTCONSTANTEQUEQU100100nVAR EQU 30H+99HVAR EQU 30H+99HEQU说明的表达式不占用内存空间说明的表达式不占用内存空间35三、段定义伪指令n说明逻辑段的起始和结束;说明逻辑段的起始和结束;n说明不同程序模块中
13、同类逻辑段之间的联系说明不同程序模块中同类逻辑段之间的联系形态形态36段定义伪指令格式段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS说明逻辑段说明逻辑段的起点的起点说明不同模块中同名段的说明不同模块中同名段的组和连接方式组和连接方式37定位类型nPARA: 段的起点从节边界开始段的起点从节边界开始 (16个字节为个字节为1节)节)nBYTE: 段的起点从存储器任何地址开始段的起点从存储器任何地址开始nWORD:段的起点从偶地址开始段的起点从偶地址开始nPAGE: 段的起点从页边界开始段的起点从页边界开始 (256个字节为个字节
14、为1页)页)38组合类型n与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提 下具有的组合方式:下具有的组合方式:nNONE: 不组合不组合nPUBLIC: 依次连接(顺序由依次连接(顺序由LINK程序确定)程序确定)nCOMMON: 覆盖连接覆盖连接nSTACK: 堆栈段的依次连接堆栈段的依次连接nAT 表达式:段定义在表达式值为段基的节边界表达式:段定义在表达式值为段基的节边界nMEMORY: 相应段在同名段的最高地址处。相应段在同名段的最高地址处。39类别n不同模块连接时将相同类别的段放在连不同模块连接时将相同类别的段放在连续的内存区域中续的内存区域中40段
15、定义伪指令例DATA SEGMENT MEM1 DB 11H,22H MEM2 DB Hello! MEM3 DW 2 DUP(?)(?)DATA ENDS变量在逻辑段变量在逻辑段中的位置就代中的位置就代表了它的偏移表了它的偏移地址地址表示变量所在表示变量所在逻辑段的段地逻辑段的段地址址表示变量的类表示变量的类型型41四、设定段寄存器伪指令n说明所定义逻辑段的性质说明所定义逻辑段的性质n格式:格式: ASSUME 段寄存器名段寄存器名:段名段名,段寄存器名,段寄存器名:段名,段名,42五、结束伪指令n表示源程序结束表示源程序结束n格式:格式: END 标号标号实际编程中必有,该实际编程中必有,
16、该处标号须与程序第处标号须与程序第1条条指令前的标号一致。指令前的标号一致。43汇编语言源程序结构数据段名数据段名 SEGMENT 数据段名数据段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆栈段名堆栈段名 SEGMENT 堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENT 代码段名代码段名 ENDS END 44一个完整源程序结构例DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?)(?) DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT ST
17、ACK STACK DB 200 DUP(?)(?)SSEG ENDS表示该逻辑表示该逻辑段的段地址段的段地址此处还不能此处还不能确定逻辑段确定逻辑段的性质的性质45一个完整源程序结构例 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 CSEG ENDS END START源程序源程序 代码代码段寄存器初始化段寄存器初始化将段地址送将段地址送相应的段相应的段寄存器寄存器说明各说明各逻辑段逻辑段的
18、性质的性质46例DATA SEGMENT TABLE DW 3400H,5600H,2300H,4500H, 2300H,1200H, 2344H,3500HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS;DATASTART:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV SI,6 A:JMP DWORD PTRBX+SI+2 画出画出TABLETABLE在内存中的存放情况在内存中的存放情况程序执行完标号为程序执行完标号为A A的指令后:的指令后: CS= CS=? IP= IP=?47程序3(续) MOV BX,OF
19、FSET TABLE MOV SI,06HA:JMP DWORD PTRBX+SI+2 程序执行完标号为程序执行完标号为A的指令后:的指令后: CS=? IP=?48六、过程定义伪指令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 CX
20、n POP BXn RETnDELAY ENDP49n调用延时子程序:调用延时子程序: nCALL DELAY 50七、宏命令伪指令n 源程序中由汇编程序识别的具有独源程序中由汇编程序识别的具有独 立功能的一段程序代码立功能的一段程序代码n格式:格式: 宏命令名宏命令名 MACRO ENDM宏体宏体宏宏八、其它伪指令 段内程序代码或变量的起始偏移地址段内程序代码或变量的起始偏移地址n格式:格式:nORG 表达式表达式n例:例:nDATA SEGMENTn ORG 200n M1 DB 12H,4 DUP(0)n M2 DW 1234HnDATA ENDS计算值为计算值为非负常数非负常数ORGM
21、10034121200M2200205524.3 功能调用nBIOSn驻留在驻留在ROM中的基本输入中的基本输入/输出系统输出系统n加电自检,装入引导,主要加电自检,装入引导,主要I/O设备处理程序及接口控制设备处理程序及接口控制nBIOS功能调用使程序员不必了解硬件操作的细节而功能调用使程序员不必了解硬件操作的细节而实现相应的操作。实现相应的操作。nDOSn磁盘操作系统磁盘操作系统n相比相比BIOS,对硬件的依赖性小,对硬件的依赖性小nDOSDOS功能与功能与BIOSBIOS功能均通过中断方式调用功能均通过中断方式调用。DOS中断与BIOS中断nDOS中断包括:中断包括:n设备设备管理,管理
22、,n在某些情况下,同样的功能既可选择在某些情况下,同样的功能既可选择DOS中断中断,也可选择,也可选择BIOS中断中断53DOS调用和BIOS调用的基本步骤n将调用参数装入指定的寄存器;将调用参数装入指定的寄存器;n将功能号装入将功能号装入AH;n按中断类型号调用按中断类型号调用DOS或或BIOS中断;中断;n检查返回参数是否正确。检查返回参数是否正确。5455一、一、DOS 功能调用n说明:说明:nDOS中断是包含多个子功能的功能包;中断是包含多个子功能的功能包;n各子功能用功能号区分;各子功能用功能号区分;n用软中断指令调用,中断类型码固定为用软中断指令调用,中断类型码固定为21H。n调用
23、格式:调用格式:nMOV AH,功能号功能号 INT 21H561. 单字符输入n调用方法:调用方法: MOV AH,01 INT 21Hn输入的字符在输入的字符在AL中中57单字符输入例GET_KEY:GET_KEY: MOVMOVAH,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: 交互式应交互式应 答程序答程序582. 字符串输入n注意问题:注意问题:n调用格式调用格式n字符输入缓冲区的定义字符输入缓冲区的
24、定义59调用格式 功能号功能号OAH 字符串在内存中的存放地址字符串在内存中的存放地址nINT 21Hn AHn DS:DX60定义字符缓冲区n用户自定义缓冲区格式:用户自定义缓冲区格式:0DHN1N2整个缓冲区整个缓冲区最大可键入字符数最大可键入字符数实际键入字符数实际键入字符数存放键入的字符存放键入的字符存放字符个数:存放字符个数:25561输入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?) n LEA DX,DAT1 MOV AH,0AH INT 21H在数据段在数据段中定义中定义62输入缓冲区14H ?20个字节个字节定义后的输入缓定义后的输入缓冲区初始状态:冲
25、区初始状态:633. 单字符显示输出 功能号功能号O2H 待输出字符待输出字符nINT 21Hn AHn DL64单字符显示输出例nMOVAH,02nMOVDL,41HnINT21H执行结果:执行结果:屏幕显示屏幕显示A654. 字符串输出显示 功能号功能号O9H 待输出字符串的偏移地址待输出字符串的偏移地址nINT 21Hn AHn DS:DX66字符串输出显示n注意点:注意点:n被显示的字符串必须以被显示的字符串必须以$ $结束;结束;n所显示的内容不应出现非可见的所显示的内容不应出现非可见的ASCIIASCII码;码;n若考虑输出格式需要,在定义字符串后,加上若考虑输出格式需要,在定义字
26、符串后,加上回车符和换行符。回车符和换行符。67字符串输出显示例DATA SEGMENT MESS1 DB Input String:, 0DH,0AH,$DATA ENDSCODE SEGMENT MOV AH,09MOV DX,OFFSET MESS1INT21H 5. 返回操作系统(DOS)功能n功能号:功能号:n4CHn调用格式:调用格式:nMOV AH,4CHnINT 21Hn功能:功能:n程序执行完该程序执行完该2条语句后能正常返回条语句后能正常返回OSn常位于程序结尾处。常位于程序结尾处。68二、BIOS功能调用n通过中断指令调用相应的通过中断指令调用相应的BIOS中断服务程序中
27、断服务程序nBIOS中断服务程序实际上是一些对端口的输中断服务程序实际上是一些对端口的输入输出操作,是微机系统中软件与硬件之间入输出操作,是微机系统中软件与硬件之间的一个可编程接口。的一个可编程接口。n光驱、硬盘管理;中断设置等光驱、硬盘管理;中断设置等69附录附录D键盘状态检验n可利用类型码为可利用类型码为16H的的BIOS中断判断是否有中断判断是否有任意键按下任意键按下n调用格式:调用格式:nAHnINT 16Hn判断方法:判断方法:n若若ZF=0n若若ZF=170功能号功能号1有键按下有键按下无键按下无键按下例:在屏幕上显示信息,当有任意键按下时退出在屏幕上显示信息,当有任意键按下时退出71DSEG SEGMENT MESS DB Hello,World!,0DH,0AH,$DSEG ENDSCSEG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脑梗塞患者的智能康复训练
- 2026年项目管理成熟度评估与改进指南
- 自闭症儿童的家庭干预计划
- 2026年康复治疗学专业实操实训报告
- 2026年社区新进护士岗前培训计划
- 练习9 《赏析小说的形象描写》同步练习 (含答案解析)2027年高考一轮总复习
- 2026届重庆市高三考前模拟预测语文试卷(原卷版及解析)
- 2026年幼儿园冬季用火取暖防一氧化碳中毒
- 2026年儿科医院感染管理质量持续改进
- 肉制品电商代运营合作协议
- LY/T 3455-2025竹牙刷
- 第19课 清朝君主专制的强化 课件 人教统编七年级历史下册
- 2024年新课标高考物理试卷(适用黑龙江、辽宁、吉林地区 真题+答案)
- 8S管理培训基础知识课件
- 小学科学教学仪器配备标准
- 城市智慧路灯(5G综合灯杆)建设工程项目(含方案设计及项目实施方案)
- SWITCH暗黑破坏神3超级金手指修改 版本号:2.7.4.84040
- 浙江省消防技术规范难点问题操作技术指南(2020版)
- GB/T 3179-2009期刊编排格式
- GB/T 28730-2012固体生物质燃料样品制备方法
- GB/T 24283-2018蜂胶
评论
0/150
提交评论