




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《微机原理及应用》主讲教师2023/7/24第4章汇编语言及汇编程序设计2第四章汇编语言及汇编程序设计一、概述二、伪指令三、表达式及运算符四、宏指令五、汇编语言程序的上机过程六、汇编程序的设计过程七、汇编程序基本设计方法八、系统功能调用
例题作业2023/7/24第4章汇编语言及汇编程序设计3一、概述
汇编语言是一种面向CPU指令系统的程序设计语言。指令格式:1、标号是指该指令的符号地址,以冒号结束;2、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;2023/7/24第4章汇编语言及汇编程序设计4一、概述(续上页)3、用符号代表操作数或操作数地址。操作数是本指令执行需要的数据。
有些指令不需要指明操作数,可以默认;
有些指令需要两个操作数;
还有些操作数可以用表达式。4、注释项是可选项,用分号开始。2023/7/24第4章汇编语言及汇编程序设计5一、概述(续上页)用汇编语言编写的程序称为源程序,常用的汇编程序有ASM-86和宏汇编MASM-86。汇编语言源程序的组成部分:①可以使用CPU指令系统所提供的指令(硬指令);②可以使用各种符合汇编语法的表达式,运算符以及自行定义生成满足需要的目标代码的指令。2023/7/24第4章汇编语言及汇编程序设计61、标号8086/8088汇编语言中使用的标号必须遵循下列规则:(1)大小写字母;(2)数字0~9;(3)某些特殊字符(@,_,?)(4)第一个字符不能是数字,“?”不能单独作为标号。(5)标号的有效长度是31;
有效标号:STARTMY_PROGRAM
无效标号:MAIN%1BETA2023/7/24第4章汇编语言及汇编程序设计7二、伪指令伪指令是告诉汇编程序生成目标代码的指令语句。1、符号定义伪指令2、内存数据定义伪指令3、段定义伪指令4、段寄存器说明伪指令5、定位伪指令2023/7/24第4章汇编语言及汇编程序设计81、符号定义伪指令(1)EQU伪指令(2)等号(赋值)伪指令(3)解除符号定义伪指令2023/7/24第4章汇编语言及汇编程序设计9(1)EQU伪指令伪指令格式:<符号名>EQU<表达式>指令功能:给符号名赋值。符号名可以由程序员取定,表达式应该是可以计算得出一个具体值。例:
PORTEQU88H ;定义符号PORT代表88H
DATAEQUPORT+2 ;定义符号DATA代表 ;PORT+2注意:①用EQU定义的符号,不能重新再定义,除非用PURGE伪指令解除;②如果在表达式中用了其他符号,必须事先定义。2023/7/24第4章汇编语言及汇编程序设计10(2)等号(赋值)伪指令伪指令格式:<符号名>=<表达式>指令功能:与EQU类似,唯一的区别是“=”可以随时对符号名赋新值,而不必使用PURGE伪指令。例:PORT=88H ;定义符号PORT代表88HDATA=PORT+2 ;定义符号DATA代表PORT+22023/7/24第4章汇编语言及汇编程序设计11(3)解除符号定义伪指令伪指令格式:PURGE符号1,符号2,…指令功能:撤消用EQU赋值的符号名,以便于赋予新值。例:PURGEPORT,DATA;撤消用EQU对PORT、;DATA的赋值2023/7/24第4章汇编语言及汇编程序设计122、内存数据定义伪指令①格式:[变量]命令参数1,参数2,…
功能:数据定义语句用来分配存储单元。数据定义语句的命令有:
DB
定义字节数据
DW
定义字数据
DD
定义双字数据
DQ
定义8字节数据
DT
定义10字节数据2023/7/24第4章汇编语言及汇编程序设计132、内存数据定义伪指令②复制操作符
格式:<复制次数>DUP数据1,数据2,…
功能:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字符。
例题2023/7/24第4章汇编语言及汇编程序设计142、内存数据定义伪指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2023/7/24第4章汇编语言及汇编程序设计153、段定义伪指令格式:<段名>SEGMENT
…<段名>ENDS2023/7/24第4章汇编语言及汇编程序设计164、段寄存器说明伪指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,…]
功能:该伪指令告诉汇编程序在汇编时,各个段寄存器所对应的逻辑段基址。
注意:除了CS,所有段寄存器的实际值还必须用传送指令在执行时赋值2023/7/24第4章汇编语言及汇编程序设计175、定位伪指令①格式:
ORG<表达式>
功能:起址定位伪指令告诉汇编程序,以下的程序或数据从表达式指定的偏移地址开始存放;②格式:
EVEN
功能:偶地址定位伪指令告诉汇编程序,以下的程序或数据从偶地址开始存放。2023/7/24第4章汇编语言及汇编程序设计18三、表达式及运算符在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。表达式是由常数、寄存器、变量、标号和专用运算符组合而成。在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。1、常数、变量和标号2、表达式及运算符2023/7/24第4章汇编语言及汇编程序设计191、常数、变量和标号常数包括数值型常数和字符型常数。如:12H,1234H,’AB’变量变量代表存放在存储单元中的数据。
定义后的变量有三个属性:(1)段属性表示变量所在的逻辑段;(2)偏移量属性表示变量所在逻辑段中的偏移地址;(3)类型属性表示变量占用的存储单元数,DB、DW、DD、DQ、DT。2023/7/24第4章汇编语言及汇编程序设计201、常数、变量和标号标号是指令目标代码的符号地址。在转移指令中常用标号代替具体转移地址,标号的使用使编写汇编语言程序时,不必考虑程序汇编、连接后系统分配给指令代码的实际地址。标号同样有三个属性:(1)段属性表示指令代码所在的逻辑段;(2)偏移量属性表示指令代码所在的逻辑段中的偏移地址;(3)距离属性表示标号可作段内转移或段间转移(NEAR、FAR)。2023/7/24第4章汇编语言及汇编程序设计212、表达式及运算符表达式由操作数和运算符组成。其中,操作数可以是常数、变量、寄存器和标号。运算符包括算术运算符、逻辑运算符、关系运算符、分析运算符和属性运算符五类运算。
注意:运算符的先后次序。2023/7/24第4章汇编语言及汇编程序设计22五、汇编语言程序的上机过程建立汇编语言的环境,典型的汇编语言开发环境都包含4种工具:1、编辑程序2、汇编程序3、连接程序4、汇编程序的上机过程2023/7/24第4章汇编语言及汇编程序设计231、编辑程序(1)编辑程序是用来输入汇编语言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)汇编语言是以文本格式保存的;(3)汇编程序的源程序必须以ASM作为扩展名;(4)输入和编辑源程序时必须遵循汇编语言的语法规定。
汇编程序的基本结构
例题实际操作:编辑源程序TEST11.ASM2023/7/24第4章汇编语言及汇编程序设计24汇编程序的基本结构DATAASEGMENT
…… ;数据段内定义各类程序执行需要的相关的数据DATAAENDSSTACKASEGMENTSTACK……;根据具体程序的需要,定义堆栈段供程序执行过程;中保存临时数据STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAA MOVDS,AX ;送数据段基址
…… ;完成具体操作的指令序列CODEAENDSENDSTART2023/7/24第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 ;系统功能调用,返回操作系统
CODE1ENDSENDSTART2023/7/24第4章汇编语言及汇编程序设计262、汇编程序(1)汇编程序用来把源程序翻译成机器码,包括ASM.EXE,MASM.EXE;(2)汇编程序翻译源程序,产生一个目标代码文件,与源程序文件名相同,扩展名为OBJ。实际操作:产生目标文件TEST11.OBJ2023/7/24第4章汇编语言及汇编程序设计273、连接程序通过汇编产生的是OBJ文件是二进制目标文件,但用的是浮动地址,不能直接运行,必须用连接程序LINK.EXE连接和定位。实际操作:产生可执行文件TEST11.EXE2023/7/24第4章汇编语言及汇编程序设计284、汇编程序的上机过程实际操作演示2023/7/24第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状态code1endsendstart2023/7/24第4章汇编语言及汇编程序设计30六、汇编程序的设计过程1、分析问题确定算法2、绘制程序流程图(要求同学们从现在开始编写程序前养成先绘制流程图的习惯)3、编写代码2023/7/24第4章汇编语言及汇编程序设计31七、汇编程序基本设计方法1、简单程序
作业2、分支程序3、循环程序4、子程序2023/7/24第4章汇编语言及汇编程序设计321、简单程序
简单程序是指顺序结构程序,在程序中不包含任何转移类指令。执行时按指令的先后次序从第一条开始逐条执行,直至程序结束。
例题2023/7/24第4章汇编语言及汇编程序设计33例题1、有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。解:①编写流程图2023/7/24第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 ;系统功能调用,返回DOSCODEENDSENDSTART2023/7/24第4章汇编语言及汇编程序设计35作业P.1262、4、5、7、122023/7/24第4章汇编语言及汇编程序设计362、分支程序
分支程序就是利用转移指令,控制计算机执行某段程序或不执行某段程序。两路分支多路分支例题2023/7/24第4章汇编语言及汇编程序设计37例题1、内存中有一个8位带符号数,求其绝对值,并将结果放回原处。答:编写流程图程序清单2023/7/24第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,4CHINT21HCODE2ENDSENDSTART2023/7/24第4章汇编语言及汇编程序设计39例题2、编写程序实现函数。1(当X>0)Y=0(当X=0)9(当X<0)解:编写程序清单程序清单2023/7/24第4章汇编语言及汇编程序设计40例题程序清单_数据段DATAXYSEGMENTXDB8FH ;另外两组分别是7FH,00HYDB?DATAXYENDS2023/7/24第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,4CHINT21HCODE2ENDSENDSTART2023/7/24第4章汇编语言及汇编程序设计423、循环程序
循环程序就是控制计算机反复执行一段指令序列的程序结构。非零次循环结构零次循环结构例题2023/7/24第4章汇编语言及汇编程序设计431、统计字节数据Z的1的个数,将结果放在RESULT内。解:编写流程图例题程序清单2023/7/24第4章汇编语言及汇编程序设计44例题程序清单——数据段DATAXYSEGMENT XDB0FFH ;第二个程序换成-5,即0fbhRESULTDB?DATAXYENDS2023/7/24第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 INT21HCODEENDSENDSTART2023/7/24第4章汇编语言及汇编程序设计464、子程序一个程序中,当在不同的地方需要多次使用某段程序时,我们常将这段程序单独编写成一个程序段,称为子程序/过程。(1)子程序的定义格式(2)子程序的调用(3)编写子程序的注意事项2023/7/24第4章汇编语言及汇编程序设计47(1)子程序的定义格式格式1:子程序名PROC … RET子程序名ENDP格式2:子程序名:… RET2023/7/24第4章汇编语言及汇编程序设计48(2)子程序的调用
格式:CALL子程序名2023/7/24第4章汇编语言及汇编程序设计49(3)编写子程序的注意事项1、现场保护:保护调用子程序的现场,即保护子程序中会用到的寄存器,将这些寄存器入栈;2、功能子程序:子程序要完成的功能;3、恢复现场:为了使计算机返回到主程序调用时的状态,将入栈的数据出栈。注意顺序!例题:子程序的基本框架2023/7/24第4章汇编语言及汇编程序设计50子程序的基本框架设某一子程序中要用到寄存器BX,CX,SI,DI则:ABC: PUSHBX PRSHCX PUSHSI PUSHDI …… ;子程序的功能程序
POPDI POPSI POPCX POPBX RET2023/7/24第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
RET2023/7/24第4章汇编语言及汇编程序设计52例题1主程序_数据段_堆栈段DATAXYSEGMENTXDB0FFHSXDB?DATAXYENDS;----------------------STACKSEGMENTDW100DUP(?)STACKENDS2023/7/24第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
2023/7/24第4章汇编语言及汇编程序设计54例题2、将一字节无符号二进制数转换为两位十进制数的ASCII码值,并存放在其后的两个字节。(显示程序用子程序编写)。解:编写流程图:2023/7/24第4章汇编语言及汇编程序设计55程序——数据段data1segmentxdb2ah ;可任取<100的无符号字节数据ydb?zdb?buffdb'2ah=$'data1ends2023/7/24第4章汇编语言及汇编程序设计56代码段:code1segmentassumecs:code1,ds:data1start:movax,data1movds,axmoval,xcbwmovbl,0ahdivblmovy,almovz,ahleadx,buffmovah,09hint21hmoval,y;下接右上;上接左下calldispmoval,zcalldispjmpeenddisp:movdl,aladddl,30hmovah,02hint21hreteend:movah,4chint21hcode1endsendstart2023/7/24第4章汇编语言及汇编程序设计57思考题试编制程序将一个字数据用十六进制数的形式显示在屏幕上。2023/7/24第4章汇编语言及汇编程序设计58八、系统功能调用MS-DOS是8086/80
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年员工安全知识测试题库及答案
- 2025年检验师面试题库及解析版
- 2025年土地整治项目管理员中级考试备考资料及高频题库
- 2025年电网计算机笔试高频题解析
- 2025年经典旅游案例教学及竞赛模拟题库
- 2025年建筑水电安装工程师执业资格考试试题及答案解析
- 2025年机关幼儿园招聘面试预测题
- 2025年会展策划专家资格考试试题及答案解析
- 2025年化工工程师职业能力评估试题及答案解析
- 2025年安全员C证考试强化训练题含答案
- 设备搬迁调试协议合同书
- 中证信息技术笔试题库
- 监护学徒协议书范本
- 办公楼维修改造施工方案
- 集团海外业务管理手册(专业完整格式模板)
- 高危儿培训计划和方案
- 2025年公文写作基础知识竞赛试题库及答案(共120题)
- ISO9001 质量管理体系全套(质量手册+程序文件+表格记录全套)
- 路灯CJJ检验批范表
- 肛肠科年度汇报总结
- 鸡蛋合作合同范本
评论
0/150
提交评论