数学公式例题

上传人:ji****n 文档编号:54731979 上传时间:2018-09-18 格式:PPT 页数:105 大小:498KB
返回 下载 相关 举报
数学公式例题_第1页
第1页 / 共105页
数学公式例题_第2页
第2页 / 共105页
数学公式例题_第3页
第3页 / 共105页
数学公式例题_第4页
第4页 / 共105页
数学公式例题_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《数学公式例题》由会员分享,可在线阅读,更多相关《数学公式例题(105页珍藏版)》请在金锄头文库上搜索。

1、主讲人郑晓薇,汇编语言,第四章,辽宁师范大学,计算机与信息技术学院,第四章 汇编语言程序设计,设问:,1为什么要有伪指令? 2运算结果怎样显示在屏幕上? 3含有键盘输入的程序如何编写? 4. 完整的汇编语言程序都有哪些要求? 5. 简化的程序格式是不是更方便?,本章重点,汇编语言程序格式 伪指令的用法 数值运算程序设计 屏幕显示和键盘输入,4.1 汇编语言程序设计初步,举例: 编写一个汇编语言程序,实现下列公式计算。 假设X=4,Y=5 Z= (XY)8X2,4.1.1 第1个汇编语言程序,设计思路一: (1)设公式中出现的三个变量X、Y、Z是8位带符号数; (2)用算术运算指令实现加减乘除运

2、算; (3)指令顺序按照运算顺序书写。,程序段:MOV AL,X ;ALXADD AL,Y ;ALX+Y 加法MOV BL,8 ;BL8IMUL BL ;AXAL8 乘法MOV BL,X ;BLXMOV BH,0 ;BH0SUB AX,BX ;AXAXX 减法MOV BL,2 ;BL2IDIV BL ;AX2 除法,商在 AL,余数在AH中MOV Z,AL ;Z商MOV Z1,AH ;Z1余数,设计思路二: (1)公式中出现的三个变量X、Y、Z是带符号数,在数据段中定义; (2)用算术运算指令实现加减运算; (3)将操作数左移3位二进制位数代替乘以8运算,操作数右移1位相当于除以2; (4)指

3、令在代码段中,指令顺序按照运算顺序书写。,DATA SEGMENT ;数据段定义伪指令X DW 4 ;定义X为字单元,值为4Y DW 5Z DW ? ;定义Z为空单元 DATA ENDS ;数据段结束,完整的程序如下: ;abc.asm 公式计算,CODE SEGMENT ;代码段定义伪指令ASSUME CS:CODE,DS:DATA ;指定段寄存器与对应段名 START:MOV AX,DATA MOV DS,AX ;将数据段段地址送入DSMOV BX, X MOV AX, YADD AX,BX ;加法MOV CL,3SAL AX,CL ;算术左移3次,相当于乘以8SUB AX,X ;减法SA

4、R AX,1 ;算术右移1次,相当于除以2MOV Z,AXMOV AH,4CH ;此两句为结束程序,返回DOSINT 21H CODE ENDS ;代码段结束END START ;整个程序结束伪指令,4.1.2 从源程序到可执行程序,图 汇编语言程序从输入到生成可执行文件过程1建立和生成的文件 2汇编环境 3上机步骤 4调试程序,1建立和生成的文件,(1)用户编写的源程序,源程序名自定、扩展名为.ASM (2)源程序经汇编程序MASM汇编(翻译)后生成二进制目标程序,文件名默认与源程序同名、扩展名为.OBJ (3)目标程序需要经过LINK连接生成可执行程序,文件名默认与源程序同名、扩展名为.E

5、XE,2汇编环境,最基本的汇编环境只需要两个文件:MASM.EXE和LINK.EXE。将这两个文件拷入到已经建好的文件夹(例如HB)中,并将文件夹HB放在硬盘根目录C :下 文本编辑软件可以用EDIT或者“记事本”,3上机步骤,Ccd 退到根目录 Ccd hb 进入hb子目录 C:hbedit abc.asm 编辑源程序 C:hb masm abc.asm 汇编 C:hb link abc.obj 连接 C:hb abc.exe 执行 C:hb debug abc.exe 调试,进入DOS窗口中执行:,4调试程序,-U 反汇编 -G 断点 执行程序 -D DS:0 查看数据段 -Q 退出,进入

6、DEBUG后,执行如下命令:,上机练习: (1)验证举例的设计思路二程序 (2)将举例的设计思路一的程序段增加相关的伪指令,修改为可上机执行的程序。,4.2 伪指令,4.2.1段定义伪操作 段定义伪指令 ASSUME伪指令,段定义伪指令,段定义伪指令可用来定义各种类型的段。 格式如下: 段名 SEGMENT 类型参数段名 ENDS SEGMENT和ENDS必须成对使用,表示段的开始和结束。,类型参数: (1)定位类型 PARA 该段的起始地址必须为小段的首地址,即段地址的十六进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即段的起始地址为偶数 DWORD 该

7、段必须从双字边界开始,即段地址的十六进制数最低位应为4的倍数 PAGE 该段必须从页边界开始,即段地址的十六进制数最低两位为00(能被256整除) 如果不指出定位类型,系统默认为PARA。,(2)组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成一个段 COMMON 表示该段与其他模块中的同名段有相同的起始地址,如果连接将产生覆盖;连接后, 段的长度为同名段中的最长者 STACK 表示该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 如果不指定组合类型,系统默认为PRIVATE。 (3)类别标识 在引号中给出段的

8、类型名,在连接时,类别标识相同的 段放在连续的存储区中。 例如,用STACK来标识该段为堆栈段,返回,ASSUME伪指令,ASSUME伪指令用于指明段寄存器与段 的对应关系,格式为: ASSUME 段寄存器:段名,段寄存器: 段名,如果不使用ASSUME伪指令,系统就无法获知用户定义的段都有哪些,进而就不能正确地划分段。,返回,数据定义伪指令格式为: 存储单元名 DB(或DW、DD等伪指令) 操作数 其中: (1)存储单元可以起名也可以不要名字 (2)数据定义伪指令 DB 定义字节单元 DW 定义字单元 DD 定义双字单元 DQ 定义四字单元 DT 定义十字节单元 (3)操作数用于指出存储单元

9、的内容即该单元的值。 一条数据定义伪指令可以给多个存储单元赋值。需要说明的是确定存储单元的内容时要与存储单 元的属性一致。,4.2.2 数据定义伪指令,操作数是常数或表达式,例1 定义字节单元X =56,字单元E_1=2030H,双字单元CARRY =12345678H DATA SEGMENT X DB 56E_1 DW 2030HCARRY DD 12345678H DATA ENDS,实际存储显示:,例2 一次定义多个存储单元。字母打头的十六进制数要在前面加0 ,?代表空单元 XX DB 12,0,0E4H YY DW 5,?,6*3,实际存储显示:,例3 用DUP( )子句重复定义相同

10、操作数 AVE DB 8,3 DUP(2) ,-6 MSN DB 5 DUP(?) COUNT DW 100 DUP(1) 存储示意:,操作数是字符串,例1 定义字符及字符串,字符串要用引号括起来MES1 DB A,BMES2 DW ABMES3 DB HELLO,实际存储显示 :,4.2.3 其它伪指令,1赋值伪指令在程序中多次出现同一个表达式时,可以用 EQU定义一个符号来代表表达式,以简化书写。 与EQU伪操作相似,等号=伪操作也可以给表 达式赋值,且允许对一个符号多次重复定义; 而EQU则不允许。,例:CONT EQU 125*3.14STR EQU RIGHTSUM EQU 0BUF

11、F=56PASS=2034HBUFF=56H,2模块定义伪指令,在汇编语言中,可以将程序设为多个模块,每 个模块完成独立的功能。因此,每个模块可用模块定义伪指令定义名称和结束标识。格式为:NAME 模块名END 起始标号 其中,NAME伪指令可以缺省。如果缺省,则 以该模块的源程序名作为模块名。END伪指令不能缺省。其后的起始标号可以是程序的第一条汇编指令的标号START,或者是主过程名。,3地址计数器,地址计数器$表示当前的偏移地址值。 如果用在数据段的存储单元定义中,可写成:ABC DW 1,2,$+3,4 实际存储显示:如果用在转移指令中:JMP $+5 则无条件跳转到当前指令的偏移地址

12、+5单元继 续执行。,4设置偏移地址伪指令,当前的偏移地址可以用ORG伪指令定义。 如果用在数据段中,该指令可以确定存储单元的偏移 地址,例如将X单元的偏移地址定义为0020H,该单 元的内容为5,即(DS:0020H)=5。伪指令如下:DATA SEGMENTORG 0020HX DW 5DATA ENDS 如果用在代码段中,可从指定的单元开始存放并执行 指令。,例如从代码段的100H开始执行:ORG 100H START: MOV AX,X ;标号START设置为100HMOV BX,YADD AX,BX,5操作符,在汇编指令中可以使用一些操作符,汇编程序编译时将这些操作符变为相应的数值回

13、送或者定义属性。 (1)回送偏移地址值OFFSETMOV BX, OFFSET X ;将X单元的偏移地址传送给BXMOV AX, OFFSET START ;将标号START的偏移地址传送给AX (2)回送段地址值SEGMOV BX,SEG X ;将X单元的段地址传送给BXMOV AX, SEG START ;将标号START的段地址传送给AX,(3)类型回送操作符TYPEMOV BX,TYPE X ;如果X是字节单元,则回送值为1,即 BX1; 若是字单元,值为2,双字单元,值为4 (4)属性操作符PTRMOV BYTE PTR BX,10 ;定义目的操作数为字节单元MOV WORD PTR

14、 SI,20 ;定义目的操作数为字单元 (5)类型操作符LABELX LABEL BYTE ;X单元的类型定义为BYTE字节型,也可以定 义为 WORD字型、DWORD双字型等,6.注释伪指令,分号“;”后面的内容为注释。 编写程序时最好加入注释,便于以后的阅读和修改。,练习:,写出伪指令,并回答问题。 (1)定义名为NEW的字单元,保存10,20,30,40四个数 (2)将NEW单元的段地址放入DX寄存器,偏移地址放入BX寄存器 (3)NEW中数值40所在单元的偏移地址是多少? (4)如果将NEW单元的偏移地址设置为10H,用什么伪指令?,4.3基本汇编指令,1MOV传送指令MOV传送指令是双操作数指令,SRC为源操作数、DST为目的操作数。要求两个操作数的属性必须一致。 格式:MOV DST,SRC目的操作数,源操作数,4.3.1 数据、栈及查表,2. 数据交换指令XCHG XCHG指令是双操作数指令,指令的功能是将两个操 作数的内容互换。要求必须有一个操作数是寄存器, 而且两个操作数的属性必须一致。操作数不能为立即 数。 格式:XCHG OPR1,OPR2,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号