ImageVerifierCode 换一换
格式:PPT , 页数:48 ,大小:244.02KB ,
资源ID:52096      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-52096.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理本科4.ppt)为本站会员(无敌)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

微机原理本科4.ppt

1、第4章 汇编语言程序设计,汇编语言的程序格式伪指令汇编语言程序上机过程程序设计基本方法,汇编语言的程序格式,汇编语言程序的结构汇编语言语句类型及格式汇编语言的数据与表达式,源程序的一般格式,STACK SEGMENT STACK ENDS DATA SEGMENT DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS: DATA, SS:STACKSTART: CODE ENDS END START,源程序的一般格式-例,例 编写一个两字相加的程序DSEG SEGMENT ;定义数据段DATA1 DW 1234H ;定义被加数DATA2 DW 5678H ;定义加数

2、DSEG ENDS ;数据段结束ESEG SEGMENT ;定义附加段SUM DW 2 DUP(?) ;定义存放结果区ESEG ENDS ;附加段结束CSEG SEGMENT ;定义代码段;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址 ASSUME CS:CSEG,DS:DSEG,ES:ESEGSTART: MOV AX,DSEG ;START为程序开始执行的启动标号 MOV DS,AX ;初始化DS MOV AX,ESEG MOV ES,AX ;初始化ES LEA SI,SUM ;存放结果的偏移地址送SI MOV AX,DATA1 ;取被加数 ADD AX,DATA2 ;两数相加 M

3、OV ES:SI,AX ;和送附加段的SUM单元中 HLTCSEG ENDS ;代码段结束 END START ;源程序结束,源程序的结构特点,汇编语言程序通常由若干段组成,段由伪指令SEGMENT与ENDS定义,各段顺序任意,段的数目按需要确定,原则上不受限制。段由若干语句组成,语句以指令为主体而构成。一条语句写在一行上,书写时语句的各部分应尽量对齐汇编语言程序中至少要有一个启动标号,作为程序开始执行时目标代码的入口地址。启动标号常用START、BEGIN、MAIN等命名。为增加程序的可读性,可在汇编语言语句“ ;”后加上注释。,汇编语言语句类型及格式,汇编语言语句的类型指令语句是可执行语句

4、,在汇编中要产生对应的目标代码,CPU根据这些代码才能执行相应的操作。伪指令语句是不可执行语句,在汇编中不产生目标代码,用于指示汇编程序如何汇编源程序,利用它定义和说明常量和变量的属性及存储器单元的分配等。宏指令语句是以一个宏名定义的一段指令序列,在汇编中凡是出现宏指令语句的地方,都会有相应的指令语句序列的目标代码插入。语句的格式 标号: 操作数 ;注释 符号名 操作数 ;注释,标号,标号标号后跟冒号“:”。它可以缺省,是可供选择的标识符,标号的规则,由字母(az,AZ)、数字(09)或某些特殊字符(,-,?)组成第一个字符必须是字母(az,AZ)或某些特殊的符号(,-,?),但“?”不能单独

5、作标识符标识符有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效标识符CPU中的寄存器名、汇编语言中的保留字等均不能作为标号和符号名,常量与变量,常量 数值常量、字符串常量、符号常量变量用数据定义伪指令DB、DW、DD定义变量 DATA SEGMENT DA1 DB 12H ;定义一个字节数据 DA2 DD 0FEDCBA90H ;定义一个双字数据 DA3 DW 5678H ;定义一个字数据 DATA ENDS,变量的属性,变量的属性段属性:段基址,即变量所在段的段基址偏移量属性:段内偏移地址,即变量所在的地址与所在段的段基址之间的字节数类型属性:数据定义伪指令分别指示变量

6、是按字节、字、双字、4字、10字节操作,标号属性,标号表示指令语句的符号地址,其具有变量的三个属性,但其类型属性定义为段内属性(NEAR)和段间属性(FAR)段属性偏移量属性类型属性,表达式与运算符,表达式和运算符算术运算符逻辑运算符关系运算符数值返回运算符修改属性运算符,表达式和运算符,算术运算符 加、减、乘、除、模运算、左移位、右移位等逻辑运算符 AND、OR、NOT、XOR关系运算符 EQ()、NE()、LT()、LE()、GT()、GE()数值返回运算符SEG:返回段基址OFFSET:返回偏移地址TYPE:返回元素字节数LENGTH:返回变量单元数SIZE:返回变量总字节数,属性修改运

7、算符,LABEL:定义类型属性PTR:修改类型属性HIGH:取高字节LOW:取低字节,表达式和运算符-例,逻辑运算符的应用MOV AL,NOT 10101010B ;(AL)01010101BMOV AL,11110000B AND 10111101B ;(AL)10110000BMOV AL,10100000B OR 00000101B ;(AL)10100101B关系运算符的应用MOV AX,5 EQ 101B ;(AX)0FFFFHMOV BH,10H GT 16 ;(BH)0数值返回运算符的应用K1 DB 30H,31H,32HK2 DW 4041H,4043HK3 DW 20H DU

8、P(0)K4 DD 50515253HMOV AL,TYPE K1 ;等效于MOV AL,1MOV AH,TYPE K2 ;等效于MOV AH,2MOV AL, LENGTH K3 ;(AL)20H,返回DUP前面的数值MOV CL, LENGTH K4 ;(CL)01HMOV BL, SIZE K3 ;(BL)40HMOV DL, SIZE K4 ;(DL)04H,属性修改运算符-例,段属性运算符的应用MOV AX,ES:BX ;用附加段ES取代默认的数据段DSMOV BL,DS:BP ;用数据段DS取代默认的堆栈段SS PTR运算符的应用N1 DB 3,6,9MOV AX,WORD PTR

9、 N1 ;临时指定N1为字类型,(AX)0603HHIGH和LOW运算符的应用NUM EQU 2456HMOV AL,HIGH NUM ;等效于 MOV AL,34HMOV BL,LOW NUM ;等效于 MOV BL,56H,属性修改运算符-例,LABEL运算符的应用格式:标识符 LABEL 类型标识符可是变量名或标号 例: VALUE LABEL BYTE,伪指令,符号定义伪指令数据定义伪指令段定义伪指令段寻址伪指令过程定义伪指令模块定义与连接伪指令宏命令伪指令其他伪指令,符号定义伪指令,等值语句CR EQU 0DH ;常量AA EQU ASCII_TABLE ;变量VAR EQU TEN

10、*2+1024 ;数值表达式ADR EQU ES:BP+DI+5 ;地址表达式GOTO EQU JMP ;指令助记符等号语句NUM=488 ;定义NUM等于488NUM=NUM+1 ;定义NUM等于489,等语句与等号语句区别,两者功能相同EQU定义过的表达式,不能重复定义 CONST EQU 20 . CONST EQU 25 CONST = 20 . CONST = 25,数据定义伪指令,例1DATA DB 11H,33H ;定义包含两个元素的字节变量DATANUM DW 100*5+88 ;定义一个字类型变量NUM,其初值为表达式的值SUM DQ 0011223344556677 ;将4

11、个字存入变量SUM。例2STR1 DB COMPUTER ;定义一个字符串,字符串的首地址为STR1STR2 DW AA,BC,DE ;给两个字符组成的字符串分配两个字节存储单元DATA DW ?,?,? ;为DATA预留6个存储单元例3DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初值为任意值DATA2 DW ? ;为变量DATA2分配2个字节的空间,初值为任意值DATA3 DB 20 DUP(30H) ;为变量DATA3分配20个字节的空间,初值均为30H,段定义伪指令,格式段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS段名 表示逻辑段的名

12、称,由程序员确定。一个段开始和结尾的段名必须一致,否则会出现语法错误定位类型BYTE:表示本段起始地址可以从任意地址开始,地址为XXXXXHWORD:表示本段从偶字节地址开始,地址为XXXXEHPARA:表示本段从一个节(一个节为16字节)的边界开始,地址为XXXX0HPAGE:表示本段从一个页(一个页为256字节)的边界开始,地址为XXX00H,段定义伪指令(续),组合类型NONE:表示本段与其他段无连接关系PUBLIC:表示本段与同名段在一起,只有一个起始地址COMMON:表示同名段的各段在同一起始地址存放,形成一个覆盖段,连接后的长度以同名段中最长的段确定STACK:表示同名段的各段连接

13、成一个连续段,且只有一个起始地址赋给段寄存器SSMEMORY:表示本段在存储器中,定位在所有其他段的最高地址处AT表达式:表示本段定位在表达式指定的节位置处类别名是用引号包括起来的字符串,由设计人员自己定义的名字。在程序连接时,会将类别名相同的段存到存储器中连续的区域。,段寄存器说明伪指令,格式:ASSUME 段寄存器名:段名,段寄存器名:段名,求从NUM开始的12个无符号字节数的和,结果放在SUM字单元中。DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34HDB 62H,45H,75H,49HSUM DW ?DATA ENDSSTACK

14、 SEGMENT DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK,BEGIN:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AXLEA SI,NUM MOV CX,12 XOR AX,AXNEXT: ADD ALSI ADC AH,0 INC SI LOOP NEXT MOV SUM,AX HLT CODE ENDS END BEGIN,过程定义伪指令,格式:过程名 PROC NEAR/FAR RET 过程名 ENDP,例 编写一个延时

15、50ms的子程序DELAY PROC ;定义一个近过程 PUSH BX ;保护BX原来的内容 PUSH CX ;保护CX原来的内容 MOV BL,5 ;外循环次数NEXT: MOV CX,2801 ;内循环次数(实现延时10ms)W10MS:LOOP W10MS ;(CX)0则循环 DEC BL ;修改外循环计数值 JNZ NEXT ;(BX)0则进行外循环 POP CX ;恢复CX原来的内容 POP BX ;恢复BX原来的内容 RET ;过程返回DELAY ENDP ;过程结束,模块定义与连接伪指令,模块定义伪指令格式:NAME 标识符 END 启动标号或过程名模块连接伪指令全局符号伪指令

16、格式:PUBLIC 符号名1,符号名2, 定义符号为全局符号,在其他模块中可直接引用引用伪指令 格式:EXTRN 符号名1:类型,符号名2:类型, 表示此符号在程序的其他模块中已经用PUBLIC伪指令定义,在本模块中引用,宏命令伪指令,宏定义例 用宏指令定义两个字节数相加,结果存入RESULT单元的操作。ADDM MACRO OPR1,OPR2,RESULT MOV AL,OPR1 ADD AL,OPR2 MOV RESULT,AL ENDM宏调用例 将上例中的宏定义进行宏调用、宏展开操作如下:ADDM 88,36,SUM ADDM BR,TAB,SUM,宏展开 + MOV AL,88+ AD

17、D AL,36+ MOV SUM,AL + MOV AL,BR+ ADD AL,TAB+ MOV SUM,AL 宏的取消PURGE,其它伪指令,定位伪指令例 伪指令ORGDATA SEGMENT ORG 30HDB1 DB 12H,34HDATA ENDS,汇编语言程序上机过程,建立汇编语言的工作环境上机操作过程 DEBUG的使用方法,建立汇编语言的工作环境,编辑程序,文件名 EDIT.COM汇编程序,文件名 MASM.EXE 连接程序,文件名 LINK.EXE 调试程序,文件名 DEBUG.EXE LIB.EXE,库管理程序 CREF.EXE,符号索引文件处理程序 EXE2BIN.EXE,将

18、EXE转换为COM的文件格式转换程序,上机操作过程,编辑对编辑完成的源程序在存盘时扩展名必须加写.ASM一定要严格遵守汇编语言书写格式及段结构的格式来编写程序汇编汇编过程就是将汇编语言源程序转换成机器能够识别的目标代码程序,即OBJ的二进制文件。还可生成扩展名为.LST的列表文件,扩展名为.CRF的符号索引文件。连接所谓连接是用连接程序LINK.EXE把若干个经汇编后产生的.OBJ文件及指定的库文件连接起来,产生可执行的.EXE文件。调试,DEBUG的使用方法,DEBUG的运行DEBUG的主要命令D,显示内存单元内容;U,反汇编命令;R,显示与修改寄存器内容;E,修改内存单元内容;A,汇编命令

19、;T、P,单步执行指令;G,连续执行指令;N,指定装入文件名或写入文件名;L,装入N指定的文件;W,将指定内容写入N指定的文件;Q,退出DEBUG程序,返回操作系统状态,程序设计基本方法,程序设计概述顺序结构程序设计分支结构程序设计循环结构程序设计子程序设计程序设计举例,程序设计概述,程序设计的步骤分析问题 建立数学模型 确定算法。 绘制流程图 分配内存空间 编制程序与静态检查。 上机调试 试运行和分析结果 整理资料投入运行返回DOS的方法MOV AH,4CH ;功能号送AHINT 21H ;返回DOS程序的基本结构顺序结构,分支结构,循环结构,顺序结构程序设计,例 编写程序,计算(W-(X*

20、Y+Z-100)/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DXDATA SEGMENTW DW 268X DW 73Y DW 48Z DW 85DATA ENDSSTACK SEGMENT DW 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,X ;计算X*Y IMUL Y MOV CX,AX ;用CX存储结果低位MOV BX,DX ;用BX存储结果高位 MOV AX,Z ;计算X*Y+Z,顺序结构程序设计-例,例

21、 把非压缩十进制数DAT1转换为压缩十进制数。 DOSSEG MODEL SMALL STACK 64H DATA DAT1 DW 0908H ;非压缩十进制数0908H CODE BEGIN: MOV AX,DATA MOV DS,AX MOV AX,DAT1 ;AX0908H MOV CL,4 ;CL 4 SAL AH,CL ;09字节左移4位,AH=90H ROL AX,CL ;9008H字循环左移4位,AX=0089H ROL AL,CL ;89字节循环左移4位,AL=98H MOV BYTE PTR DAT1,AL ;DAT198H,压缩十进制数98H MOV AH,4CH ;返回D

22、OS INT 21H END BEGIN,分支结构程序设计,两路分支程序设计,例 用比较指令和条件转移指令实现两路分支的程序段。 MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;MN时转移,注意若M、N为无符号数时用JA指令 ;分支程序2 JMP DONE NEXT: ;分支程序1 DONE:RET,两路分支程序设计-例题,程序如下:DATA SEGMENT X DB ? Y DB ?DATA ENDSCODE SEGMENT ;代码段START:PROC FARASSUME CS:CODE,DS:D

23、ATA PUSH DS ;保存返回地址 MOV AX,0,PUSH AX MOV AX,DATA ;初始化DS MOV DS,AX MOV AL,X ;取数X CMP AL,0 ;准备条件 JNS PLUS ;X0则转移 NEG AL ;X0则求补 JMP DONEPLUS: ADD AL,20 ;X0时,X+20DONE: MOV Y,AL ;计算结果送Y RET ;返回START ENDPCODE ENDS END START ;汇编结束,多路分支程序设计,多路分支程序设计-例,例 假设某企业有10类人员,对每类人员的工资各有不同的处理方法和计算程序。对于一类人员应执行程序段CLASS1,

24、二类人员应执行程序段CLASS2,十类人员应执行程序段CLASS10,多路分支程序设计-程序,DATA SEGMENT TABLE DW CLASS1,CLASS2,CLASS3,CLASS4,CLASS5 DW CLASS6,CLASS7,CLASS8,CLASS9,CLASS10NUM DB ?DATA ENDS STACK SEGMENT STACK DW 100 DUP(?)STACK ENDSCODE SEGMENT MAIN PROC FAR ASSUME CS :CODE,DS:DATA,SS:STACKSTART:PUSH DS SUB AX,AX PUSH AX MOV AX

25、,DATA,MOV DS,AXMOV AL,NUMMOV AH,0 SHL AXSUB AX,2LEA BX,TABLEADD BX,AX JMP BXCLASS1: CLASS2: CLASS10: RETMAIN ENDPCODE ENDS END START,循环结构程序设计,循环结构程序设计-例,例 把从BUF单元开始的80个16位无符号数按从大到小的顺序排列,DSEG SEGMENT BUF DW 80 DUP(?) DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX LEA DI,MEM

26、 MOV BL,79 LOOP1:MOV SI,DI MOV CL,BL,LOOP2:MOV AX,SI ADD SI,2 CMP AX,SI JNC NEXT MOV DX,SI MOV SI-2,DX MOV SI,AX NEXT: DEC CL JNZ LOOP2 DEC BL JNZ LOOP1MOV AH,4CH INT 21H CSEG ENDS END START,子程序设计,例 通过寄存器传递参数,将数据块BUF1中的内容传递到数据块BUF2中DATA SEGMENT BUF1 DB 11,22,33,99 CUNT EQU $-BUF1 BUF2 DB CUNT DUP(?)

27、 DATA ENDS STACK SEGMENT TOS DW 128H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACK,MOV SS,AX MOV SP,OFFSET LEA SI,BUF1 LEA DI,BUF2 MOV CX,CUNT CALL SUB1 SUB1 PROCDON: MOV AL,SI MOV DI,AL INC SI INC DI LOOP DON RETSUB1 ENDP MOV AH,4CH INT 21HC

28、ODE ENDS END START,子程序设计-例,例 当I/O状态端口0378H的Bit1(D1位)为0时,表示外设忙;为1则表示外设可以接收数据。试编程根据外设的状态将当前数据段中从BUFFER开始的连续100个字节的内容从I/O数据端口03F8输出到外设SDATA PROC FAR PUSH AX PUSH DX PUSH SI PUSH CX LEA SI,BUFFER MOV CL,100AGAIN: MOV DX,378H WAIT: IN AL,DX TEST AL,02H JZ WAIT,MOV AL,SI MOV DX,3F8H OUT DX,AL INC SI DEC C

29、L JNZ AGAIN POP CX POP SI POP DX POP AX RETSDATA ENDP MOV AX,DATAMOV DS,AXCALL SDATA ,程序设计举例,例 把一个二进制数转换为BCD码。DATA SEGMENTNBIN DW 5678HNBCD DB 5 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AX,NBIN LEA BX,NBCD XOR DX,DX MOV CX,OAH DIV CX MOV BX,DL,MOV DL,0 DIV CX

30、 INC BX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX,DL INC BX MOV BX,DL MOV AH,4CH INT 21HCODE ENDS END START,程序设计-例,DATA SEGMENTA DB 65HB DB 33HC DB 08HD DB 0FHE DB ?DATA ENDSSTACK SEGMENT PARA STACK STACK DB 100 DUP(?)STACK SEGMENT,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX,DD MOV DS,AX NOT A MOV AL,B OR AL,A AND BL,D NOT AL MOV E,AL MOV AH,4CH INT 21HCODE ENDS END BEGIN,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报