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

下载本文档

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

文档简介

会计学1第4章-汇编语言程序设计2§4.1

汇编语言源程序理解:汇编语言源程序的结构汇编语言语句类型及格式第1页/共77页3一、汇编语言源程序结构第2页/共77页41.

汇编语言源程序与汇编程序汇编语言源程序汇编程序用助记符编写汇编程序汇编语言源程序机器语言目标程序源程序的编译程序第3页/共77页52.

汇编语言程序设计与执行过程输入汇编语言源程序(EDIT)汇编(MASM)链接(LINK)调试(TD)源文件.ASM目标文件.OBJ可执行文件.EXE最终程序第4页/共77页6汇编语言源程序结构数据段名SEGMENT

…数据段名ENDS附加段名SEGMENT

…附加段名ENDS堆栈段名

SEGMENT…堆栈段名

ENDS代码段名

SEGMENT…代码段名

ENDS

END

第5页/共77页7一个完整源程序结构例DSEGSEGMENTDATA1DB1,2,3DUP(?)DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS表示该逻辑段的段地址此处还不能确定逻辑段的性质第6页/共77页8一个完整源程序结构例CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDSENDSTART源程序代码段寄存器初始化——将段地址送相应的段寄存器说明各逻辑段的性质第7页/共77页源程序的结构特点(1)汇编语言程序通常由若干段组成,段由伪指令SEGMENT与ENDS定义,各段顺序任意,段的数目按需要确定,原则上不受限制。(2)段由若干语句组成,语句以指令为主体而构成。一条语句写在一行上,书写时语句的各部分应尽量对齐(3)汇编语言程序中至少要有一个启动标号,作为程序开始执行时目标代码的入口地址。启动标号常用START、BEGIN、MAIN等命名。(4)同时需要配合ASSUME伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段为增加程序的可读性,可在汇编语言语句“;”后加上注释。(5)每个源程序在代码中都必须有返回DOS操作系统的指令语名.汇编语言程序设计中,有多种返回DOS的方法,但一般利用DOS功能调用的4CH子功能实现,它需要的入口参数是AL=返回数码(通常用0表示程序没有错误)movax,4c00h int21h第8页/共77页10二、汇编语言语句类型及格式第9页/共77页111.

汇编语言语句类型指令性语句指示性语句CPU执行的语句,能够生成目标代码CPU不执行,而由汇编程序执行的语句,不生成目标代码第10页/共77页122.

汇编语言语句格式

指令性语句:

[标号:][前缀]助记符[操作数],[操作数][;注释]指令的符号地址标号后要有冒号操作码注释前加分号第11页/共77页13指示性语句[名字]伪指令助记符操作数[,操作数,…][;注释]变量的符号地址其后不加冒号指示性语句中至少有一个操作数第12页/共77页143.

标号、名字标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用保留字(如寄存器名,指令助记符,伪指令)。 第13页/共77页154.

操作数寄存器存储器单元常量变量或标号表达式第14页/共77页16常量数字常量字符串常量例:‘A’

MOVAL,’A’例:’ABCD’汇编时被译成对应的ASCII码41H,42H,43H,44H用单引号引起的字符或字符串第15页/共77页17变量代表内存中的数据区,程序中视为存储器操作数变量的属性:变量所在段的段地址变量单元地址与段首地址之间的位移量。字节型、字型和双字型段值偏移量类型第16页/共77页18表达式算术运算逻辑运算*关系运算取值运算和属性运算其它运算第17页/共77页19算术运算和逻辑运算符算术运算符+,-,*,/,MOD逻辑运算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-1第18页/共77页20取值运算符取得其变量或标号的偏移地址取得其变量或标号的段地址TYPE取变量的类型LENGTH取所定义存储区的长度SIZE取所定义存储区的字节数用于分析存储器操作数的属性获取变量的属性值OFFSETSEG第19页/共77页21取值运算符例

MOVAX,SEGDATAMOVDS,AXMOVBX,OFFSETDATA

LEABX,DATA等价于第20页/共77页22取值运算符例若BUFFER存储区用如下伪指令定义:

BUFFERDW200DUP(0)则:

TYPE BUFFER 等于2

LENGTHBUFFER 等于200

SIZEBUFFER 等于400第21页/共77页23属性运算符用于指定其后存储器操作数的类型运算符:PTR例:

MOVBYTEPTR[BX],12H第22页/共77页24其它运算符方括号:

[]段重设符

段寄存器名:[]方括号中内容为操作数的偏移地址用于修改默认的段基地址第23页/共77页25§4.2

伪指令掌握:伪指令的格式及实现的操作伪指令的应用第24页/共77页26伪指令由汇编程序执行的“指令系统”作用:定义变量;分配存储区定义逻辑段;指示程序开始和结束;定义过程等。第25页/共77页27常用伪指令数据定义伪指令符号定义伪指令段定义伪指令结束伪指令过程定义伪指令宏命令伪指令第26页/共77页28一、数据定义伪指令用于定义数据区中变量的类型及大小格式:

[变量名]伪指令助记符操作数,…;[注释]符号地址定义变量类型定义变量值及区域大小第27页/共77页291.

数据定义伪指令助记符DB定义的变量为字节型DW定义的变量为字类型(双字节)DD定义的变量为双字型(4字节)DQ定义的变量为4字型(8字节)DT定义的变量为10字节型第28页/共77页30数据定义伪指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD22H,22H,33445566H以上变量在内存中的存放形式第29页/共77页31数据定义伪指令例_变量在内存中的分布DATA111223344DATA2224411000033DATA3220022000066554433第30页/共77页32数据定义伪指令的几点说明伪指令的性质决定所定义变量的类型;定义字符串必须用DB伪指令例:

DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H第31页/共77页332.

重复操作符作用:为一个数据区的各单元设置相同的初值目的:常用于声明一个数据区格式:

[变量名]伪指令助记符nDUP(初值,…)例:

M1

DW20DUP(0)M2DB10DUP(5)20个初值为0的字单元10个初值为5的字节单元第32页/共77页343.

“?”的作用表示随机值,用于预留存储空间MEM1DB34H,’A’,?DW20DUP(?)预留40个字节单元,每单元初值为随机值随机数占1个字节单元第33页/共77页35数据定义伪指令例M1DB‘Howareyou?’M2DW3DUP(11H),3344H

DB4DUP(?)M3DB3DUP(22H,11H,?)变量在内存中的分区第34页/共77页36数据定义伪指令例M1‘H’‘o’‘w’‘‘‘a’M211H11H00H44H33H‘r’‘e’‘‘‘y’‘o’‘u’‘?’11H00H00H随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX第35页/共77页37二、符号定义伪指令格式:符号名EQU表达式操作:用符号名取代后边的表达式,不可重新定义例:CONSTANT EQU 100VAREQU30H+99HEQU说明的表达式不占用内存空间第36页/共77页38三、段定义伪指令说明逻辑段的起始和结束;说明不同程序模块中同类逻辑段之间的联系形态第37页/共77页39段定义伪指令格式段名SEGMENT[定位类型][组合类型][’类别’]

┇段名ENDS说明逻辑段的起点说明不同模块中同名段的组和连接方式第38页/共77页40定位类型PARA:段的起点从节边界开始(16个字节为1节)BYTE:段的起点从存储器任何地址开始WORD:段的起点从偶地址开始PAGE:段的起点从页边界开始(256个字节为1页)第39页/共77页41组合类型与其它模块中的同名段在满足定位类型的前提下具有的组合方式:NONE:不组合PUBLIC:依次连接(顺序由LINK程序确定)COMMON:覆盖连接STACK:堆栈段的依次连接AT表达式:段定义在表达式值为段基的节边界MEMORY:相应段在同名段的最高地址处。第40页/共77页42类别不同模块连接时将相同类别的段放在连续的内存区域中第41页/共77页43段定义伪指令例DATASEGMENTMEM1DB11H,22HMEM2DB‘Hello!’

MEM3DW2DUP(?)DATAENDS变量在逻辑段中的位置就代表了它的偏移地址表示变量所在逻辑段的段地址表示变量的类型第42页/共77页44四、设定段寄存器伪指令说明所定义逻辑段的性质格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]第43页/共77页45五、结束伪指令表示源程序结束格式:

END[标号]实际编程中必有,该处标号须与程序第1条指令前的标号一致。第44页/共77页46六、过程定义伪指令用于定义一个过程体格式:

过程名PROC[NEAR/FAR]┇RET过程名ENDPP157例过程的入口地址第45页/共77页过程定义及调用例定义延时子程序DELAYPROCPUSHBXPUSHCX

MOVBL,2NEXT:MOVCX,4167W10M:LOOPW10MDECBLJNZNEXTPOPCXPOPBXRETDELAYENDP47调用延时子程序:CALLDELAY第46页/共77页48七、宏命令伪指令

源程序中由汇编程序识别的具有独立功能的一段程序代码格式:

宏命令名MACRO<形式参数>

┇ENDM宏体宏第47页/共77页八、其它伪指令

段内程序代码或变量的起始偏移地址格式:ORG表达式例:DATASEGMENTORG200M1DB12H,4DUP(0)M2DW1234HDATAENDS计算值为非负常数ORGM10034121200┇M2200205第48页/共77页50§4.3

功能调用BIOS驻留在ROM中的基本输入/输出系统加电自检,装入引导,主要I/O设备处理程序及接口控制BIOS功能调用使程序员不必了解硬件操作的细节而实现相应的操作。DOS磁盘操作系统相比BIOS,对硬件的依赖性小DOS功能与BIOS功能均通过中断方式调用。第49页/共77页DOS中断与BIOS中断DOS中断包括:设备管理,目录管理,文件管理,其它在某些情况下,同样的功能既可选择DOS中断,也可选择BIOS中断51第50页/共77页DOS调用和BIOS调用的基本步骤将调用参数装入指定的寄存器;将功能号装入AH;按中断类型号调用DOS或BIOS中断;检查返回参数是否正确。52第51页/共77页53一、DOS功能调用说明:DOS中断是包含多个子功能的功能包;各子功能用功能号区分;用软中断指令调用,中断类型码固定为21H。调用格式:MOVAH,功能号<置相应参数>

INT21H第52页/共77页541.单字符输入调用方法:

MOVAH,01INT21H输入的字符在AL中第53页/共77页55单字符输入例GET_KEY:

MOV AH,1

INT 21H

CMP AL,’Y’

JZ YES CMP AL,’N’

JZ NO JMP GET_KEY

YES:┇ NO: ┇交互式应答程序第54页/共77页562.字符串输入注意问题:调用格式字符输入缓冲区的定义第55页/共77页57调用格式

功能号OAH字符串在内存中的存放地址INT21HAHDS:DX第56页/共77页58定义字符缓冲区用户自定义缓冲区格式:0DHN1N2整个缓冲区最大可键入字符数实际键入字符数存放键入的字符存放字符个数:≤255第57页/共77页59输入字符串程序段DAT1DB20,?,20DUP(?)┇

LEADX,DAT1MOVAH,0AHINT21H在数据段中定义第58页/共77页60输入缓冲区14H?20个字节定义后的输入缓冲区初始状态:第59页/共77页613.单字符显示输出功能号O2H待输出字符INT21HAHDL第60页/共77页62单字符显示输出例MOV AH,02MOV DL,41HINT 21H

执行结果:屏幕显示A第61页/共77页634.字符串输出显示

功能号O9H待输出字符串的偏移地址INT21HAHDS:DX第62页/共77页64字符串输出显示注意点:被显示的字符串必须以‘$’结束;所显示的内容不应出现非可见的ASCII码;若考虑输出格式需要,在定义字符串后,加上回车符和换行符。第63页/共77页65字符串输出显示例DATA SEGMENTMESS1DB‘InputString:’,0DH,0AH,’$’DATAENDSCODESEGMENT ┇MOV AH,09MOV DX,OFFSETMESS1INT 21H┇第64页/共77页5.返回操作系统(DOS)功能功能号:4CH调用格式:MOVAH,4CHINT21H功能:程序执行完该2条语句后能正常返回DOS常位于程序结尾处。66第65页/共77页二、BIOS功能调用通过中断指令调用相应的BIOS中断服务程序BIOS中断服务程序实际上是一些对端口的输入输出操作,是微机系统中软件与硬件之间的一个可编程接口。光驱、硬盘管理;中断设置等67附录D第66页/共77页键盘状态检验可利用类型码为16H的BIOS中断判断是否有任意键按下调用格式:AHINT16H判断方法:若ZF=0若ZF=168功能号1有键按下无键按下第67页/共77页例:在屏幕上显示信息,当有任意键按下时退出69DSEGSEGMENT

MESSDB‘Hello,World!’,0DH,0AH,’$’DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXAGAIN:LEADX,MESSMOVAH,9INT21HMOVAH,1INT16HJZAGAINMOVAH,4CHINT21HCSEGENDSENDSATRT第68页/共77页键盘状态检验判断是否有任意键按下的方法可以用DOS软中断,功能号为0BH,出口参数为AL。格式:MOVAH,0BHINT21H若AL=FFH,则有键按下;若AL=0,则无键按下70第69页/共77页DOS和BIOS功能调用小结均通过中断指令调用。1个中断类型码对应1个功能程序包;每个程序包中的子功能通过功能号区分,调用时功能号须送AH;部分功能既可用DOS中断也可以用BIOS中断;注意不同子功能的入口/出口参数要求;DOS和BIOS中断均可能影响AX。71第70页/共77页72§4.4

汇编语言程序设计设计步骤:根据实际问题抽象出数学模型确定算法画程序流程图分配内存工作单元和寄存器程序编码调试第71页/共77页73汇编语言程序结构顺序结构循环结构先判定型后判定型分支结构单分支多分支子程序结构第72页/共77页例4-16对于三个8位无符号数86H,34H和21H,编写S=86H*34H-21H的程序

DATASEGMENTNUMDB86H,34H,21HRESULTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,NUMLEADI,RESULTMOVAL,[SI]MOVBL,[SI+1]MULBLMOVBL,[SI+2]MOVBH,0SUBAX,BXMOV[DI],AXMOVAH,4CHINT21HCODEENDS

ENDSTART顺序结构程序设计例题第73页/共77页分支结构程序设计例题例4-18编写程序,数据以字节变量BUFFER为首地址的100个单元清零。参考书上程序DATASEGMENTBUFFERDB100DUP(?)COUNTDB100DATAENDSSTACKSEGMENTDW32DUP(?

温馨提示

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

评论

0/150

提交评论