微机原理与接口技术第3章(汇编部分).ppt

上传人:牧羊曲112 文档编号:6572784 上传时间:2023-11-13 格式:PPT 页数:52 大小:536KB
返回 下载 相关 举报
微机原理与接口技术第3章(汇编部分).ppt_第1页
第1页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第2页
第2页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第3页
第3页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第4页
第4页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《微机原理与接口技术第3章(汇编部分).ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第3章(汇编部分).ppt(52页珍藏版)》请在三一办公上搜索。

1、主要内容:,汇编语言源程序的结构汇编语言语句格式伪指令功能调用,3.4 汇编语言的编程格式,一 汇编语言的基本概念,汇编语言和机器语言属于低级语言是面向微处理器的语言,一般不具有通用性和可移植性,二 汇编语言程序结构,1汇编语言源程序的结构,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X ADD AL,Y MOV Z,AL MOV AH,4CH INT 21H CODE ENDS END START,DATA SEGMENT X DB 30H Y DB 40H Z DB?DATA ENDS,数据段

2、,代码段,计算 Z=XY,数据段,附加段,程序段,堆栈段,要点总结:,汇编语言源程序由段结构组成。,一个段由“SEGMENT”(段定义开始)和“ENDS”(段定义结束)语句来定义。,每个段都有唯一的段名,前后一致。,段名不能相同。,数据段、堆栈段和代码段的作用各不相同。,各个段都由一系列语句组成。,语句包括指令语句和伪指令语句。,二 汇编语言程序结构,2汇编语言的语句格式,指令语句的标号后有冒号“:”,而伪指令语句的名字后则没有冒号。,指令格式 START:MOV AL,DATA;注释 标号 助记符 操作数,TABLE DB 11H,22H,33H,44H 名字 伪指令 操作数表;注释,伪指令

3、格式,二 汇编语言程序结构,3.操作数,(1)常数:二进制、八进制、十进制、十六进制或ASCII码字符串(例:A,ABCD),(2)寄存器名,二 汇编语言程序结构,(3)存储器操作数:用、变量、标号表示,变量的属性:段 值:DS 偏移量:与DS的位移量。类 型:BYTE(字节)WORD(字)DWORD(双字),01H02H03H,DATA,04H00H05H00H,变量:内存数据区的符号地址,DS:0000H,START:MOV AL,DATA;标号 变量,标号的属性:段 值:CS 偏移量:与CS的位移量。类 型:NEAR近属性)FAR(远属性),START:MOV AL,DATA;标号,标号

4、:内存程序区的指令地址,START,指令,CS:0000H,4、运算符和表达式,算术运算:+,-,*,/,MOD逻辑运算:AND,OR,NOT,XOR关系运算:EQ、NE、LT、GT、LE、GE,仅对两个数值而言关系不成立,结果为0;关系成立,结果为FFFFH。,*取值运算和属性运算,二 汇编语言程序结构,取值运算符,OFFSET 取偏移地址SEG 取段地址 MOV BX,OFFSET TABLE,TYPE 取变量的类型LENGTH 取存储区的长度SIZE 取总字节数,BUFFER DW 10 DUP(0)DATA1 DB 5TYPE BUFFER=2LENGTH BUFFER=10SIZE

5、BUFFER=20,SIZE=LENGTH*TYPE,BX,二 汇编语言程序结构,属性运算符 PTR,指定存储器操作数的临时属性例:MOV BYTE PTRBX,01H,BX,01H,MOV WORD PTRBX8,2,二 汇编语言程序结构,语句分类:,指令性语句指示性语句(伪指令),用于数据定义、符号定义、段定义、过程定义、分配内存、汇编结束等,三 伪指令,名字-变量名(符号地址)、段名、过程名、符号名,名字后面没有冒号,例 TABLE DB 11H,22H,33H,44H 名字 伪指令 操作数表;注释,三 伪指令,DATA SEGMENT段名 M1 DB 1,2 M2 DW 3 DUP(5

6、)M3 DB ABCDDATA ENDS,DATA:0000H,0002H,1、数据定义 定义变量类型及数据区,DB(字节)DW(2字节)DD(4字节)DQ(8字节)DT(10字节),三 伪指令,2、符号定义1、符号名 EQU 表达式2、符号名=表达式,EQU语句不能给符号名重新赋值不占用内存,例:DATA SEGMENT M1 DB 1,2 DAT EQU 100 M2 DW 3 DUP(5)DATA ENDS,01H02H,M1,05H00H05H00H05H00H,M2,三 伪指令,例:STACK DB 1,2,3,4,3 TOP EQU$-STACK,3、段定义,段名 SEGMENT

7、定位类型 组合类型 类别段名 ENDS,程序间连接时,段名:该段的起始地址 定位:段的起始点,分为PARA节(缺省16字节)BYTE、WORD、PAGE页(256个字节)组合类型:不同模块中同名段的组合连接方式 分类名:类别相同的段组成一个段组,三 伪指令,BYTEXXXX XXXX XXXX XXXX XXXX B WORDXXXX XXXX XXXX XXXX XXX 0 B PARAXXXX XXXX XXXX XXXX 0 0 0 0 B PAGEXXXX XXXX XXXX 0 0 0 0 0 0 0 0 B X表示可取0或1,定位类型 段 的 起 始 地 址,ASSUME CS:段

8、名,DS:段名,,用于告知汇编程序,CS、DS、ES和SS对应的段,ASSUME必须位于代码段开始,除CS外,其余段基址的初值要用指令装入,4、设定段寄存器伪指令,例:CODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX CODE ENDS,三 伪指令,5、过程定义,过程名 PROC NEAR/FAR RET n 过程名 ENDP,过程名子程序入口的符号地址,三 伪指令,1、ORG 指定起始偏移地址 ORG 表达式,6、其它伪指令,DATA SEGMENT M1 DB 1,2 ORG 1000H M2 DB 3,4 DATA END

9、S,2、END 标号名;汇编结束 标号名为程序的启动地址,01H02H,M1,03H04H,M2,三 伪指令,DOS系统内的各子功能,4-3,汇编语言中如何从键盘输入数据?用INT 21H指令,调用DOS系统功能,功能号置入AH寄存器中,四 DOS系统功能调用,使用DOS系统功能调用的一般过程:,(1)显示单个字符(2号调用),格式:MOV AH,2 MOV DL,字符ASCII码 INT 21H,功能:将DL中的字符送显示器显示。,(2)键盘输入(1号调用),格式:MOV AH,1 INT 21H,功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中,同时在显示器上显示该字

10、符。,四 DOS系统功能调用,(3)显示字符串(9号调用),格式:MOV AX,DATA MOV DS,AX LEA DX,字符串首偏移地址 MOV AH,9 INT 21H,功能:将当前数据区中以$结尾的字符串送显示器显示。,STR DB PRESS ANY KEY,0DH,0AH,$,四 DOS系统功能调用,(4)键盘输入字符串(10号调用),格式:MOV AX,DATA MOV DS,AX LEA DX,缓冲区首偏移地址 MOV AH,10 INT 21H,功能:从键盘上往指定缓冲区中输入字符串并送显示器显示。,如:BUF DB 81;定义缓冲区的大小 DB?;实际输入的字符个数 DB

11、80 DUP(0);键盘输入的字符串,注:缓冲区应按规定的格式定义。,四 DOS系统功能调用,例:,四 DOS系统功能调用,(5)程序结束后返回DOS操作系统(4CH号调用),设计步骤:,根据实际问题抽象出数学模型确定算法画程序流程图 分配内存工作单元和寄存器程序编码调试,五 汇编语言程序设计基础,例:教材160 例3.38编程,Z=(X+Y)*8-X)/2,其中X、Y为字数据,分别存放在VARX,VARY单元中,结果Z存放在RESULT单元中。,1、顺序程序设计,五 汇编语言程序设计基础,分析:1、定义数据段2、代码段BX 表首地址;AH 0,AL X;BX BX+AX;形成平方值地址ALB

12、X;得到平方值 RESULT AL;存结果3,返回操作系统,MOV AH,4CH INT 21H;,例:教材161 例3.39内存TABLE开始存放着015的平方表,查表求任意数X(0X15)的平方值,并将结果存入RESULT单元中。,五 汇编语言程序设计基础,在数据段中DATA1开始的连续80个单元中存放80位同学某门课的考试成绩(0100)请编程序统计大于等于90,8089分,7079分,6069分,小于60分的人数,分别放在同一数据段的DATA2开始的5个单元中。,例:教材161 例3.40,例:教材162 例3.41,五 汇编语言程序设计基础,2、分支程序设计,五 汇编语言程序设计基础

13、,3、循环程序设计,在内存某区域有一批16位的数,找出其最大值(或最小值)并放到指定单元。,例:教材164 例3.42,内存ADDR开始放有N个字数据按从大到小的顺序排列。,例:教材165 例3.43,3、循环程序设计,直到型,当型循环,五 汇编语言程序设计基础,例:教材165 例3.43 将ADDR单元开始的N个16位数从大到小排序(冒泡法),第一遍,第二遍,第三遍,第四遍,从表头开始,相邻两数比较,次序不对交换位置,五 汇编语言程序设计基础,第一遍,相邻两数比较N-1次后,最小数移至表尾;第二遍,比较N-2次后,次最小数移至表尾相应位置;依次类推共进行N-1遍,排序结束,采用减法计数 外循

14、环 I=N-1 1 遍,内循环 J=I 1,7,9,4,6,8,ADDR+0,ADDR+2,ADDR+4,ADDR+6,ADDR+8,字数组,五 汇编语言程序设计基础,五 汇编语言程序设计基础,4、子程序设计,过程名 PROC NEAR(或FAR)PUSH AX PUSH BX PUSH CX,具体处理程序,POP CX POP BX POP AX RET过程名 ENDP,当用户编写的主程序看作DOS的子程序,该主程序属性定义为FAR属性,五 汇编语言程序设计基础,主程序与子程序,五 汇编语言程序设计基础,子程序应编写子程序说明文件:例:,子程序名称:子程序功能:子程序中使用的寄存器:入口参数

15、;出口参数:子程序中调用其它子程序的名称,五 汇编语言程序设计基础,主程序与子程序之间的参数传递方式:,通过寄存器传递、通过存储区传递、通过堆栈区传递,请分析 例题 P167 3.44 3.45 3.46,五 汇编语言程序设计基础,子程序名称:SUM功能:求数组元素的和子程序中使用的寄存器:SI,CX,AX入口参数;SI 数组首地址 CX元素个数出口参数:结果存入数组后的地址字单元中,例6、编程求每个数组的元素之和,五 汇编语言程序设计基础,DATA SEGMENT ARY1 DW 100 DUP(2)SUM1 DW?ARY2 DW 100 DUP(3)SUM2 DW?DATA ENDS,1、

16、定义数据段,例6、编程求每个数组的元素之和,五 汇编语言程序设计基础,STACK SEGMENT SA DW 50 DUP(?)TOP EQU SIZE SASTACK ENDS,2、定义堆栈段,TOP=100,五 汇编语言程序设计基础,CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FARSTART:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP;设栈底 LEA SI,ARY1;入口参数 MOV CX,LENGTH ARY1 CALL SUM LEA SI,ARY2;入

17、口参数 MOV CX,LENGTH ARY2 CALL SUM MOV AH,4CH INT 21H RETMAIN ENDP,子程序:SUM PROC NEARXOR AX,AXL1:ADD AX,SI INC SI INC SI LOOP L1 MOV SI,AX RETSUM ENDPCODE ENDS END START,3、编写代码段,五 汇编语言程序设计基础,作业,汇编程序:将汇编语言源程序翻译成目标程序的程序,1、EDIT AAA.ASM 2、MASM AAA.ASM 3、LINK AAA.OBJ 4、DEBUG AAA.EXE,工具软件:,4-5 汇编语言上机调试过程,4-5

18、汇编语言上机调试过程,1、编辑源程序 CEDIT A1.ASM2、汇编源程序 CMASM A1;汇编后形成OBJ文件3、链接 CLINK A1;链接后形成EXE文件4、调试 CDEBUG A1.EXE 检查逻辑错误5、运行 CA1.EXE,五、综合举例,例7、代码转换,16位二进制数转换为4位BCD码分析:4位BCD码数值范围09999,十六进制数 除以1000 得到的商为千位剩余余数除以100得到的商为百位剩余余数除以10得到的商为十位剩余余数为个位,:16位除法,DX、AX/CX,商AX,余数DX,8位除法指令:DIV CL;AX/CL,商AL,余数AH,1234H=1*163+2*162

19、+3*161+4=4660 4660BCD码4660BCD码=0100 0110 0110 0000,AX 16位二进制数DX 0;结果清0,DX、AX 除以 CXAX 商(千位)DX 余数,DX左移4位,DXAX AX 余数 DX 商,AX 除以 CLAL 商(百位)AH 余数,AL AH余数AH 0,DL DL+ALDX左移4位,CL 100,AX 除以 CLAL 商(十位)AH 余数,DL DL+AH(个位),DL DL+ALDX左移4位,CL 10,结果:AX DX,CX 1000,千位,百位,个位,十位,请同学编程,例 8、十进制ASCII码转换为有符号数二进制数分析:,-32 33

20、 34 35H(十进制数ASCII码)-2345(十进制数),2345=2*1000+3*100+4*10+5=(0*10+2)*10+3)*10+4)*10+5,累加和初值清零,然后乘以10,加下一字符,继续,转换后负数用补码表示,有符号二进制数的数值范围-32768+32767,共 6位字符,展开式中每一项均用二进制数计算,DX DX*10AL SI;SI SI+1;应保证AL在30H39H之间AXAX000FH,DX DX+AX,SI 数据符号位的偏移地址CX 总数据位数(含符号位,应保证CX=6字节)CX CX-1 需转换字符位数SI SI-1需转换数据的偏移地址DX 累加和清0,CX-1 0,判断原数据为负数,则对结果求补处理,请同学编程,请单击游览素材库,汇编语法程序调试程序设计基本方法常用算法及程序,作业:阅读本章例题,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号