微机原理及应用-ch.ppt

上传人:牧羊曲112 文档编号:6284469 上传时间:2023-10-13 格式:PPT 页数:54 大小:450KB
返回 下载 相关 举报
微机原理及应用-ch.ppt_第1页
第1页 / 共54页
微机原理及应用-ch.ppt_第2页
第2页 / 共54页
微机原理及应用-ch.ppt_第3页
第3页 / 共54页
微机原理及应用-ch.ppt_第4页
第4页 / 共54页
微机原理及应用-ch.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《微机原理及应用-ch.ppt》由会员分享,可在线阅读,更多相关《微机原理及应用-ch.ppt(54页珍藏版)》请在三一办公上搜索。

1、第七章 汇编语言程序设计的基本方法和技巧,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汇编语言程序设计的基本语法,指示性语句与指令性语句:指令性语句是用指令系统中的指令构成的语句。格式:标号:操作码助记符 操作数;注释指示性语句是指示汇

2、编程序进行汇编的操作(伪指令和宏指令)。格式:名字 定义符 参数;注释,指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:指示性语句的功能已经完成,故又称伪操作。而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。,一、源程序语句的组成,NEAR:标号只能做段内转移和段内调用的目标地址。FAR:标号只能做段间转移和段间调用的目标地址,标号:表示指令所在存储单元的首地址.具有段属性,段基址必须在CS段寄存器中,在段内有偏移量。两种类性:NEAR和FARJMP LE(0FFFFH:0)JMP 0ffff:0JMP dword ptr bx JMP Array 123

3、4h,名字:后不带:,除存储器间接寻址外,名字不作为转移指令和调用指令的目的操作数。,在程序中,标号和名字只能出现一次,助记符由指令系统规定。定义符由汇编程序规定。都称为关键字或保留字,不能用作标号、名字、变量名。,二、操作数和参数,可以是常量、变量、寄存器、标号和表达式,不止一个,用,分开,1.常量,在指令性语句中可以做立即数,也可以做偏移量,e.g.MOV AL,5AH MOV AX,SI+66H,在指示性语句中一般作为参数或数据项,e.g.ABC DW 1357H;定义字,2.变量,代表存放在某存储单元的数据,若变量在名字中出现,称为对变量的定义,就是给变量分配存储单元,且对这个存储单元

4、赋一个符号名变量名。同时将这些存储单元预置初值,可以通过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,注:有些运算符与指令助记符是相同的,但是概念不同 在语句中所处

5、的字段不同,指令位于操作码段,运算符位于操作数段 指令在程序运行时执行,运算符在运算在汇编时完成 指令操作对象是操作数,运算符处理对象是某一个具体的数,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 符号

6、名;求段基址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

7、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、DWO

8、RD、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,

9、HIGH SSY;(AH)=12H,7.4 汇编语言程序设计的基本方法和技巧,一、概述(一)判断程序质量的标准 程序的正确性 程序的可读性 程序的执行时间 程序所占内存大小,(二)汇编语言的程序设计步骤如下:1建立数学模型;2选择算法;3绘制流程图;4分配存储空间和工作单元;5根据流程图编制程序;6上机调试程序。,7.4 汇编语言程序设计的基本方法和技巧,顺序结构分支结构循环结构 子程序结构,(三)几种程序结构,7.4 汇编语言程序设计的基本方法和技巧,1.顺序程序设计,例 从标号为ADD-BUF的存储单元开始连续存放着两个单字节数,将两数相加,结果送到SUMBUF存储单元中(不考虑进位)。,

10、2.分支程序设计,选择分支,简单分支,多分支,例 比较两个一字节无符号数X1和X2的大小,把大数存入MAX单元。,分析:比较两个无符号数,可将两数相减,然后根据CF标志位来判断大小。,3.循环程序设计,WHILE-DO型循环图,REPEAT-UNTIL型循环图,(1)初始化部分这是循环的准备部分,为程序操作、地址指针、循环计数、结束条件等设置初始值。(2)循环体,包括以下3个部分:循环工作部分-这是循环程序的主体,完成程序的基本操作,循环多少次,这部分语句就执行多少次。循环修改部分-修改循环工作部分的变量地址等,这保证每次重复时,参加执行的数据能发生有规律的变化。循环控制部分-保证循环条件满足

11、时进入循环;循环结束条件不满足时,退出循环,执行循环体外的后续语句。(3)循环结束部分 完成循环结束后的处理,如数据分析、结果的存放等。,例 从XX单元开始的10个连续单元中存放有10个无符号数,从中找出最大者送入YY单元。,分析:根据题意,把第一个数先送入AL,将AL中的数与后面的9个数逐个比较,如果AL中的数较小,则两数交换位置,如果AL中的数大于或等于相比较的数,则两数位置不变,在比较过程中,AL中始终保持较大的数,比较9次,则最大者必在AL中,最后把AL中的数送入YY单元。,循环工作部分,循环修改部分,循环控制部分,循环修改部分,初始化部分,循环结束部分,7.7 DOS功能调用,PCD

12、OS是IBM PC微型计算机的磁盘操作系统。它为用户提供了许多命令,也有80多个子程序可供用户调用。这些子程序的功能主要是实现对存储器和基本I/O设备的管理等。为了便于调用将所有子程序顺序编号。如PC DOS2.0有87个子程序,编号从0开始到57H。,用户编程原则:尽可能使用DOS的系统功能调用,提高程序可移 植性。在DOS功能不能实现情况下,考虑用BIOS功能调 用。在DOS和BIOS的中断子程不能解决问题时,使用 IN/OUT指令直接控制硬件。,1.调用方法,使用DOS功能调用还要注意下列问题:(1)从键盘输入的字符由系统自动转换为ASCII码,在进行数据处理时要特别注意;(2)需要在屏

13、幕上显示的字符要在程序中将其转换为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出口参数 无实现功能 显示

14、字符串,遇$停止显示,光 标随动。,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位,再加高1

15、6位,加高16位时还要考虑低16位相加产生的进位,应选用带进位加法指令。还要注意,多字节数在内存是放在连续的存储单元中,且高字节放高地址单元,低字节放低地址单元。,内存单元分配如下:,BGS=2000H,8EH,07H,3BH,2AH,55H,8FH,50H,4CH,被加数,加数,和,2004H,2008H,DATA SEGMENT ORG 2000HBGS DD 2A3B078EH,4C5D8F55H DD?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX,MOV AX,BGS

16、ADD AX,BGS+4 MOV BGS+8,AX MOV AX,BGS+2 ADC AX,BGS+6 MOV BGS+0AH,AX MOV 0AH,4CH INT 21HCODE ENDS END START,低16位,高16位,返回DOS,同一问题,若数据很长,或采用字节加法,则重复很多次,可考虑采用循环程序设计方法:,DATA SEGMENT ORG 2000HBGS DB 8EH,07H,3BH,2AH DB 55H,8FH,5DH,4CH DB 4 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MO

17、V 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 21HCODE ENDS END START,一次加法,例1:已知从DS段1000H单元开始连续存放着大小不同的两个16位二进制无符号数X1和X2。试设计一个程序,将其中的大数放到0050H单元,小数放到0052H单元。解:显然,这是一个双分支程序。根据比较结果(CF标志)用条件转移指令实现分支。,X1L,X1H,X2L,X2H,DS:1000H,D

18、S:0050H,大数,小数,0052H,DATASEGMENT ORG1000H x1 DW?x2 DW?ORG 0050HMAX DW 2DUP(?)DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV AX,1000H,MOVBX,1002H CMPAX,BX;比较两数大小 JNCLOP1;AXBX转LOP1 MOVMAX,BX MOVMAX+2,AXLOPT:MOV AH,4CH INT 21HLOP1:MOVMAX,AX MOVMAX+2,BX JMPLOPTCODE ENDS END START

19、,程序分析data segmentdat db-22,35,-57,0,19,99,123,-98,-128,67res db(?)data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax lea si,dat;【61】,mov cx,9 mov al,silop:inc si;【62】cmp al,si;【63】jle next;【64】mov al,sinext:loop lop;【65】mov res,al mov ah,4ch int 21hcode endsend start,(1)该程序的作用是_,

20、程序最终执行结果存放在变量_中,其在数据段中的偏移量地址为_,其数值为_D=_;(2)请在横线上逐句解释指令至指令;(3)请画出程序流程图。,求10个带符号数的最小值,res,0AH,-128,80,【61】dat偏移量送si地址指针【62】si增量加1【63】比较al与si的值【64】小于等于转至next【65】cx-10,循环转至lop,例:将数据段datasg中每个单词改为大写字母,data segmentdb ibm3333333333333 db dec3333333333333 db dos3333333333333 db rax3333333333333 data ends,co

21、de segmentAssume cs:code,ds:datastart:mov ax,data mov ds,ax mov bx,0 mov cx,4;设置外循环次数s0:mov dx,cx;保护外循环计数值 mov si,0 mov cx,3;设置内循环次数,s:mov al,bx+si;内存单元数 al and al,11011111b;小写大写 mov bx+si,al;大写后回送该单元 inc si;指向下一单元 loop s;每组3个字母改完没?add bx,16;改完,指向下一组 mov cx,dx;恢复外循环计数值 loop s0;4组改完吗?否转s0mov ah,4ch;全部改写完,结束 int 21hcode endsend start,作业,7-7(试编写一个求两个数(字属性)平均数的程序),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号