




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章 汇编语言程序设计的基本方法和技巧,7.1 概述 7.3 8086汇编语言程序设计的基本语法 7.4 汇编语言程序设计的基本方法和技巧 7.7 IBM-PC-DOS系统的功能调用,可执行目标文件:“.EXE”,目标代码文件:“.OBJ”,没有确定的物理地址,“.ASM”若有错,给出信息,源程序文件:“.ASM” “.asm” 编辑edit,汇编,得到结果,观察结果是否正确,错误,链接,若干.OBJ,调试,MS-DOS下,7.1 概述,7.3 8086汇编语言程序设计的基本语法,指示性语句与指令性语句: 指令性语句是用指令系统中的指令构成的语句。 格式:标号: 操作码助记符 操作数 ;注释 指示性语句是指示汇编程序进行汇编的操作(伪指令和宏指令)。 格式:名字 定义符 参数 ;注释,指示性语句与指令性语句区别 一个程序经汇编,连接和装入内存后,在执行程序之前: 指示性语句的功能已经完成,故又称伪操作。 而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。,一、源程序语句的组成,NEAR:标号只能做段内转移和段内调用的目标地址。 FAR:标号只能做段间转移和段间调用的目标地址,标号:表示指令所在存储单元的首地址.具有段属性,段基址必须在CS段寄存器中,在段内有偏移量。 两种类性:NEAR和FAR JMP LE(0FFFFH:0) JMP 0ffff:0 JMP dword ptr bx JMP Array 1234h,名字:后不带:,除存储器间接寻址外,名字不作为转移指令和调用指令的目的操作数。,在程序中,标号和名字只能出现一次,助记符由指令系统规定。 定义符由汇编程序规定。 都称为关键字或保留字,不能用作标号、名字、变量名。,二、操作数和参数,可以是常量、变量、寄存器、标号和表达式,不止一个,用,分开,1. 常量,在指令性语句中可以做立即数,也可以做偏移量,e.g. MOV AL, 5AH MOV AX, SI+66H,在指示性语句中一般作为参数或数据项,e.g. ABC DW 1357H ;定义字,2. 变量,代表存放在某存储单元的数据,若变量在名字中出现,称为对变量的定义,就是给变量分配存储单元,且对这个存储单元赋一个符号名变量名。同时将这些存储单元预置初值,可以通过DB、DW、DD等对变量定义。,3. 表达式与运算符,(1) 算术运算符, +、-、*、/:参加运算的数和结果均是整数,除法运算的结果只取整数部分 e.g. 80/9的值为8, MOD:除法取余 SHL/SHR:逻辑左/右移,最右/左边以0补,当移位次数16时,结果恒为0, 表达式1表达式2 下标运算符,表示加法,把表达式1和表达式2相加形成一个存储器(内存)地址 e.g. MOV AX, DATA110H MOV AX, DATA1+10H,等价,(2) 逻辑运算符 AND、OR、XOR、NOT,注:有些运算符与指令助记符是相同的,但是概念不同 在语句中所处的字段不同,指令位于操作码段,运算符位于操作数段 指令在程序运行时执行,运算符在运算在汇编时完成 指令操作对象是操作数,运算符处理对象是某一个具体的数,AND AL,24H AND 0FH,(3) 关系运算符 EQ、NE、LT、LE、GT、GE,关系运算符连接两数(这两个数必须同时是数字或同一段内的两个地址)组成一个判定式,若判定式正确(为真),运算结果为0FFFFH,若为假,则运算结果为0000H,e.g. (PORT)=25 MOV AX, 25 EQ PORT 汇编“MOV AX, 0FFFFH” MOV AX, 25 NE PORT 汇编“MOV AX, 0000H”,(4) 分析运算符, SEG 符号名 ;求段基址 e.g. 标号SLAB处于数据段,且段基址为46FFH,则 MOV AX, SEG SLAB ;(AX)=46FFH, OFFSET 符号名 ;求段内偏移量 e.g. 标号SLAB处于数据段,且与数据段基址的距离为10H MOV SI, OFFSET SLAB ;(SI)=0010H, TYPE 符号名 ;求符号名类型值 e.g. DATA1 DB 12H, 34H, 56H DATA2 DW 7890H MOV AX, TYPE DATA1 ;(AX)=1 MOV BX, TYPE DATA2 ;(BX)=2, SIZE 符号名 ;求为符号名分配的字节数 e.g. DATA1 DB 50 DUP (0) DATA2 DD 20 DUP (0) MOV AX, SIZE DATA1 ;(AX)=1*50=50 MOV AX, SIZE DATA2 ;(AX)=4*20=80,必须是用“DUP( )”定义的数据项, LENGTH 符号名 ;求为符号名分配的项数 SIZE、LENGH、TYPE之间的关系: SIZE 符号名=(LENGTH 符号名)*(TYPE 符号名) e.g. 对于“ABC DW 100 DUP (?)” TYPE ABC ;汇编结果为2 LENGTH ABC ;汇编结果为100 SIZE ABC ;汇编结果为200,必须是用“DUP( )”定义的数据项,(5) 属性运算符, 类型 PTR 符号名 ;将符号定义为新类型,BYTE、WORD、DWORD、NEAR、FAR等,SUB WORD PTR ALPHABXDI, 512H;, THIS 类型 ;指定新类型,规定它所定义的符号名和相邻的下一个语句的符号名具有相同的物理地址 e.g. LABC EQU THIS BYTE LABD DW 1357H, 2468H MOV AL, LABC ;(AL)=57H MOV AX, LABD+1 ;(AX)=6813H, SHORT 标号 ;指出JMP指令的转向地址是在下一条指令的127个字节范围内,(5) 分离运算符, LOW 表达式 ;取低字节 HIGH 表达式 ;取高字节 e.g. SSY=1234H, 则 MOV AL, LOW 5678H ; (AL)=78H MOV AH, HIGH SSY ; (AH)=12H,7.4 汇编语言程序设计的基本方法和技巧,一、概述 (一) 判断程序质量的标准 程序的正确性 程序的可读性 程序的执行时间 程序所占内存大小,(二)汇编语言的程序设计步骤如下: 1建立数学模型; 2选择算法; 3绘制流程图; 4分配存储空间和工作单元; 5根据流程图编制程序; 6上机调试程序。,7.4 汇编语言程序设计的基本方法和技巧,顺序结构 分支结构 循环结构 子程序结构,(三)几种程序结构,7.4 汇编语言程序设计的基本方法和技巧,1. 顺序程序设计,例 从标号为ADD-BUF的存储单元开始连续存放着两个单字节数,将两数相加,结果送到SUMBUF存储单元中(不考虑进位)。,2. 分支程序设计,选择分支,简单分支,多分支,例 比较两个一字节无符号数X1和X2的大小,把大数存入MAX单元。,分析:比较两个无符号数,可将两数相减,然后根据CF标志位来判断大小。,3. 循环程序设计,WHILE-DO型循环图,REPEAT-UNTIL型循环图,(1)初始化部分 这是循环的准备部分,为程序操作、地址指针、循环计数、结束条件等设置初始值。 (2)循环体,包括以下3个部分: 循环工作部分-这是循环程序的主体,完成程序的基本操作,循环多少次,这部分语句就执行多少次。 循环修改部分-修改循环工作部分的变量地址等,这保证每次重复时,参加执行的数据能发生有规律的变化。 循环控制部分-保证循环条件满足时进入循环;循环结束条件不满足时,退出循环,执行循环体外的后续语句。 (3)循环结束部分 完成循环结束后的处理,如数据分析、结果的存放等。,例 从XX单元开始的10个连续单元中存放有10个无符号数,从中找出最大者送入YY单元。,分析:根据题意,把第一个数先送入AL,将AL中的数与后面的9个数逐个比较,如果AL中的数较小,则两数交换位置,如果AL中的数大于或等于相比较的数,则两数位置不变,在比较过程中,AL中始终保持较大的数,比较9次,则最大者必在AL中,最后把AL中的数送入YY单元。,循环工作部分,循环修改部分,循环控制部分,循环修改部分,初始化部分,循环结束部分,7.7 DOS功能调用,PCDOS是IBM PC微型计算机的磁盘操作系统。它为用户提供了许多命令,也有80多个子程序可供用户调用。 这些子程序的功能主要是实现对存储器和基本I/O设备的管理等。为了便于调用将所有子程序顺序编号。 如PC DOS2.0有87个子程序,编号从0开始到57H。,用户编程原则: 尽可能使用DOS的系统功能调用,提高程序可移 植性。 在DOS功能不能实现情况下,考虑用BIOS功能调 用。 在DOS和BIOS的中断子程不能解决问题时,使用 IN/OUT指令直接控制硬件。,1. 调用方法,使用DOS功能调用还要注意下列问题: (1)从键盘输入的字符由系统自动转换为ASCII 码,在进行数据处理时要特别注意; (2)需要在屏幕上显示的字符要在程序中将其转 换为ASCII码。 例:实验中的3+4=7,2、DOS功能调用要注意的问题,1. 显示单字符 ( 02H功能 ) 入口参数 DL = 要显示字符的ASCII 码 功能号 AH=02H 类型号 INT 21H 出口参数 无 实现功能 显示指定字符,光标随动。 例 显示字符A MOV DL, A MOV AH, 02H INT 21H,二、DOS系统功能调用 (21H类型中断调用),在DOS中断服务程序中,功能最多的是矢量号为21H的矢量中断,入口参数 定义要显示的字符串,字符串尾 应为$,作为结束显示的标志。 DS : DX = 字符串的首地址 功能号 AH = 09 H 类型号 21H 出口参数 无 实现功能 显示字符串,遇 $ 停止显示,光 标随动。,2. 显示字符串 ( 09H功能 ),3.键盘输入一个字符 ( 01H功能 ) 将其ASCII字符代码送AL寄存器,同时送显示器显示。 如:MOV AH,01H INT 21H,例:MOV AH,4CH INT 21H,4.终止程序,返回DOS(4CH号),二、汇编语言程序设计举例,例1:试设计一个对两个32位二进制数相加的程序。设被加数2A3B078EH和加数4C508F55H从数据段的BGS单元(令BGS=2000H)开始依次存放,要求将两数和放在加数之后。 分析:这是一个简单的加法问题,因为数据不长,可采用顺序程序设计方法。 因为是两个32位数相加,应先加低16位,再加高16位,加高16位时还要考虑低16位相加产生的进位,应选用带进位加法指令。还要注意,多字节数在内存是放在连续的存储单元中,且高字节放高地址单元,低字节放低地址单元。,内存单元分配如下:,BGS=2000H,8EH,07H,3BH,2AH,55H,8FH,50H,4CH,被加数,加数,和,2004H,2008H,DATA SEGMENT ORG 2000H BGS DD 2A3B078EH,4C5D8F55H DD ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000H START:MOV AX,DATA MOV DS,AX,MOV AX,BGS ADD AX,BGS+4 MOV BGS+8,AX MOV AX,BGS+2 ADC AX,BGS+6 MOV BGS+0AH,AX MOV 0AH,4CH INT 21H CODE ENDS END START,低16位,高16位,返回DOS,同一问题,若数据很长,或采用字节加法,则重复很多次,可考虑采用循环程序设计方法:,DATA SEGMENT ORG 2000H BGS DB 8EH, 07H, 3BH, 2AH DB 55H, 8FH,5DH, 4CH DB 4 DUP( ?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000H START:MOV AX,DATA MOV DS,AX,MOV CX,4 CLC MOV SI,OFFSET BGS LOOP1:MOV AL,SI ADC AL,SI+4 MOV SI+8,AL INC SI LOOP LOOP1 MOV AH,4CH INT 21H CODE ENDS END START,一次加法,例1:已知从DS段1000H单元开始连续存放着大小不同的两个16位二进制无符号数X1和X2。试设计一个程序,将其中的大数放到0050H单元,小数放到0052H单元。 解:显然,这是一个双分支程序。 根据比较结果(CF标志)用条件转移指令实现分支。,X1L,X1H,X2L,X2H,DS:1000H,DS:0050H,大数,小数,0052H,DATA SEGMENT ORG 1000H x1 DW ? x2 DW ? ORG 0050H MAX DW 2DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX, 1000H,MOV BX, 1002H CMP AX, BX;比较两数大小 JNC LOP1 ; AX BX转LOP1 MOV MAX , BX MOV MAX+2, AX LOPT: MOV AH,4CH INT 21H LOP1: MOV MAX, AX MOV MAX+2, BX JMP LOPT CODE ENDS END START,程序分析 data segment dat db -22,35,-57,0,19,99,123,-98,-128,67 res db (?) data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax lea si,dat ; 【61】,mov cx,9 mov al,si lop: inc si ; 【62】 cmp al,si ; 【63】 jle next ; 【64】 mov al,si next: loop lop ; 【65】 mov res,al mov ah,4ch int 21h code ends end start,(1)该程序的作用是_,程序最终执行结果存放在变量_中,其在数据段中的偏移量地址为_,其数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云存储技术教案培训课件
- 创意绘画培训课件图片
- 木工推锯床安全培训内容课件
- 《程控数字交换技术》课件第7章
- 安全培训特色开场讲话课件
- DB1507-T 80-2023 羊屠宰场防疫管理规范
- XX行业2025年目标用户可持续发展需求分析报告
- 安全培训照片工地课件
- 押题宝典高校教师资格证之《高等教育法规》模考模拟试题带答案详解(研优卷)
- 朗读科普知识配乐课件
- 编织课件教学课件
- 认证机构保密管理办法
- 广东省安装工程综合定额(2018)Excel版
- 棋牌室员工管理制度
- 新课标(水平三)体育与健康《篮球》大单元教学计划及配套教案(18课时)
- 建筑工人临时用工协议书
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- CPS21F变频恒压供水调节器使用说明书1
- 600MW发电机组海水脱硫工艺特点及调试
- 车辆挂靠协议(挂靠)
- 视频会议系统中调音台的使用
评论
0/150
提交评论