版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章
汇编语言程序设计5.1汇编语言的基本概念
5.1.1汇编语言源程序格式
5.1.2
汇编程序上机过程5.2伪指令语句
5.2.1数据定义伪指令
5.2.2符号定义伪指令
5.2.3段定义语句
5.2.4过程定义语句5.3宏指令语句5.4DOS系统与BIOS系统IO子过程调用5.5汇编语言程序设计的基本方法
5.5.1顺序结构程序
5.5.2分支结构程序设计
5.5.3循环结构程序设计
5.5.4子程序设计重点
1.子程序设计方法
2.宏汇编设计方法
3.程序设计基本思路
难点 程序(分支循环等结构)设计思路本章重点、难点5汇编语言程序设计(5.1汇编语言的基本概念)5.1.1汇编语言格式1.整体格式—分段结构:汇编语言源程序由若干段(SEGMENT)组成。每个段以SEGMENT语句开始,以ENDS语句结束。各段内均有若干行语句。源程序的结尾是END语句;后面的地址标号指明最开始执行指令。D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5汇编语言程序设计(5.1汇编语言的基本概念)5.1.1汇编语言格式2.语句类型:指令语句:指令是给CPU的命令,在运行时由CPU执行。每条指令对应CPU一种特定的操作,例如传送、加法等语句;编译后,每条指令产生一一对应的机器指令码;伪指令语句:伪指令是给编译程序的命令,在编译过程中由编译程序处理。如定义段、定义变量等语句;编译后,伪指令不产生与之相应的机器码。宏指令语句:是一种用户利用伪指令语句自己定义的语句。D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5汇编语言程序设计(5.1汇编语言的基本概念)5.1.1汇编语言格式3.语句格式:指令语句与伪指令语句的格式类似。格式一般为:[名字]
助记符
[操作数]对于指令语句:名字即为地址标号,存放其后指令在代码段的偏址。名字后须加“:”对于伪指令语句:名字为段名、变量名等(也常含地址)。通常后面不用加“:”D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5汇编语言程序设计(5.1汇编语言的基本概念)5.1.2汇编语言生成可执行文件过程用常用软件(如Windows记事本软件)编写源程序(.asm文件)用编译程序(如masm)编译源程序,生成目标文件(.obj文件)用链接程序(如link)链接目标文件,生成可执行文件(.exe文件等)2.实现方法:1)可用集成环境较高的软件实现,如emu8086。这些软件集编写源程序、编译、链接功能与一体,以上步骤可自动完成。2)可用宏编译程序(如masm)、链接程序(如link)逐步实现。3)可用行编译程序(如debug)实现。1.实现过程:5汇编语言程序设计5.2伪指令语句
5.2.1数据定义伪指令
5.2.2符号定义伪指令
5.2.3段定义语句
5.2.4过程定义语句5汇编语言程序设计(5.2伪指令语句)5.2.1数据定义伪指令数据定义伪指令用途是:定义变量并给变量赋初值,或仅定义变量(分配存储单元),而不赋予特定的值。常用的有DB,DW,DD。
1.DB(DefineByte)
用于定义字节型变量。
DB后面的操作数每个占有1个字节。2.DW(DefineWord)
定义变量的类型为字(WORD)。DW后面的操作数每个占1个字,即2个字节。在内存中存放时,低位字节在前,高位字节在后。
3.DD(DefineDoubleword)
定义变量的类型为双字(DWORD)。DD后面的操作数每个占有2个字,即4个字节。在内存中存放时,低位字在前,高位字在后。5汇编语言程序设计(5.2伪指令语句)5.2.1数据定义伪指令指令的格式一般为:[变量名]助记符操作数[,操作数…]
如:ValDB11,22,33,44;定义了4个字节型单元,分别存11,22,33,44
StrDB‘Hello’;定义了5个字节型单元,分别存5个字符的ASC码
SDW100dup(0);定义了100个字型单元,均存入预存值0
注:1.变量名后面不跟冒号。
2.助记符后的操作数(变量)可为数组,数组元素间用逗号分开。
也可为若干字符组成的串,整串外加引号
datasegmentval1db012hval2dw034hval3db0abh,0cdhval4dw034h,0abcdhString1db2dup('0')String2dw2dup('0')dataends5.2.2
子程序定义伪指令符号定义伪指令的用途是给一个符号重新命名,或定义新的类型属性等。符号包括汇编语言的变量名、标号名、过程名、寄存器名以及指令助记符等。
常用的符号定义伪指令有EQU、=(等号)和LABEL。
1.EQU
格式:名字
EQU表达式
其将表达式的值赋予一名字。以后可用该名字代替此表达式。式中的表达式可以是一个常数、数值表达式等。如:5.2.2
子程序定义伪指令
CR EQU 0100H ;常数如果源程序中多次引用某表达式,可利用EQU给其赋一名字,以代替程序中的表达式,使程序简洁。将来如果改变表达式的值,也只需修改一处5汇编语言程序设计(5.2伪指令语句)5.2.3段定义伪指令Datasegment…DataendsStacksegment
stack…StackendsCodesegmentassumecs:Code,ds:Data,ss:StackStart:
movax,Data
mov
ds,ax
movax,Extr
mov
es,ax
movax,Stack
mov
ss,ax…Codeends1.其用途是在汇编程序中定义段。2.包括段定义伪指令和段关系说明伪指令等3.段定义语句为Segment/Ends。使用格式为:
段名字segment …
段名字ends4.段关系说明伪指令为Assume,用以指明程序中的段与CPU中段寄存器的关系。格式为:
Assume段寄存器名:段名[,段寄存器名:段名,…]
注:1)Assume应放在可执行指令的前面。
2)Assume只是说明了这种关系,并没有给CPU段寄存器赋予实际初值。用户需添加指令赋值给段寄存器。子程序也称过程,格式为:子程序名PROC..
子程序名ENDP
5汇编语言程序设计(5.2伪指令语句)5.2.4
子程序定义伪指令codesegmentstart:.
call
mysub
;调用子程序语句
.
mysub
proc
;定义子程序起点语句
.
ret
;返回主程序语句
mysub
endp
;定义子程序终点语句codeendsendstart两伪指令(PROC与ENDP)前面的子过程名必须一致,且成对。程序中其他地方用CALL指令调用子过程,格式为:
Call
过程名子程序中应一般有返回指令RET。执行RET后,程序返回到Call指令的下一条指令。5.2.2
子程序定义伪指令
(示例):
定义一子过程,实现输出n个‘笑脸’(ASC码为01h)。n由主程序指定。`codesegmentStart:callmysub
hlt
mysubprocpushaxpushdx
movah,02h
movdl,01h
int21hpopdxpopaxret
mysub
endp
endsendStart
5汇编语言程序设计5.3宏指令语句(宏语句)宏指令语句:用宏定义伪指令定义的语句(包括指令与伪指令)。宏定义伪指令为:MACRO与ENDM。使用格式为:宏指令名MACRO参数[,参数,…]
(宏定义体)
宏指令名
ENDM
以上语句将一个宏指令名定义为宏定义体(宏伪指令中包含的程序段)。宏语句定义后,用宏调用语句调用,格式为:宏指令名参数[,参数,…]
编译时,宏指令名被替换为相应的宏定义体(这个过程称为宏扩展)。宏必须先定义后调用。codesegment
mymac
macroN;
定义宏起点语句
. .
mymac
endm
;定义宏终点语句
Start:.
mymac
N
;宏调用语句
.codeendsendstart5.3宏定义指令
(示例):Csegment
MymacmacroN
movah,02h
movdl,N
int21h
Mymac
endm
Start:
mymac1
hltCendsendStart定义一宏,实现输出n个‘笑脸’(ASC码为01h)。n由宏参数指定。宏指令与子程序比较:
宏指令是用一条指令来代替一段程序以简化源程序,子程序也有类似功能。两者区别为:
(1)宏指令在汇编过程中进行处理,在每个宏调用处,将相应的宏体插入;而子程序指令由CPU处理,调用子程序时,将IP转移到子程序的入口地址。
(2)宏指令简化了源程序,但不能简化目标程序。汇编以后,在每个宏调用处,宏体中指令的机器代码被拷入,因此不节省内存单元;对于子程序来说,在目标程序中定义子程序的地方将产生相应的机器代码,但每次调用时,只需用CALL指令,不再重复出现子程序的机器代码,可以节省内存单元。
(3)从执行时间来看,调用子程序和从子程序返回需要保护断点、恢复断点等,这些都将额外占用CPU的时间;而宏指令不需要,相对来说,执行速度较快。5汇编语言程序设计5.4DOS系统与BIOS系统IO子过程调用
8086微机提供了两个子程序库,方便程序员实现磁盘、I/O的使用与管理。一个包含在磁盘操作系统(DOS,DiskOperationSystem),为DOS提供的一组子程序,称为DOS系统功能调用。另一个包含在基本输入输出系统
(BIOS,BasicInputOutputSystem),称为BIOS服务子程序。BIOS是一组固化到主板上的ROM芯片上的程序,保存着重要的基本I/O的程序。两子程序库实现的功能主要有:
(1)磁盘的读/写及控制管理;
(2)基本输入/输出管理(如键盘、打印机、显示器等);DOS调用中(INT21H),与键盘和显示器操作相关功能调用过程:均采用软中断指令INTn完成。一般有三个步骤:①子程序的入口参数送相应的寄存器(有些子程序调用不需要入口参数,可略)。②子程序编号(即功能号)送AH。③
发出中断请求:INTn(n为中断类型号,如DOS功能调用时n=21H)。
5.4DOS系统与BIOS系统IO子过程调用例1:INT21H中,1号功能调用格式:MOV AH,1 INT 21H系统执行该功能时将扫描键盘,等待键入。一旦有键按下,就将键值(相应字符的ASCII码值)读入。先检查是否是Ctrl+Break,若是,则退出;否则将键值送入AL,同时将字符显示在屏幕上。5.4DOS系统与BIOS系统IO子过程调用codesegmentstart:
movah,1h
int21h
hltcodeendsendstart例2:INT21H中,9号功能调用格式:MOV DX,待显示串
首单元的偏址
MOV AH,9
INT 21H功能:本功能使显示器显示字符串。要求DS:DX必须指向内存中一个以“$”作为结束标志的串。5.4DOS系统与BIOS系统IO子过程调用datasegmentStringdb'Assembly,Iloveyou!','$'codesegmentstart:
movax,data
mov
ds,ax
mov
dx,offsetptrString
mov
ah,09h
int21h
hltcodeendsendstart5.5汇编语言程序设计的基本方法
5汇编语言程序设计5.5.1顺序结构程序5.5.2分支结构程序设计5.5.3循环结构程序设计5.5.4子程序设计5汇编语言程序设计(5.5汇编语言程序设计的基本方法
)5.5.2分支结构程序设计
分支程序是利用
能改变标志位的指令和转移指令实现的。
转移指令有无条件转移指令JMP、条件转移指令Jx两类。
无条件转移指令
将程序转向其后的目的标号指定的地址。
条件转移指令
跟在能改变状态标志的指令后,根据状态标志决定是否转移到其后的目的地址处。
分支与循环结构程序设计(示例1):例:编程将一串中大于80H的数减去80H,小于等于80H的不变。datasegment
valdb012h,084h,080h,0ffhendscodesegmentStart:
…leasi,val
mov
cx,4Next:
moval,[si]
cmpal,80h
jbeSmallersubal,80hmov[si],alSmaller:incsiloopNextcodeendsendStart;获得val第一单元的段内偏址;设置循环次数;取得val中的元素;比较该元素与80h;若小于等于,直接处理下一个;否则,将该元素减80h;再将其存至原位置;修改si,指向下一单元;循环DS:0H存储器数据段:12H84H80H:分支与循环结构程序设计(示例2):例:一串中含有一@,找出其在串中位置loc,并将loc存到整串下一单元。datasegmentstr1db‘Hi’str2db‘Email@’locdb0endscodesegmentStart:..
leasi,str2
mov
bx,si
mov
cx,11Next:
moval,[si]
cmpal,‘@’
jnzbreakincsiloopBreak:subsi,bx
mov[loc],sicodeendsendStartDS:0H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024安全生产培训
- 2024至2030年中国处方插数据监测研究报告
- 2023年液压破拆属具项目综合评估报告
- 2024年特色风味及小吃服务项目成效分析报告
- 2024至2030年中国自动上胶折边机数据监测研究报告
- 2024至2030年中国灵敏(扇形)分裂式分度凸轮数据监测研究报告
- 2024至2030年中国数字检流计数据监测研究报告
- 2024至2030年中国室内外装饰材料行业投资前景及策略咨询研究报告
- 2024至2030年中国变色瓷杯数据监测研究报告
- 内蒙古巴彦淖尔市(2024年-2025年小学五年级语文)人教版小升初真题((上下)学期)试卷及答案
- CHT 8023-2011 机载激光雷达数据处理技术规范(正式版)
- 【新课标】高中生物新课程标准考试题三套
- 西方现代艺术赏析(吉林联盟)智慧树知到期末考试答案章节答案2024年吉林大学
- 2023-2024学年下学期七年级期中考试家长会课件
- 手术器械发展史
- 《通信工程设计与施工》试卷及答案
- (新课标)新冀人版小学科学六年级上册第四单元第13课《动物与能量》说课稿
- 人工智能科普教育活动方案
- (正式版)SHT 3045-2024 石油化工管式炉热效率设计计算方法
- 《老年健康照护与促进》课件-模块七 老年人常见疾病照护
- (2024年)UG教程模具编程设计
评论
0/150
提交评论