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

上传人:max****ui 文档编号:2915713 上传时间:2019-12-04 格式:PPT 页数:52 大小:589.50KB
返回 下载 相关 举报
微机原理与接口技术第3章(汇编部分).ppt_第1页
第1页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第2页
第2页 / 共52页
微机原理与接口技术第3章(汇编部分).ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
主要内容:,汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用,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,数据段,代码段,计算 Z=XY,数据段,附加段,程序段,堆栈段,要点总结:,汇编语言源程序由段结构组成。,一个段由 “SEGMENT”(段定义开始)和“ENDS” (段定义结束)语句来定义。,每个段都有唯一的段名,前后一致。,段名不能相同。,数据段、堆栈段和代码段的作用各不相同。,各个段都由一系列语句组成。,语句包括指令语句和伪指令语句。,二 汇编语言程序结构,2汇编语言的语句格式,指令语句的标号后有冒号“:”,而伪指令语句的名字后则没有冒号。,指令格式 START:MOV AL,DATA;注释 标号 助记符 操作数,TABLE DB 11H,22H,33H,44H 名字 伪指令 操作数表 ;注释,伪指令格式,二 汇编语言程序结构,3. 操作数,(1) 常数:二进制、八进制、十进制、十六进制或ASCII码字符串(例:A,ABCD ),(2) 寄存器名,二 汇编语言程序结构,(3) 存储器操作数: 用 、变量、标号表示,变量的属性: 段 值:DS 偏移量:与DS的位移量。 类 型: BYTE(字节) WORD(字) DWORD(双字),01H 02H 03H,DATA,04H 00H 05H 00H,变量:内存数据区的符号地址,DS:0000H,START:MOV AL,DATA; 标号 变量,标号的属性: 段 值:CS 偏移量:与CS的位移量。 类 型: NEAR近属性) FAR(远属性),START:MOV AL,DATA; 标号,标号:内存程序区的指令地址,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 5 TYPE BUFFER = 2 LENGTH BUFFER =10 SIZE 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) M3 DB ABCD DATA 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,01H 02H,M1,05H 00H 05H 00H 05H 00H,M2,三 伪指令,例: STACK DB 1,2,3,4,3 TOP EQU $-STACK,3、段定义,段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS,程序间连接时,段名:该段的起始地址 定位:段的起始点,分为PARA节(缺省16字节) BYTE、WORD、PAGE页(256个字节) 组合类型:不同模块中同名段的组合连接方式 分类名:类别相同的段组成一个段组,三 伪指令,BYTE XXXX XXXX XXXX XXXX XXXX B WORD XXXX XXXX XXXX XXXX XXX 0 B PARA XXXX XXXX XXXX XXXX 0 0 0 0 B PAGE XXXX XXXX XXXX 0 0 0 0 0 0 0 0 B X表示可取0或1,定位类型 段 的 起 始 地 址,ASSUME CS:段名 , 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 ENDS,2、END 标号名;汇编结束 标号名为程序的启动地址,01H 02H,M1,03H 04H,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中,同时在显示器上显示该字符。,四 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 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 ;形成平方值地址 ALBX;得到平方值 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、分支程序设计,五 汇编语言程序设计基础,3、循环程序设计,在内存某区域有一批16位的数,找出其最大值(或最小值)并放到指定单元。,例:教材164 例3.42,内存ADDR开始放有N个字数据按从大到小的顺序排列。,例:教材165 例3.43,3、循环程序设计,直到型,当型循环,五 汇编语言程序设计基础,例:教材165 例3.43 将ADDR单元开始的N个16位数从大到小排序(冒泡法),第一遍,第二遍,第三遍,第四遍,从表头开始,相邻两数比较,次序不对交换位置,五 汇编语言程序设计基础,第一遍,相邻两数比较N-1次后,最小数移至表尾; 第二遍,比较N-2次后, 次最小数移至表尾相应位置;依次类推 共进行N-1遍,排序结束,采用减法计数 外循环 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属性,五 汇编语言程序设计基础,主程序与子程序,五 汇编语言程序设计基础,子程序应编写子程序说明文件: 例:,子程序名称: 子程序功能: 子程序中使用的寄存器: 入口参数; 出口参数: 子程序中调用其它子程序的名称,五 汇编语言程序设计基础,主程序与子程序之间的参数传递方式:,通过寄存器传递、 通过存储区传递、 通过堆栈区传递,请分析 例题 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、定义数据段,例6、编程求每个数组的元素之和,五 汇编语言程序设计基础,STACK SEGMENT SA DW 50 DUP(?) TOP EQU SIZE SA STACK ENDS,2、定义堆栈段,TOP=100,五 汇编语言程序设计基础,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR START: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 ;入口参数 MOV CX,LENGTH ARY2 CALL SUM MOV AH,4CH INT 21H RET MAIN ENDP,子程序: SUM PROC NEAR XOR AX,AX L1:ADD AX, SI INC SI INC SI LOOP L1 MOV SI,AX RET SUM ENDP CODE ENDS END START,3、编写代码段,五 汇编语言程序设计基础,作业,汇编程序:将汇编语言源程序翻译成目标程序的程序,1、EDIT AAA.ASM 2、MASM AAA.ASM 3、LINK AAA. OBJ 4、DEBUG AAA.EXE,工具软件:,4-5 汇编语言上机调试过程,4-5 汇编语言上机调试过程,1、编辑源程序 CEDIT A1 . ASM 2、汇编源程序 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 +3* 161 +4=4660 4660BCD码 4660BCD码=0100 0110 0110 0000,AX 16位二进制数 DX 0;结果清0,DX、AX 除以 CX AX 商(千位) DX 余数,DX左移4位,DXAX AX 余数 DX 商,AX 除以 CL AL 商(百位) AH 余数,AL AH余数 AH 0,DL DL+AL DX左移4位,CL 100,AX 除以 CL AL 商(十位) AH 余数,DL DL+AH(个位),DL DL+AL DX左移4位,CL 10,结果:AX DX,CX 1000,千位,百位,个位,十位,请同学编程,例 8、 十进制ASCII码转换为有符号数二进制数 分析:,- 32 33 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*10 AL 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,判断原数据为负数,则对结果求补处理,请同学编程,请单击游览素材库,汇编语法 程序调试 程序设计基本方法 常用算法及程序,作业:阅读本章例题,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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