欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第4章-汇编语言程序设计课件.ppt

    • 资源ID:73598496       资源大小:1.87MB        全文页数:78页
    • 资源格式: PPT        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第4章-汇编语言程序设计课件.ppt

    1第4章 汇编语言程序设计2教学目的及要求教学目的及要求 1 1)理解理解汇编语言源程序的结构汇编语言源程序的结构2 2)深入理解深入理解伪指令系统伪指令系统3 3)深入理解深入理解DOSDOS功能调用功能调用4 4)掌握掌握汇编语言源程序的设计方法汇编语言源程序的设计方法34.1 汇编语言源程序理解:理解:n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句类型及格式汇编语言语句类型及格式4一、汇编语言源程序结构62.汇编语言程序设计与执行过程n输入汇编语言源程序(输入汇编语言源程序(EDIT)n汇编(汇编(MASM)n链接(链接(LINK)n调试(调试(TD)源文件源文件.ASM目标文件目标文件.OBJ可执行文件可执行文件.EXE最终程序最终程序7汇编语言源程序结构数据段名数据段名 SEGMENT 数据段名数据段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆栈段名堆栈段名 SEGMENT 堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENT 代码段名代码段名 ENDS END 8一个完整源程序结构例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表示该逻辑表示该逻辑段的段地址段的段地址此处还不能此处还不能确定逻辑段确定逻辑段的性质的性质源程序的结构特点n(1)汇汇编编语语言言程程序序通通常常由由若若干干段段组组成成,段由伪指令SEGMENT与ENDS定义,各段顺序任意,段的数目按需要确定,原则上不受限制。n(2)段段由由若若干干语语句句组组成成,语语句句以以指指令令为为主主体体而而构构成成。一条语句写在一行上,书写时语句的各部分应尽量对齐n(3)汇汇编编语语言言程程序序中中至至少少要要有有一一个个启启动动标标号号,作作为为程程序序开开始始执执行行时时目目标标代代码码的入口地址的入口地址。启动标号常用START、BEGIN、MAIN等命名。n(4)同时需要配合ASSUME伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段n为增加程序的可读性,可在汇编语言语句为增加程序的可读性,可在汇编语言语句“;”后加上注释。后加上注释。n(5)每个源程序在代码中都必须有返回DOS操作系统的指令语名.汇汇编编语语言言程程序序设设计计中中,有有多多种种返返回回DOSDOS的的方方法法,但但一一般般利利用用DOSDOS功功能能调调用用的的4CH4CH子子功功能能实实现现,它它需需要要的的入入口口参参数数是是ALAL返返回回数数码码(通通常常用用0 0表表示示程程序序没没有有错错误误)mov ax,4c00hmov ax,4c00h int 21h int 21h11二、汇编语言语句类型及格式二、汇编语言语句类型及格式132.汇编语言语句格式 指令性语句:指令性语句:标号:标号:前缀前缀 助记符助记符 操作数操作数,操作数操作数 ;注释;注释指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号153.标号、名字n标号后有冒号,在指令性语句前;名字后不加冒号,标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。在指示性语句前。n英文字母、数字及专用字符组成英文字母、数字及专用字符组成,最大长度不能超过最大长度不能超过3131个个,且不能由数字打头且不能由数字打头,不能用保留字不能用保留字(如寄存器名如寄存器名,指令助记符指令助记符,伪指令伪指令)。164.操作数寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式18变 量n代表内存中的数据区,程序中视为存储器代表内存中的数据区,程序中视为存储器操作数操作数n变量的属性:变量的属性:变量所在段的段地址变量所在段的段地址 变量单元地址与段首地址之变量单元地址与段首地址之 间的位移量。间的位移量。字节型、字型和双字型字节型、字型和双字型段段 值值偏移量偏移量类类 型型19表达式算术运算算术运算逻辑运算逻辑运算*关系运算关系运算取值运算和属性运算取值运算和属性运算其它运算其它运算20算术运算和逻辑运算符n算术运算符算术运算符n+,-,*,/,MODn逻辑运算符逻辑运算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-121取值运算符取得其变量或标号的偏移地址取得其变量或标号的偏移地址取得其变量或标号的段地址取得其变量或标号的段地址TYPE 取取变量的类型变量的类型变量的类型变量的类型LENGTH 取所定义存储区的长度取所定义存储区的长度SIZE 取所定义存储区的字节数取所定义存储区的字节数n用于分析存储器操作数的属性用于分析存储器操作数的属性n获取变量的属性值获取变量的属性值OFFSETSEG22取值运算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等价于等价于24属性运算符n 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型n 运算符:运算符:PTRn 例:例:MOV BYTE PTRBX,12H25其它运算符n方括号:方括号:n段重设符段重设符 段寄存器名:段寄存器名:方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址用于修改默认的段基地址用于修改默认的段基地址264.2 伪指令掌握:掌握:n伪指令的格式及实现的操作伪指令的格式及实现的操作n伪指令的应用伪指令的应用28常用伪指令数据定义伪指令数据定义伪指令符号定义伪指令符号定义伪指令段定义伪指令段定义伪指令结束伪指令结束伪指令过程定义伪指令过程定义伪指令宏命令伪指令宏命令伪指令29一、数据定义伪指令n用于定义数据区中用于定义数据区中变量变量的类型及大小的类型及大小n格式:格式:变量名变量名 伪指令助记符伪指令助记符 操作数,操作数,;注释注释符号地址符号地址定义变量类型定义变量类型定义变量值定义变量值及区域大小及区域大小31数据定义伪指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 22H,22H,33445566H以上变量在内存以上变量在内存中的存放形式中的存放形式32数据定义伪指令例_变量在内存中的分布变量在内存中的分布DATA111223344DATA2224411000033DATA322002200006655443333数据定义伪指令的几点说明n伪指令的性质决定所定义变量的类型;伪指令的性质决定所定义变量的类型;n定义定义字符串字符串必须用必须用DB伪指令伪指令n例:例:DATA1 DB ABCD,66HAB CD41H42H43H44H66H342.重复操作符n作用:作用:n为一个数据区的各单元设置相同的初值为一个数据区的各单元设置相同的初值n目的:目的:n常用于声明一个数据区常用于声明一个数据区n格式:格式:变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)n例:例:M1 DW 20 DUP(0)M2 DB 10 DUP(5)20个初值为个初值为0的字单元的字单元10个初值为个初值为5的字节单元的字节单元353.“?”的作用n表示随机值,用于预留存储空间表示随机值,用于预留存储空间nMEM1 DB 34H,A,?,?DW 20 DUP(?)(?)预留预留40个字节单元,每单元初值为随机值个字节单元,每单元初值为随机值随机数随机数占占1个字节单元个字节单元36数据定义伪指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)变量在内存中的分区变量在内存中的分区37数据定义伪指令例M1How aM211H11H00H44H33H r e you?11H00H00H随机数随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX38二、符号定义伪指令n格式:格式:n符号名符号名 EQU EQU 表达式表达式n操作:操作:n用符号名取代后边的表达式,不可重新定义用符号名取代后边的表达式,不可重新定义n例:例:nCONSTANTCONSTANTEQUEQU100100nVAR EQU 30H+99HVAR EQU 30H+99HEQU说明的表达式不占用内存空间说明的表达式不占用内存空间39三、段定义伪指令n说明逻辑段的起始和结束;说明逻辑段的起始和结束;n说明不同程序模块中同类逻辑段之间的联系形态说明不同程序模块中同类逻辑段之间的联系形态40段定义伪指令格式段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS说明逻辑段说明逻辑段的起点的起点说明不同模块中同名段的说明不同模块中同名段的组和连接方式组和连接方式41定位类型nPARA:段的起点从节边界开始段的起点从节边界开始 (16个字节为个字节为1节)节)nBYTE:段的起点从存储器任何地址开始段的起点从存储器任何地址开始nWORD:段的起点从偶地址开始段的起点从偶地址开始nPAGE:段的起点从页边界开始段的起点从页边界开始 (256个字节为个字节为1页)页)42组合类型n与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提 下具有的组合方式:下具有的组合方式:nNONE:不组合不组合nPUBLIC:依次连接(顺序由依次连接(顺序由LINK程序确定)程序确定)nCOMMON:覆盖连接覆盖连接nSTACK:堆栈段的依次连接堆栈段的依次连接nAT 表达式:段定义在表达式值为段基的节边界表达式:段定义在表达式值为段基的节边界nMEMORY:相应段在同名段的最高地址处。相应段在同名段的最高地址处。43类别n不同模块连接时将相同类别的段放在连不同模块连接时将相同类别的段放在连续的内存区域中续的内存区域中44段定义伪指令例DATA SEGMENT MEM1 DB 11H,22H MEM2 DB Hello!MEM3 DW 2 DUP(?)(?)DATA ENDS变变量量在在逻逻辑辑段段中中的的位位置置就就代代表表了了它它的的偏偏移移地址地址表表示示变变量量所所在在逻逻辑辑段段的的段段地地址址表表示示变变量量的的类类型型45四、设定段寄存器伪指令n说明所定义逻辑段的性质说明所定义逻辑段的性质n格式:格式:ASSUME 段寄存器名段寄存器名:段名段名,段寄存器名,段寄存器名:段名,段名,46五、结束伪指令n表示源程序结束表示源程序结束n格式:格式:END 标号标号实际编程中必有,该实际编程中必有,该处标号须与程序第处标号须与程序第1条条指令前的标号一致。指令前的标号一致。47六、过程定义伪指令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 RETnDELAY ENDP48n调用延时子程序:调用延时子程序:nCALL DELAY 49七、宏命令伪指令n 源程序中由汇编程序识别的具有独源程序中由汇编程序识别的具有独 立功能的一段程序代码立功能的一段程序代码n格式:格式:宏命令名宏命令名 MACRO ENDM宏体宏体宏宏八、其它伪指令 段内程序代码或变量的起始偏移地址段内程序代码或变量的起始偏移地址n格式:格式:nORG 表达式表达式n例:例:nDATA SEGMENTn ORG 200n M1 DB 12H,4 DUP(0)n M2 DW 1234HnDATA ENDS计算值为计算值为非负常数非负常数ORGM10034121200 M2200205514.3 功能调用nBIOSn驻留在驻留在ROM中的基本输入中的基本输入/输出系统输出系统n加电自检,装入引导,主要加电自检,装入引导,主要I/O设备处理程序及接口控制设备处理程序及接口控制nBIOS功能调用使程序员不必了解硬件操作的细节而功能调用使程序员不必了解硬件操作的细节而实现相应的操作。实现相应的操作。nDOSn磁盘操作系统磁盘操作系统n相比相比BIOS,对硬件的依赖性小,对硬件的依赖性小nDOSDOS功能与功能与BIOSBIOS功能均通过中断方式调用功能均通过中断方式调用。DOS中断与BIOS中断nDOS中断包括:中断包括:n设备设备管理,管理,目录目录目录目录管理管理管理管理,文件管理文件管理文件管理文件管理,其它其它其它其它n在某些情况下,同样的功能既可选择在某些情况下,同样的功能既可选择DOS中断,也可选择中断,也可选择BIOS中断中断52DOS调用和BIOS调用的基本步骤n将调用参数装入指定的寄存器;将调用参数装入指定的寄存器;n将功能号装入将功能号装入AH;n按中断类型号调用按中断类型号调用DOS或或BIOS中断;中断;n检查返回参数是否正确。检查返回参数是否正确。5354一、一、DOS 功能调用n说明:说明:nDOS中断是包含多个子功能的功能包;中断是包含多个子功能的功能包;n各子功能用功能号区分;各子功能用功能号区分;n用软中断指令调用,中断类型码固定为用软中断指令调用,中断类型码固定为21H。n调用格式:调用格式:nMOV AH,功能号功能号 INT 21H551.单字符输入n调用方法:调用方法:MOV AH,01 INT 21Hn输入的字符在输入的字符在AL中中56单字符输入例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:交互式应交互式应 答程序答程序572.字符串输入n注意问题:注意问题:n调用格式调用格式n字符输入缓冲区的定义字符输入缓冲区的定义58调用格式 功能号功能号OAH 字符串在内存中的存放地址字符串在内存中的存放地址nINT 21Hn AHn DS:DX59定义字符缓冲区n用户自定义缓冲区格式:用户自定义缓冲区格式:0DHN1N2整个缓冲区整个缓冲区最大可键入字符数最大可键入字符数实际键入字符数实际键入字符数存放键入的字符存放键入的字符存放字符个数:存放字符个数:25560输入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?)n LEA DX,DAT1 MOV AH,0AH INT 21H在数据段在数据段中定义中定义61输入缓冲区14H?20个字节个字节定义后的输入缓定义后的输入缓冲区初始状态:冲区初始状态:623.单字符显示输出 功能号功能号O2H 待输出字符待输出字符nINT 21Hn AHn DL63单字符显示输出例nMOVAH,02nMOVDL,41HnINT21H执行结果:执行结果:屏幕显示屏幕显示A644.字符串输出显示 功能号功能号O9H 待输出字符串的偏移地址待输出字符串的偏移地址nINT 21Hn AHn DS:DX65字符串输出显示n注意点:注意点:n被显示的字符串必须以被显示的字符串必须以$结束;结束;n所显示的内容不应出现非可见的所显示的内容不应出现非可见的ASCIIASCII码;码;n若考虑输出格式需要,在定义字符串后,加上若考虑输出格式需要,在定义字符串后,加上回车符和换行符。回车符和换行符。66字符串输出显示例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条语句后能正常返回条语句后能正常返回DOSn常位于程序结尾处。常位于程序结尾处。67二、BIOS功能调用n通过中断指令调用相应的通过中断指令调用相应的BIOS中断服务程序中断服务程序nBIOS中中断断服服务务程程序序实实际际上上是是一一些些对对端端口口的的输输入入输输出出操操作作,是是微微机机系系统统中中软软件件与与硬硬件件之之间间的一个可编程接口。的一个可编程接口。n光驱、硬盘管理;中断设置等光驱、硬盘管理;中断设置等68附录附录D键盘状态检验n可利用类型码为可利用类型码为16H的的BIOS中断判断是否有中断判断是否有任意键按下任意键按下n调用格式:调用格式:nAHnINT 16Hn判断方法:判断方法:n若若ZF=0n若若ZF=169功能号功能号1有键按下有键按下无键按下无键按下例:在屏幕上显示信息,当有任意键按下时退出在屏幕上显示信息,当有任意键按下时退出70DSEG SEGMENT MESS DB Hello,World!,0DH,0AH,$DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:LEA DX,MESSMOV AH,9INT 21H MOV AH,1INT 16HJZ AGAINMOV AH,4CHINT 21H CSEG ENDSEND SATRT键盘状态检验n判断是否有任意键按下的方法可以用判断是否有任意键按下的方法可以用DOS软中软中断,功能号为断,功能号为0BH,出口参数为,出口参数为AL。n格式:格式:nMOV AH,0BHnINT 21Hn若若AL=FFH,则有键按下;,则有键按下;n若若AL=0,则无键按下,则无键按下71DOS和BIOS功能调用小结n均通过均通过中断指令中断指令调用。调用。1个中断类型码对应个中断类型码对应1个个功能程序包;功能程序包;n每个程序包中的子功能通过每个程序包中的子功能通过功能号功能号区分,调用区分,调用时功能号须送时功能号须送AH;n部分功能既可用部分功能既可用DOS中断也可以用中断也可以用BIOS中断;中断;n注意不同子功能的入口注意不同子功能的入口/出口参数要求;出口参数要求;nDOSDOS和和BIOSBIOS中断均可能影响中断均可能影响AXAX。72734.4 汇编语言程序设计设计步骤:设计步骤:n根据实际问题抽象出数学模型根据实际问题抽象出数学模型n确定算法确定算法n画程序流程图画程序流程图 n分配内存工作单元和寄存器分配内存工作单元和寄存器n程序编码程序编码n调试调试74汇编语言程序结构n顺序结构顺序结构n循环结构循环结构n先判定型先判定型n后判定型后判定型n分支结构分支结构n单分支单分支n多分支多分支n子程序结构子程序结构例例4-16对于三个对于三个8位无符号数位无符号数86H,34H和和21H,编写编写 S=86H*34H-21H的程序的程序 DATA SEGMENTNUM DB 86H,34H,21HRESULT DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,NUM LEA DI,RESULT MOV AL,SI MOV BL,SI+1 MUL BL MOV BL,SI+2 MOV BH,0 SUB AX,BX MOV DI,AX MOV AH,4CH INT 21HCODE ENDS END START顺序结构程序设计例题分支结构程序设计例题例例 4-18编写程序,数据以字节变量编写程序,数据以字节变量BUFFER为首地址的为首地址的100个单元清零。个单元清零。参考书上程序参考书上程序DATA SEGMENTBUFFER DB 100 DUP(?)(?)COUNT DB 100DATA ENDSSTACK SEGMENT DW 32 DUP(?)(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV CL,COUNTLEA BX,BUFFERAGAIN:MOV BX,0INC BXCMP BX,COUNTJB AGAINMOV AH,4CHINT 21HCODE ENDSEND START循环结构程序设计例题n例例4-20 把从把从MEM单元开始的单元开始的100个个16位无符号数按从大到小的顺序排列。位无符号数按从大到小的顺序排列。DSEG SEGMENT MEM DW 100 DUP(?)(?)DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX LEA DI,MEM MOV BL,99 NEXT1:MOV SI,DI MOV CL,BLNEXT2:MOV AX,SI ADD SI,2 CMP AX,SI JNC NEXT3 MOV DX,SI MOV SI-2,DX MOV SI,AX NEXT3:DEC CL JNZ NEXT2 DEC BL JNZ NEXT1MOV AH,4CH INT 21H CSEG ENDS END START汇编程序设计中的注意点n汇编语言源程序结构汇编语言源程序结构n逻辑段的定义,段寄存器的初始化逻辑段的定义,段寄存器的初始化n变量声明变量声明n变量定义的存储空间,变量的起始偏移地址变量定义的存储空间,变量的起始偏移地址n指令的正确使用指令的正确使用n指令格式,指令的操作数指令格式,指令的操作数n程序结构程序结构n分支、循环、转移的条件分支、循环、转移的条件

    注意事项

    本文(第4章-汇编语言程序设计课件.ppt)为本站会员(可****阿)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开