微机原理第4章 汇编语言及汇编程序设计剖析课件_第1页
微机原理第4章 汇编语言及汇编程序设计剖析课件_第2页
微机原理第4章 汇编语言及汇编程序设计剖析课件_第3页
微机原理第4章 汇编语言及汇编程序设计剖析课件_第4页
微机原理第4章 汇编语言及汇编程序设计剖析课件_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《微机原理及应用》主讲教师《微机原理及应用》主讲教师2022/11/11第4章汇编语言及汇编程序设计2第四章汇编语言及汇编程序设计一、概述二、伪指令三、表达式及运算符四、宏指令五、汇编语言程序的上机过程六、汇编程序的设计过程七、汇编程序基本设计方法八、系统功能调用

例题作业2022/11/10第4章汇编语言及汇编程序设计2第四章2022/11/11第4章汇编语言及汇编程序设计3一、概述

汇编语言是一种面向CPU指令系统的程序设计语言。指令格式:1、标号是指该指令的符号地址,以冒号结束;2、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;2022/11/10第4章汇编语言及汇编程序设计3一、概2022/11/11第4章汇编语言及汇编程序设计4一、概述(续上页)3、用符号代表操作数或操作数地址。操作数是本指令执行需要的数据。

有些指令不需要指明操作数,可以默认;

有些指令需要两个操作数;

还有些操作数可以用表达式。4、注释项是可选项,用分号开始。2022/11/10第4章汇编语言及汇编程序设计4一、概2022/11/11第4章汇编语言及汇编程序设计5一、概述(续上页)用汇编语言编写的程序称为源程序,常用的汇编程序有ASM-86和宏汇编MASM-86。汇编语言源程序的组成部分:①可以使用CPU指令系统所提供的指令(硬指令);②可以使用各种符合汇编语法的表达式,运算符以及自行定义生成满足需要的目标代码的指令。2022/11/10第4章汇编语言及汇编程序设计5一、概2022/11/11第4章汇编语言及汇编程序设计61、标号8086/8088汇编语言中使用的标号必须遵循下列规则:(1)大小写字母;(2)数字0~9;(3)某些特殊字符(@,_,?)(4)第一个字符不能是数字,“?”不能单独作为标号。(5)标号的有效长度是31;

有效标号:STARTMY_PROGRAM

无效标号:MAIN%1BETA2022/11/10第4章汇编语言及汇编程序设计61、标2022/11/11第4章汇编语言及汇编程序设计7二、伪指令伪指令是告诉汇编程序生成目标代码的指令语句。1、符号定义伪指令2、内存数据定义伪指令3、段定义伪指令4、段寄存器说明伪指令5、定位伪指令2022/11/10第4章汇编语言及汇编程序设计7二、伪2022/11/11第4章汇编语言及汇编程序设计81、符号定义伪指令(1)EQU伪指令(2)等号(赋值)伪指令(3)解除符号定义伪指令2022/11/10第4章汇编语言及汇编程序设计81、符2022/11/11第4章汇编语言及汇编程序设计9(1)EQU伪指令伪指令格式:<符号名>EQU<表达式>指令功能:给符号名赋值。符号名可以由程序员取定,表达式应该是可以计算得出一个具体值。例:

PORTEQU88H ;定义符号PORT代表88H

DATAEQUPORT+2 ;定义符号DATA代表 ;PORT+2注意:①用EQU定义的符号,不能重新再定义,除非用PURGE伪指令解除;②如果在表达式中用了其他符号,必须事先定义。2022/11/10第4章汇编语言及汇编程序设计9(1)2022/11/11第4章汇编语言及汇编程序设计10(2)等号(赋值)伪指令伪指令格式:<符号名>=<表达式>指令功能:与EQU类似,唯一的区别是“=”可以随时对符号名赋新值,而不必使用PURGE伪指令。例:PORT=88H ;定义符号PORT代表88HDATA=PORT+2 ;定义符号DATA代表PORT+22022/11/10第4章汇编语言及汇编程序设计10(22022/11/11第4章汇编语言及汇编程序设计11(3)解除符号定义伪指令伪指令格式:PURGE符号1,符号2,…指令功能:撤消用EQU赋值的符号名,以便于赋予新值。例:PURGEPORT,DATA;撤消用EQU对PORT、;DATA的赋值2022/11/10第4章汇编语言及汇编程序设计11(32022/11/11第4章汇编语言及汇编程序设计122、内存数据定义伪指令①格式:[变量]命令参数1,参数2,…

功能:数据定义语句用来分配存储单元。数据定义语句的命令有:

DB

定义字节数据

DW

定义字数据

DD

定义双字数据

DQ

定义8字节数据

DT

定义10字节数据2022/11/10第4章汇编语言及汇编程序设计122、2022/11/11第4章汇编语言及汇编程序设计132、内存数据定义伪指令②复制操作符

格式:<复制次数>DUP数据1,数据2,…

功能:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字符。

例题2022/11/10第4章汇编语言及汇编程序设计132、2022/11/11第4章汇编语言及汇编程序设计142、内存数据定义伪指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2022/11/10第4章汇编语言及汇编程序设计142、2022/11/11第4章汇编语言及汇编程序设计153、段定义伪指令格式:<段名>SEGMENT

…<段名>ENDS2022/11/10第4章汇编语言及汇编程序设计1532022/11/11第4章汇编语言及汇编程序设计164、段寄存器说明伪指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,…]

功能:该伪指令告诉汇编程序在汇编时,各个段寄存器所对应的逻辑段基址。

注意:除了CS,所有段寄存器的实际值还必须用传送指令在执行时赋值2022/11/10第4章汇编语言及汇编程序设计164、2022/11/11第4章汇编语言及汇编程序设计175、定位伪指令①格式:

ORG<表达式>

功能:起址定位伪指令告诉汇编程序,以下的程序或数据从表达式指定的偏移地址开始存放;②格式:

EVEN

功能:偶地址定位伪指令告诉汇编程序,以下的程序或数据从偶地址开始存放。2022/11/10第4章汇编语言及汇编程序设计175、2022/11/11第4章汇编语言及汇编程序设计18三、表达式及运算符在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。表达式是由常数、寄存器、变量、标号和专用运算符组合而成。在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。1、常数、变量和标号2、表达式及运算符2022/11/10第4章汇编语言及汇编程序设计18三、2022/11/11第4章汇编语言及汇编程序设计191、常数、变量和标号常数包括数值型常数和字符型常数。如:12H,1234H,’AB’变量变量代表存放在存储单元中的数据。

定义后的变量有三个属性:(1)段属性表示变量所在的逻辑段;(2)偏移量属性表示变量所在逻辑段中的偏移地址;(3)类型属性表示变量占用的存储单元数,DB、DW、DD、DQ、DT。2022/11/10第4章汇编语言及汇编程序设计191、2022/11/11第4章汇编语言及汇编程序设计201、常数、变量和标号标号是指令目标代码的符号地址。在转移指令中常用标号代替具体转移地址,标号的使用使编写汇编语言程序时,不必考虑程序汇编、连接后系统分配给指令代码的实际地址。标号同样有三个属性:(1)段属性表示指令代码所在的逻辑段;(2)偏移量属性表示指令代码所在的逻辑段中的偏移地址;(3)距离属性表示标号可作段内转移或段间转移(NEAR、FAR)。2022/11/10第4章汇编语言及汇编程序设计201、2022/11/11第4章汇编语言及汇编程序设计212、表达式及运算符表达式由操作数和运算符组成。其中,操作数可以是常数、变量、寄存器和标号。运算符包括算术运算符、逻辑运算符、关系运算符、分析运算符和属性运算符五类运算。

注意:运算符的先后次序。2022/11/10第4章汇编语言及汇编程序设计2122022/11/11第4章汇编语言及汇编程序设计22五、汇编语言程序的上机过程建立汇编语言的环境,典型的汇编语言开发环境都包含4种工具:1、编辑程序2、汇编程序3、连接程序4、汇编程序的上机过程2022/11/10第4章汇编语言及汇编程序设计22五、2022/11/11第4章汇编语言及汇编程序设计231、编辑程序(1)编辑程序是用来输入汇编语言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)汇编语言是以文本格式保存的;(3)汇编程序的源程序必须以ASM作为扩展名;(4)输入和编辑源程序时必须遵循汇编语言的语法规定。

汇编程序的基本结构

例题实际操作:编辑源程序TEST11.ASM2022/11/10第4章汇编语言及汇编程序设计231、2022/11/11第4章汇编语言及汇编程序设计24汇编程序的基本结构DATAASEGMENT

…… ;数据段内定义各类程序执行需要的相关的数据DATAAENDSSTACKASEGMENTSTACK……;根据具体程序的需要,定义堆栈段供程序执行过程;中保存临时数据STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAA MOVDS,AX ;送数据段基址

…… ;完成具体操作的指令序列CODEAENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计24汇编2022/11/11第4章汇编语言及汇编程序设计25实际操作(实现X+Y→Z,源程序文件名:TEST11.ASM)

DATA1SEGMENT ;数据段 XDB05H YDB04H ZDB?DATA1ENDS

CODE1SEGMENT ;代码段ASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA ;数据段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;内存单元X的数据→AL ADDAL,Y ;内存单元Y的数据+AL→AL,即X+Y→AL MOVZ,AL ;AL→内存单元Z,即求和结果送回Z

MOVAH,4CH ;送功能号

INT21H ;系统功能调用,返回操作系统

CODE1ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计25实际2022/11/11第4章汇编语言及汇编程序设计262、汇编程序(1)汇编程序用来把源程序翻译成机器码,包括ASM.EXE,MASM.EXE;(2)汇编程序翻译源程序,产生一个目标代码文件,与源程序文件名相同,扩展名为OBJ。实际操作:产生目标文件TEST11.OBJ2022/11/10第4章汇编语言及汇编程序设计262、2022/11/11第4章汇编语言及汇编程序设计273、连接程序通过汇编产生的是OBJ文件是二进制目标文件,但用的是浮动地址,不能直接运行,必须用连接程序LINK.EXE连接和定位。实际操作:产生可执行文件TEST11.EXE2022/11/10第4章汇编语言及汇编程序设计273、2022/11/11第4章汇编语言及汇编程序设计284、汇编程序的上机过程实际操作演示2022/11/10第4章汇编语言及汇编程序设计284、2022/11/11第4章汇编语言及汇编程序设计29data1segment ;数据段开始test1.asm xdb05h ydb04h zdb? buffdb‘5+4=$‘ ;定义一个数据串,数据串规定以$结尾,为了 ;显示’5+4=’data1endscode1segment ;代码段开始assumecs:code1,ds:data1 ;start: movax,data1 ;将数据段基址→ax movds,ax ;ax→ds moval,x ;内存数据x→al addal,y ;内存数据Y+al→al,即X+Y→al movz,al ;al→Z,即X+Y→Z

leadx,buff ;装载buff的有效地址 movah,09h ;送功能号 int21h ;系统功能调用,显示屏显示字符串’5+4=’

movdl,z ;将z送dl adddl,30h ;将z的值转换成对应的ASCII码值 movah,02h ;送功能号 int21H ;系统功能调用,将x+y的和z以单字符形式在显 ;示屏上显示出来 movah,4ch ;送功能号 int21h ;系统功能调用,返回DOS状态code1endsendstart2022/11/10第4章汇编语言及汇编程序设计29da2022/11/11第4章汇编语言及汇编程序设计30六、汇编程序的设计过程1、分析问题确定算法2、绘制程序流程图(要求同学们从现在开始编写程序前养成先绘制流程图的习惯)3、编写代码2022/11/10第4章汇编语言及汇编程序设计30六、2022/11/11第4章汇编语言及汇编程序设计31七、汇编程序基本设计方法1、简单程序

作业2、分支程序3、循环程序4、子程序2022/11/10第4章汇编语言及汇编程序设计31七、2022/11/11第4章汇编语言及汇编程序设计321、简单程序

简单程序是指顺序结构程序,在程序中不包含任何转移类指令。执行时按指令的先后次序从第一条开始逐条执行,直至程序结束。

例题2022/11/10第4章汇编语言及汇编程序设计321、2022/11/11第4章汇编语言及汇编程序设计33例题1、有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。解:①编写流程图2022/11/10第4章汇编语言及汇编程序设计33例题2022/11/11第4章汇编语言及汇编程序设计34例题程序清单

DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 0DATA ENDS ;设置数据段,取名DATA

CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA ;取数码段DATA段址至AX MOVDS,AX ;段地址送DS LEASI,X ;将X的有效地址送S1 LEADI,Y ;将Y的有效地址送D1 MOVAX,[SI] ;将X的值送AX ADDAX,[DI] ;AX+Y的值送回AX MOVZ,AX ;将AX的值送到存储单元Z MOVAH,4CH ;设置功能号

INT 21H ;系统功能调用,返回DOSCODEENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计34例题2022/11/11第4章汇编语言及汇编程序设计35作业P.1262、4、5、7、122022/11/10第4章汇编语言及汇编程序设计35作业2022/11/11第4章汇编语言及汇编程序设计362、分支程序

分支程序就是利用转移指令,控制计算机执行某段程序或不执行某段程序。两路分支多路分支例题2022/11/10第4章汇编语言及汇编程序设计362、2022/11/11第4章汇编语言及汇编程序设计37例题1、内存中有一个8位带符号数,求其绝对值,并将结果放回原处。答:编写流程图程序清单2022/11/10第4章汇编语言及汇编程序设计37例题2022/11/11第4章汇编语言及汇编程序设计38例题程序清单DATA2SEGMENT MDB05H ;第二个程序换成-5,即0fbhDATA2ENDSCODE2SEGMENT ASSUMECS:CODE2,DS:DATA2START: MOVAX,DATA2MOVDS,AX ;送段地址至DS LEASI,M ;取M的地址指针

MOVAL,[SI] ;取带符号数 ANDAL,AL ;判断符号位

JNSDONE ;SF=0,转移到DONE NEGAL ;SF=1,AL<0,AL求补(即0-AL)DONE:MOV[SI],AL ;绝对值送回原内存单元

MOVDL,[SI]

ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示该数值

MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计38例题2022/11/11第4章汇编语言及汇编程序设计39例题2、编写程序实现函数。1(当X>0)Y=0(当X=0)9(当X<0)解:编写程序清单程序清单2022/11/10第4章汇编语言及汇编程序设计39例题2022/11/11第4章汇编语言及汇编程序设计40例题程序清单_数据段DATAXYSEGMENTXDB8FH ;另外两组分别是7FH,00HYDB?DATAXYENDS2022/11/10第4章汇编语言及汇编程序设计40例题2022/11/11第4章汇编语言及汇编程序设计41例题程序清单_代码段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART:MOVAX,DATAXY MOVDS,AX ;送段地址 LEASI,X ;取X的指针 MOVAL,[SI] ;将X的值送AL ANDAL,AL ;自身与,取符号标志位

JNSOTHER ;SF=0,转移到OTHER MOVY,09H ;SF=1,则X<0 JMPDONEOTHER:JNZPLUS ;ZF=0转移到PLUS MOVY,00H ;ZF=1,则X=0 JMPDONEPLUS: MOVY,01H ;SF=0,ZF=0,则X>0DONE: MOVDL,Y ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示Y的值

MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计41例题2022/11/11第4章汇编语言及汇编程序设计423、循环程序

循环程序就是控制计算机反复执行一段指令序列的程序结构。非零次循环结构零次循环结构例题2022/11/10第4章汇编语言及汇编程序设计423、2022/11/11第4章汇编语言及汇编程序设计431、统计字节数据Z的1的个数,将结果放在RESULT内。解:编写流程图例题程序清单2022/11/10第4章汇编语言及汇编程序设计432022/11/11第4章汇编语言及汇编程序设计44例题程序清单——数据段DATAXYSEGMENT XDB0FFH ;第二个程序换成-5,即0fbhRESULTDB?DATAXYENDS2022/11/10第4章汇编语言及汇编程序设计44例题2022/11/11第4章汇编语言及汇编程序设计45例题程序清单—代码段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART: MOVAX,DATAXY MOVDS,AX ;送段地址至DS XORBL,BL ;累加器BL清0

MOVCX,08H ;循环次数送CX LEASI,X ;取X的指针 MOVAL,[SI] ;取X送ALSUM:SHRAL,1 ;逻辑右移1位 JNCNONE ;CF=0,转移到NONE INCBL ;CF=1,BL+1→BLNONE: LOOPSUM MOVRESULT,BL;统计值送RESULT内存单元

MOVDL,RESULT ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示该统计数值 MOVAH,4CH INT21HCODEENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计45例题2022/11/11第4章汇编语言及汇编程序设计464、子程序一个程序中,当在不同的地方需要多次使用某段程序时,我们常将这段程序单独编写成一个程序段,称为子程序/过程。(1)子程序的定义格式(2)子程序的调用(3)编写子程序的注意事项2022/11/10第4章汇编语言及汇编程序设计464、2022/11/11第4章汇编语言及汇编程序设计47(1)子程序的定义格式格式1:子程序名PROC … RET子程序名ENDP格式2:子程序名:… RET2022/11/10第4章汇编语言及汇编程序设计47(12022/11/11第4章汇编语言及汇编程序设计48(2)子程序的调用

格式:CALL子程序名2022/11/10第4章汇编语言及汇编程序设计48(22022/11/11第4章汇编语言及汇编程序设计49(3)编写子程序的注意事项1、现场保护:保护调用子程序的现场,即保护子程序中会用到的寄存器,将这些寄存器入栈;2、功能子程序:子程序要完成的功能;3、恢复现场:为了使计算机返回到主程序调用时的状态,将入栈的数据出栈。注意顺序!例题:子程序的基本框架2022/11/10第4章汇编语言及汇编程序设计49(32022/11/11第4章汇编语言及汇编程序设计50子程序的基本框架设某一子程序中要用到寄存器BX,CX,SI,DI则:ABC: PUSHBX PRSHCX PUSHSI PUSHDI …… ;子程序的功能程序

POPDI POPSI POPCX POPBX RET2022/11/10第4章汇编语言及汇编程序设计50子程2022/11/11第4章汇编语言及汇编程序设计51例题1编写统计X数据中的“1”的个数子程序,并编写主程序调用。子程序如下:ABC:PUSHBX PUSHCX XORBL,BL ;累加器BL清0

MOVCX,08H ;循环次数送CX SUM:SHRAL,1 ;逻辑右移1位

JNCNONE ;CF=0,转移到NONE INCBL ;CF=1,BL+1→BLNONE:LOOPSUM MOVAL,BL ;AL里保存的是“1”的统计个数

POPCX POPBX

RET2022/11/10第4章汇编语言及汇编程序设计51例题2022/11/11第4章汇编语言及汇编程序设计52例题1主程序_数据段_堆栈段DATAXYSEGMENTXDB0FFHSXDB?DATAXYENDS;----------------------STACKSEGMENTDW100DUP(?)STACKENDS2022/11/10第4章汇编语言及汇编程序设计52例题2022/11/11第4章汇编语言及汇编程序设计53例题1主程序_代码段CODE1SEGMENTASSUMECS:CODE1,DS:DATAXY,SS:STACKSTART:MOVAX,DATA MOVDS,AX LEABX,X MOVAL,[BX] CALLABC MOV[BX+1],AL

MOVDL,SX ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示该统计数值

MOVAH,4CHINT21H

;子程序插入此处CODE1ENDSENDSTART

2022/11/10第4章汇编语言及汇编程序设计53例题2022/11/11第4章汇编语言及汇编程序设计54例题2、将一字节无符号二进制数转换为两位十进制数的ASCII码值,并存放在其后的两个字节。(显示程序用子程序编写)。解:编写流程图:2022/11/10第4章汇编语言及汇编程序设计54例题2022/11/11第4章汇编语言及汇编程序设计55程序——数据段data1segmentxdb2ah ;可任取<100的无符号字节数据ydb?zdb?buffdb'2ah=$'data1ends2022/11/10第4章汇编语言及汇编程序设计55程序2022/11/11第4章汇编语言及汇编程序设计56代码段:code1segmentassumecs:code1,ds:data1start:movax,data1movds,axmoval,xcbwmovbl,0ahdivblmovy,almovz,ahleadx,buffmovah,09hint21hmoval,y;下接右上;上接左下calldispmoval,zcalldispjmpeenddisp:movdl,aladddl,30hmovah,02hint21hreteend:movah,4chint21hcode1endsendstart2022/11/10第4章汇编语言及汇编程序设计56代码2022/11/11第4章汇编语言及汇编程序设计57思考题试编制程序将一个字数据用十六进制数的形式显示在屏幕上。2022/11/10第4章汇编语言及汇编程序设计57思考2022/11/11第4章汇编语言及汇编程序设计58八、系统功能调用MS-DOS是8086/8088微机系统广泛使用的一种操作系统。MS-DOS中包含有许多通用的内部子程序,分别用于完成I/O管理、内存管理、文件管理以及作业管理等。MS-DOS以中断服务程序形式提供这些功能程序,在汇编语言源程序中可以用软中断调用它们。系统功能调用(INT21H)应用步骤:(1)传送入口参数到规定的寄存器或存储单元;(2)把子程序功能编号送到AH寄存器;(3)执行软件中断指令INT21H。

2022/11/10第4章汇编语言及汇编程序设计58八、2022/11/11第4章汇编语言及汇编程序设计59常用的系统功能介绍(1)返回操作系统(功能号:4CH)通常程序结束时,需调用4CH的系统功能把微机的控制权交还给操作系统,方法如下:MOVAH,4CH;功能号送AHINT21H;调用功能子程序在编程结束前,将以上两条指令插入,前面许多例题已经使用。2022/11/10第4章汇编语言及汇编程序设计59常用2022/11/11第4章汇编语言及汇编程序设计60常用的系统功能介绍(2)键盘输入单字符并回显(功能号:01H)这一功能调用没有入口参数,它从标准输入设备(一般默认为键盘)读入一个字符以ASCII码形式送到AL,并且将该字符送到标准输出设备(一般默认为显示器)。如果读入的是Ctrl-Break码,则退出命令,读入的内容不送AL。例如程序中需要从键盘读入一个字符,可用下面语句实现:

MOVAH,01H INT21H当上面第二条指令执行完时,系统等待键盘按键。按下任一字符时,AL中的内容即为该字符的ASCII码,同时显示器上显示出所按下的字符。2022/11/10第4章汇编语言及汇编程序设计60常用2022/11/11第4章汇编语言及汇编程序设计61(3)显示单字符(功能号:02H)这一功能调用时,系统将DL寄存器中的ASCII字符输出到显示器。例如需要显示字符“D”,可用以下指令实现:MOVDL,‘D’ ;把要显示的字符送DL寄存器MOVAH,02H ;功能号02H送AHINT21H ;调用系统功能显示字符‘D’常用的系统功能介绍2022/11/10第4章汇编语言及汇编程序设计61(32022/11/11第4章汇编语言及汇编程序设计62常用的系统功能介绍(4)显示字符串(功能号:09H)调用该功能可把内存缓冲区中的字符串输出到显示器,缓冲区中的字符串以‘$’作为结束标志,缓冲区的首地址存放在DX。例如:

...BUFF2DB‘Howdoyoudo!$’

...MOVDX,OFFSETBUFF2;送字符串的首地址至DXMOVAH,09H ;送功能号INT 21H ;系统功能调用显示字符串执行以上几条指令后,屏幕上将显示:Howdoyoudo!2022/11/10第4章汇编语言及汇编程序设计62常用《微机原理及应用》主讲教师《微机原理及应用》主讲教师2022/11/11第4章汇编语言及汇编程序设计64第四章汇编语言及汇编程序设计一、概述二、伪指令三、表达式及运算符四、宏指令五、汇编语言程序的上机过程六、汇编程序的设计过程七、汇编程序基本设计方法八、系统功能调用

例题作业2022/11/10第4章汇编语言及汇编程序设计2第四章2022/11/11第4章汇编语言及汇编程序设计65一、概述

汇编语言是一种面向CPU指令系统的程序设计语言。指令格式:1、标号是指该指令的符号地址,以冒号结束;2、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;2022/11/10第4章汇编语言及汇编程序设计3一、概2022/11/11第4章汇编语言及汇编程序设计66一、概述(续上页)3、用符号代表操作数或操作数地址。操作数是本指令执行需要的数据。

有些指令不需要指明操作数,可以默认;

有些指令需要两个操作数;

还有些操作数可以用表达式。4、注释项是可选项,用分号开始。2022/11/10第4章汇编语言及汇编程序设计4一、概2022/11/11第4章汇编语言及汇编程序设计67一、概述(续上页)用汇编语言编写的程序称为源程序,常用的汇编程序有ASM-86和宏汇编MASM-86。汇编语言源程序的组成部分:①可以使用CPU指令系统所提供的指令(硬指令);②可以使用各种符合汇编语法的表达式,运算符以及自行定义生成满足需要的目标代码的指令。2022/11/10第4章汇编语言及汇编程序设计5一、概2022/11/11第4章汇编语言及汇编程序设计681、标号8086/8088汇编语言中使用的标号必须遵循下列规则:(1)大小写字母;(2)数字0~9;(3)某些特殊字符(@,_,?)(4)第一个字符不能是数字,“?”不能单独作为标号。(5)标号的有效长度是31;

有效标号:STARTMY_PROGRAM

无效标号:MAIN%1BETA2022/11/10第4章汇编语言及汇编程序设计61、标2022/11/11第4章汇编语言及汇编程序设计69二、伪指令伪指令是告诉汇编程序生成目标代码的指令语句。1、符号定义伪指令2、内存数据定义伪指令3、段定义伪指令4、段寄存器说明伪指令5、定位伪指令2022/11/10第4章汇编语言及汇编程序设计7二、伪2022/11/11第4章汇编语言及汇编程序设计701、符号定义伪指令(1)EQU伪指令(2)等号(赋值)伪指令(3)解除符号定义伪指令2022/11/10第4章汇编语言及汇编程序设计81、符2022/11/11第4章汇编语言及汇编程序设计71(1)EQU伪指令伪指令格式:<符号名>EQU<表达式>指令功能:给符号名赋值。符号名可以由程序员取定,表达式应该是可以计算得出一个具体值。例:

PORTEQU88H ;定义符号PORT代表88H

DATAEQUPORT+2 ;定义符号DATA代表 ;PORT+2注意:①用EQU定义的符号,不能重新再定义,除非用PURGE伪指令解除;②如果在表达式中用了其他符号,必须事先定义。2022/11/10第4章汇编语言及汇编程序设计9(1)2022/11/11第4章汇编语言及汇编程序设计72(2)等号(赋值)伪指令伪指令格式:<符号名>=<表达式>指令功能:与EQU类似,唯一的区别是“=”可以随时对符号名赋新值,而不必使用PURGE伪指令。例:PORT=88H ;定义符号PORT代表88HDATA=PORT+2 ;定义符号DATA代表PORT+22022/11/10第4章汇编语言及汇编程序设计10(22022/11/11第4章汇编语言及汇编程序设计73(3)解除符号定义伪指令伪指令格式:PURGE符号1,符号2,…指令功能:撤消用EQU赋值的符号名,以便于赋予新值。例:PURGEPORT,DATA;撤消用EQU对PORT、;DATA的赋值2022/11/10第4章汇编语言及汇编程序设计11(32022/11/11第4章汇编语言及汇编程序设计742、内存数据定义伪指令①格式:[变量]命令参数1,参数2,…

功能:数据定义语句用来分配存储单元。数据定义语句的命令有:

DB

定义字节数据

DW

定义字数据

DD

定义双字数据

DQ

定义8字节数据

DT

定义10字节数据2022/11/10第4章汇编语言及汇编程序设计122、2022/11/11第4章汇编语言及汇编程序设计752、内存数据定义伪指令②复制操作符

格式:<复制次数>DUP数据1,数据2,…

功能:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字符。

例题2022/11/10第4章汇编语言及汇编程序设计132、2022/11/11第4章汇编语言及汇编程序设计762、内存数据定义伪指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2022/11/10第4章汇编语言及汇编程序设计142、2022/11/11第4章汇编语言及汇编程序设计773、段定义伪指令格式:<段名>SEGMENT

…<段名>ENDS2022/11/10第4章汇编语言及汇编程序设计1532022/11/11第4章汇编语言及汇编程序设计784、段寄存器说明伪指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,…]

功能:该伪指令告诉汇编程序在汇编时,各个段寄存器所对应的逻辑段基址。

注意:除了CS,所有段寄存器的实际值还必须用传送指令在执行时赋值2022/11/10第4章汇编语言及汇编程序设计164、2022/11/11第4章汇编语言及汇编程序设计795、定位伪指令①格式:

ORG<表达式>

功能:起址定位伪指令告诉汇编程序,以下的程序或数据从表达式指定的偏移地址开始存放;②格式:

EVEN

功能:偶地址定位伪指令告诉汇编程序,以下的程序或数据从偶地址开始存放。2022/11/10第4章汇编语言及汇编程序设计175、2022/11/11第4章汇编语言及汇编程序设计80三、表达式及运算符在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。表达式是由常数、寄存器、变量、标号和专用运算符组合而成。在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。1、常数、变量和标号2、表达式及运算符2022/11/10第4章汇编语言及汇编程序设计18三、2022/11/11第4章汇编语言及汇编程序设计811、常数、变量和标号常数包括数值型常数和字符型常数。如:12H,1234H,’AB’变量变量代表存放在存储单元中的数据。

定义后的变量有三个属性:(1)段属性表示变量所在的逻辑段;(2)偏移量属性表示变量所在逻辑段中的偏移地址;(3)类型属性表示变量占用的存储单元数,DB、DW、DD、DQ、DT。2022/11/10第4章汇编语言及汇编程序设计191、2022/11/11第4章汇编语言及汇编程序设计821、常数、变量和标号标号是指令目标代码的符号地址。在转移指令中常用标号代替具体转移地址,标号的使用使编写汇编语言程序时,不必考虑程序汇编、连接后系统分配给指令代码的实际地址。标号同样有三个属性:(1)段属性表示指令代码所在的逻辑段;(2)偏移量属性表示指令代码所在的逻辑段中的偏移地址;(3)距离属性表示标号可作段内转移或段间转移(NEAR、FAR)。2022/11/10第4章汇编语言及汇编程序设计201、2022/11/11第4章汇编语言及汇编程序设计832、表达式及运算符表达式由操作数和运算符组成。其中,操作数可以是常数、变量、寄存器和标号。运算符包括算术运算符、逻辑运算符、关系运算符、分析运算符和属性运算符五类运算。

注意:运算符的先后次序。2022/11/10第4章汇编语言及汇编程序设计2122022/11/11第4章汇编语言及汇编程序设计84五、汇编语言程序的上机过程建立汇编语言的环境,典型的汇编语言开发环境都包含4种工具:1、编辑程序2、汇编程序3、连接程序4、汇编程序的上机过程2022/11/10第4章汇编语言及汇编程序设计22五、2022/11/11第4章汇编语言及汇编程序设计851、编辑程序(1)编辑程序是用来输入汇编语言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)汇编语言是以文本格式保存的;(3)汇编程序的源程序必须以ASM作为扩展名;(4)输入和编辑源程序时必须遵循汇编语言的语法规定。

汇编程序的基本结构

例题实际操作:编辑源程序TEST11.ASM2022/11/10第4章汇编语言及汇编程序设计231、2022/11/11第4章汇编语言及汇编程序设计86汇编程序的基本结构DATAASEGMENT

…… ;数据段内定义各类程序执行需要的相关的数据DATAAENDSSTACKASEGMENTSTACK……;根据具体程序的需要,定义堆栈段供程序执行过程;中保存临时数据STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAA MOVDS,AX ;送数据段基址

…… ;完成具体操作的指令序列CODEAENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计24汇编2022/11/11第4章汇编语言及汇编程序设计87实际操作(实现X+Y→Z,源程序文件名:TEST11.ASM)

DATA1SEGMENT ;数据段 XDB05H YDB04H ZDB?DATA1ENDS

CODE1SEGMENT ;代码段ASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA ;数据段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;内存单元X的数据→AL ADDAL,Y ;内存单元Y的数据+AL→AL,即X+Y→AL MOVZ,AL ;AL→内存单元Z,即求和结果送回Z

MOVAH,4CH ;送功能号

INT21H ;系统功能调用,返回操作系统

CODE1ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计25实际2022/11/11第4章汇编语言及汇编程序设计882、汇编程序(1)汇编程序用来把源程序翻译成机器码,包括ASM.EXE,MASM.EXE;(2)汇编程序翻译源程序,产生一个目标代码文件,与源程序文件名相同,扩展名为OBJ。实际操作:产生目标文件TEST11.OBJ2022/11/10第4章汇编语言及汇编程序设计262、2022/11/11第4章汇编语言及汇编程序设计893、连接程序通过汇编产生的是OBJ文件是二进制目标文件,但用的是浮动地址,不能直接运行,必须用连接程序LINK.EXE连接和定位。实际操作:产生可执行文件TEST11.EXE2022/11/10第4章汇编语言及汇编程序设计273、2022/11/11第4章汇编语言及汇编程序设计904、汇编程序的上机过程实际操作演示2022/11/10第4章汇编语言及汇编程序设计284、2022/11/11第4章汇编语言及汇编程序设计91data1segment ;数据段开始test1.asm xdb05h ydb04h zdb? buffdb‘5+4=$‘ ;定义一个数据串,数据串规定以$结尾,为了 ;显示’5+4=’data1endscode1segment ;代码段开始assumecs:code1,ds:data1 ;start: movax,data1 ;将数据段基址→ax movds,ax ;ax→ds moval,x ;内存数据x→al addal,y ;内存数据Y+al→al,即X+Y→al movz,al ;al→Z,即X+Y→Z

leadx,buff ;装载buff的有效地址 movah,09h ;送功能号 int21h ;系统功能调用,显示屏显示字符串’5+4=’

movdl,z ;将z送dl adddl,30h ;将z的值转换成对应的ASCII码值 movah,02h ;送功能号 int21H ;系统功能调用,将x+y的和z以单字符形式在显 ;示屏上显示出来 movah,4ch ;送功能号 int21h ;系统功能调用,返回DOS状态code1endsendstart2022/11/10第4章汇编语言及汇编程序设计29da2022/11/11第4章汇编语言及汇编程序设计92六、汇编程序的设计过程1、分析问题确定算法2、绘制程序流程图(要求同学们从现在开始编写程序前养成先绘制流程图的习惯)3、编写代码2022/11/10第4章汇编语言及汇编程序设计30六、2022/11/11第4章汇编语言及汇编程序设计93七、汇编程序基本设计方法1、简单程序

作业2、分支程序3、循环程序4、子程序2022/11/10第4章汇编语言及汇编程序设计31七、2022/11/11第4章汇编语言及汇编程序设计941、简单程序

简单程序是指顺序结构程序,在程序中不包含任何转移类指令。执行时按指令的先后次序从第一条开始逐条执行,直至程序结束。

例题2022/11/10第4章汇编语言及汇编程序设计321、2022/11/11第4章汇编语言及汇编程序设计95例题1、有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。解:①编写流程图2022/11/10第4章汇编语言及汇编程序设计33例题2022/11/11第4章汇编语言及汇编程序设计96例题程序清单

DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 0DATA ENDS ;设置数据段,取名DATA

CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA ;取数码段DATA段址至AX MOVDS,AX ;段地址送DS LEASI,X ;将X的有效地址送S1 LEADI,Y ;将Y的有效地址送D1 MOVAX,[SI] ;将X的值送AX ADDAX,[DI] ;AX+Y的值送回AX MOVZ,AX ;将AX的值送到存储单元Z MOVAH,4CH ;设置功能号

INT 21H ;系统功能调用,返回DOSCODEENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计34例题2022/11/11第4章汇编语言及汇编程序设计97作业P.1262、4、5、7、122022/11/10第4章汇编语言及汇编程序设计35作业2022/11/11第4章汇编语言及汇编程序设计982、分支程序

分支程序就是利用转移指令,控制计算机执行某段程序或不执行某段程序。两路分支多路分支例题2022/11/10第4章汇编语言及汇编程序设计362、2022/11/11第4章汇编语言及汇编程序设计99例题1、内存中有一个8位带符号数,求其绝对值,并将结果放回原处。答:编写流程图程序清单2022/11/10第4章汇编语言及汇编程序设计37例题2022/11/11第4章汇编语言及汇编程序设计100例题程序清单DATA2SEGMENT MDB05H ;第二个程序换成-5,即0fbhDATA2ENDSCODE2SEGMENT ASSUMECS:CODE2,DS:DATA2START: MOVAX,DATA2MOVDS,AX ;送段地址至DS LEASI,M ;取M的地址指针

MOVAL,[SI] ;取带符号数 ANDAL,AL ;判断符号位

JNSDONE ;SF=0,转移到DONE NEGAL ;SF=1,AL<0,AL求补(即0-AL)DONE:MOV[SI],AL ;绝对值送回原内存单元

MOVDL,[SI]

ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示该数值

MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计38例题2022/11/11第4章汇编语言及汇编程序设计101例题2、编写程序实现函数。1(当X>0)Y=0(当X=0)9(当X<0)解:编写程序清单程序清单2022/11/10第4章汇编语言及汇编程序设计39例题2022/11/11第4章汇编语言及汇编程序设计102例题程序清单_数据段DATAXYSEGMENTXDB8FH ;另外两组分别是7FH,00HYDB?DATAXYENDS2022/11/10第4章汇编语言及汇编程序设计40例题2022/11/11第4章汇编语言及汇编程序设计103例题程序清单_代码段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART:MOVAX,DATAXY MOVDS,AX ;送段地址 LEASI,X ;取X的指针 MOVAL,[SI] ;将X的值送AL ANDAL,AL ;自身与,取符号标志位

JNSOTHER ;SF=0,转移到OTHER MOVY,09H ;SF=1,则X<0 JMPDONEOTHER:JNZPLUS ;ZF=0转移到PLUS MOVY,00H ;ZF=1,则X=0 JMPDONEPLUS: MOVY,01H ;SF=0,ZF=0,则X>0DONE: MOVDL,Y ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示Y的值

MOVAH,4CHINT21HCODE2ENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计41例题2022/11/11第4章汇编语言及汇编程序设计1043、循环程序

循环程序就是控制计算机反复执行一段指令序列的程序结构。非零次循环结构零次循环结构例题2022/11/10第4章汇编语言及汇编程序设计423、2022/11/11第4章汇编语言及汇编程序设计1051、统计字节数据Z的1的个数,将结果放在RESULT内。解:编写流程图例题程序清单2022/11/10第4章汇编语言及汇编程序设计432022/11/11第4章汇编语言及汇编程序设计106例题程序清单——数据段DATAXYSEGMENT XDB0FFH ;第二个程序换成-5,即0fbhRESULTDB?DATAXYENDS2022/11/10第4章汇编语言及汇编程序设计44例题2022/11/11第4章汇编语言及汇编程序设计107例题程序清单—代码段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART: MOVAX,DATAXY MOVDS,AX ;送段地址至DS XORBL,BL ;累加器BL清0

MOVCX,08H ;循环次数送CX LEASI,X ;取X的指针 MOVAL,[SI] ;取X送ALSUM:SHRAL,1 ;逻辑右移1位 JNCNONE ;CF=0,转移到NONE INCBL ;CF=1,BL+1→BLNONE: LOOPSUM MOVRESULT,BL;统计值送RESULT内存单元

MOVDL,RESULT ADDDL,30H MOVAH,02H INT21H ;系统功能调用,显示该统计数值 MOVAH,4CH INT21HCODEENDSENDSTART2022/11/10第4章汇编语言及汇编程序设计45例题2022/11/11第4章汇编语言及汇编程序设计1084、子程序一个程序中,当在不同的地方需要多次使用某段程序时,我们常将这段程序单独编写成一个程序段,称为子程序/过程。(1)子程序的定义格式(2)子程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论