




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 用指令助记符、标号、寄存器名、数字等符号构成的编写程序的语言叫汇编语言。汇编语言是机器语言的表示,它比机器语言好读,比高级语言占用的内存少、执行速度快。因此汇编语言总是程序设计的重要手段。 第七章 汇编语言程序设计17.1 概述用汇编语言编写的程序叫汇编语言程序,简称源程序。机器语言程序称目标程序。 将源程序翻译成目标程序的过程叫做汇编。2上机环境硬件系统软件应用软件操作系统:DOS系统编辑器: EDIT.exe 汇编程序: MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe用户开发的程序:ABC.exe等CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备3D:
2、EDIT ABC.asmD:MASM ABC; 有语法错,回EDIT下改该程序D:LINK ABC; 有错,回在EDIT下改程序D:ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。D:DEBUG ABC.exe 汇编语言上机过程4编辑源程序EDIT ABC.ASM汇编源程序MASM ABC.ASM形成目标程序ABC.OBJ连接目标程序LINK ABC.OBJ形成可执行程序ABC.EXE运行程序用DEBUG调试5 伪指令是汇编语言程序中的指示性语句,它体现程序员的汇编意图,其作用是在源程序汇编时指导汇编程序汇编,而本身不会产生目标代码和占用内存。 伪指令的具体功能是向汇编程
3、序提供下列信息:如何分段、段的定义和说明,段间关系,模块的定义和说明以及模块间的关系,数据的定义,开始汇编和结束汇编等。7.2 伪指令(指示性语句)6指令性语句是用指令系统中的指令构成的语句。 例 MOV AX, BX指示性语句是指示汇编程序进行汇编的操作。 例 MOV AX, 4 + 8 中的+ code SEGMENT 中的SEGMENT MOV BX, OFFSET string 中的OFFSET指示性语句与指令性语句:7 一个程序经汇编,连接和装入内存后,在执行程序之前: 指示性语句的功能已经完成,故又称伪指令。 而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。 指示性语句与
4、指令性语句区别8 1、等值语句: 格式 符号名 EQU 表达式 作用是用符号名等值指定的表达式。其中表达式可以是任何有效的操作数,汇编时用语句中的表达式代替程序中符号所在的地方。 应用:1. 定义符号常量,方便修改程序。2. 某表达式多次出现时,用等值伪指令可以方便编程。一、符号定义伪指令9例如:EMP EQU 8 COUNT EQU EMP+6 2、等号语句: 格式 符号名 = 表达式 作用是用符号名等值指定的表达式, 用“=”定义的符号名可重新定义。 例如: NMU=6 NMU=NMU+610 格式 变量名 助记符 操作数 ,操作数 , . 用来定义程序中所用的内存操作数。 其中变量名指示
5、内存操作数的地址(符号地址); 助记符指示内存操作数的类型(字节、字、双字等) ; 操作数指示内存操作数的内容。二、数据定义伪指令11 格式 变量名 助记符 操作数 ,操作数 , . 常用的类型助记符有:DB 指示其后的操作数为字节类型DW 指示其后的操作数为字类型DD 指示其后的操作数为双字类型DQ 指示其后的操作数为八字节类型DT 指示其后的操作数为十字节类型二、数据定义伪指令12例:DATA-BYTE DB 10,4,10H DATA-WORD DW 100,100H,5H DATA-DW DD 6+20,0FFFDH数据定义伪指令中的表达式也可以是字符串如:MESSDBABCD 数据定
6、义伪指令的表达式中会出现“?”数据项 , ABC DB ?, ?, DEF DW ?,50, ? 这时汇编程序会对“?”数据项保留相应的存储空间,而不存入数据。 130AH04H10HDATA-BYTE64H00HDATA-WORD00H01HFBHFFH1AH00H00H00HDATA-DW100100H-52614MESS41H42H43H44HABCDEF32H注意:3个及其以上的字符, 只能用DB定义15可用 DUP 复制操作符定义相同的操作数,其格式为 重复次数 DUP( 操作数) 例 EE DB 3 DUP ( 4 ) 等价于EE DB 4, 4, 4例:ED DB 10 DUP
7、(?) 相当于定义10个空单元。16格式 段名 SEGMENT 定位类型组合类型类别 、 、 段名 ENDS 段定义由伪操作SEGMENT开始、ENDS结束。 其中: SEGMENT 和ENDS 必须成对出现,且语句前必须有段名,段名必须相同。 SEGMENT和ENDS语句之间可以有指令和其他伪操作, 表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理 程序中可以定义多个段。 程序经汇编、连接及装入内存后,段名为一具体的段值。三、段定义伪操作17AA SEGMENT ;数据段1 str1 DB Hello! AA ENDSBB SEGMENT ;数据段2 str2 DB 6 dup (
8、?) BB ENDSCC SEGMENT ;代码段 ASSUME CS:CCASSUME DS: AA, ES: BB start: CLD MOV AX , AA MOV DS , AX LEA SI , str1 MOV AX , BB MOV ES , AX LEA DI , str2 MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H CC ENDS END start数据传送源程序:18 定位类型、组合类型和类别说明段的属性,它们用方括号括起来表示可以缺省。若不缺省,各项排序不能错,项与项要用空格分开。 定位类型有四种: PAGE (页)型要求该段物理
9、地址低8位全为0 PARA (节)型要求该段物理地址低4位全为0 WORD 型要求该段物理地址码为偶数(最低位为0) BYTE型该段的物理地址可为任意值。 组合类型说明本段与其它段的关系。 类别它可以是任何合法的名称。19格式 ASSUME 段寄存器:段名 , 段寄存器:段名, 其中 段寄存器为CS、DS、ES、SS中的一个 段名为用伪操作SEGMENT定义过的段名例 ASSUME CS: CC , DS:AA四、段寄存器说明ASSUME伪指令20 ASSUME 伪操作的作用 指示汇编程序指令中用到的标号、过程及变量所在的段。 其中 对标号、过程必须用 CS 段寄存器指示,对变量可用 CS、D
10、S、ES、SS 段寄存器指示。 若未用ASSUME语句指示指令中用到的标号、过程和变量所在的段, 汇编程序将给出错误信息。 ASSUME语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。21例 用程序实现 1234H + 5678Hdata SEGMENT value DW 1234H, 5678H result DW ? data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data ;给DS赋值 MOV DS, AX MOV AX, value
11、 ;取数 ADD AX, value+2 ;两数相加 MOV result, AX ;保存结果 MOV AH, 4CH ;返回DOS INT 21H code ENDS END start12H34H78H56Hvalueresult22 格式 过程名 PROC 类型 、 过程名 ENDP 过程定义由伪操作PROC开始、ENDP结束。 其中: PROC 和ENDP 必须成对出现, 且语句前必须有过程名,过程名必须相同。 PROC和ENDP语句之间为子程序的指令序列。 程序中可以定义多个过程。五、过程定义伪操作23 程序经汇编、连接及装入内存后,过程名为一具体的内存地址,指示子程序入口。过程名常
12、用作CALL调用指令的操作数, 子程的最后安排RET返回指令,使执行完子程后能返回调用处。过程有两种类型:NEAR和FAR 无类型项时,默认为NEAR类型。 当过程与调用指令不在同一段时,应将过程定义为 FAR 类型。过程类型决定子程中RET的返回类型24 例1 display PROC 、 、 、 RET ;NEAR 属性的过程对应段内返回 display ENDP例2 display PROC FAR 、 、 、 RET ;FAR属性的过程对应段间返回 display ENDP251、NAME 和 TITLE 伪操作 格式: NAME 模块名 格式: TITLE 模块名 在源程序开始可用
13、NAME 或 TITLE 为模块命名,模块名的作用是指示给连接程序进行连接用。 源程序中可无模块定义,此时源文件名作为模块名。 六、模块定义和程序结束伪操作26 格式: END 启动地址作用是指示源程序到此结束。汇编程序对 END 之后的语句不进行处理。程序中所有有效语句应放在 END 语句之前。 源程序中必须有 END 结束语句。 汇编程序对无 END 语句的源程序不进行处理, 只给出无 END 语句错误信息。 2、END伪操作27 格式: ORG 数值表达式 其功能是指定其后的程序或数据块起始地址 的偏移量。数值表达式的值是一个无符号数。 七、定位伪指令 例: ORG 1000H DATA
14、 SEGMENT 28包括:TYPE,LENGTH,SIZE,SEG, OFFSET。 把一些特征或存贮器地址的一部分作为数值回送。八、数值回送操作符:29 TYPE格式:TYPE variable 回送该变量的以字节数表示的类型。(DB为1,DW为2,DD为4,DQ为8,DT为10)或 label 标号,回送标号类型数值(NEAR为,FAR为2) 例:ARRAY DW 1,2,3 ADD SI,TYPE ARRAY汇编程序其形式: ADD SI,230格式: LENGTH variable 对于变量中使用DUP汇编回送分配给变量项数,其他情况回送1。例:FESS DW 100 DUP(0)
15、对于 MOV CX,LENGTH FESS汇编程序将其形式: MOV CX,100其他情况,回送1。 LENGTH31例:ARRAY DW 1,2,3对于指令 MOV CX,LENGTH ARRAY汇编程序将使其形式为:MOV CX,1例:TABLE DB ABCD对于指令 MOV CX,LENGTH TABLE汇编程序使其形式为:MOV CX,1 LENGTH(续)32格式:SIZE variable回送分配给该变量的字节数LENGTH*TYPE例:FEES DW 100 DUP(0) MOV CX,SIZE ARRAY将形成:MOV CX,200 SIZE33例:TABLE DBABCD
16、MOV CX,SIZE TABLE将形成 MOV CX,1例:ARRAY DW 1,2,3MOV CX,SIZE ARRAY形式 MOV CX,2 LENGTH*TYPE=2 SIZE(续)34 TYPE变量的返回值是类型的字节数: DB为1,DW为2,DD为4,DQ为8,DT为10 TYPE标号的返回值是: NEAR为-1,FAR为-2。 LENGTH变量返回DUP分配的项数,对于其他情况则返回1。 SIZE返回值是: LENGTH和TYPE值的乘积,即变量的字节数。 小结:35 SEG 取符号地址的段地址 例 MOV AX , SEG yy OFFSET 取符号地址的偏移地址 例 MOV
17、BX , OFFSET yy SEG(OFFSET)36SEG、OFFSET只能对符号地址操作MOV AX, SEG BXMOV BX, OFFSET SI 注意:37一、概述 (一) 判断程序质量的标准 简明、易读、易维护。 速度快、执行时间短。 占用内存空间小。7.4汇编语言程序设计38 1.编写程序主体。 分析问题,建立模型,确定算法。 按算法画出程序流程图。 按流程图编写程序。(二) 编写汇编语言程序步骤39 2.分配内存空间,编写汇编程序。 分配内存空间,规划必要的区段。 编写完整的汇编语言程序。(二) 编写汇编语言程序步骤 3.调试、优化。 检查源程序,优化结构。 上机运行,调试。
18、40 顺序结构分支结构循环结构 子程序结构(三)几种程序结构41顺序结构42两个分支YN 、 CMP AL, BL JG great JMP exitgreat: exit: 、 、 ALBL处理ALBL处理分支结构43三个分支 、 CMP AL, 0 JG great JL less JMP exitless: JMP exitgreat: exit: 、AL=0处理AL0处理AL0处理YYNN分支结构44循环结构当型循环(当条件成立进入循环)循环初始设置循环体循环条件判断?YN直到型循环(直到条件成立退出循环)YN循环初始设置循环体循环条件判断?45 多处调用完成同一功能的子程序:code
19、 SEGMENTstart: 、 CALL sub 、 CALL sub 、 CALL sub 、 MOV AH, 4CH INT 21Hsub PROC 、 、RETsub ENDPcode ENDSEND start子程序结构46例:试设计一个对两个32位二进制数相加的程序。设被加数2A3B078EH和加数4C508F55H从数据段的BGS单元(令BGS=2000H)开始依次存放,要求将两数和放在加数之后。 分析:这是一个简单的加法问题,因为数据不长,可采用顺序程序设计方法。 因为是两个32位数相加,应先加低16位,再加高16位,加高16位时还要考虑低16位相加产生的进位,应选用带进位加法
20、指令。还要注意,多字节数在内存是放在连续的存储单元中,且高字节放高地址单元,低字节放低地址单元。 二、汇编语言程序设计举例47内存单元分配如下:BGS=2000H8EH07H3BH2AH55H8FH50H4CH被加数加数和48DATA SEGMENT ORG 2000HBGS DD 2A3B078EH,4C5D8F55H DD ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV BX,BGS49 MOV AX,BX MOV BX,BGS+4 ADD AX,BX MOV BX
21、,BGS+8 MOV BX,AX MOV BX,BGS+2 MOV AX,BX MOV BX,BGS+6 ADC AX,BX MOV BX,BGS+10 MOV BX,AX低4位高4位50 MOV AH,4CH INT 21HCODE ENDS END START返回DOS 同一问题,若数据很长,或采用字节加法,则重复很多次,可考虑采用循环程序设计方法:DATA SEGMENT ORG 2000HBGS DB 8EH, 07H, 3BH, 2AH DB 55H, 8FH,5DH, 4CH DB 4 DUP( ?)DATA ENDS51CODE SEGMENT ASSUME CS:CODE,DS
22、:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV CX,4 CLC MOV SI,BGS LOOP1:MOV AX,SI ADC AX,SI+4 MOV SI+8,AX 一次加法52 INC SI LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START53 例:已知从内存10000H单元开始连续存放着大小不同的两个16位二进制无符号数X1和X2。试设计一个程序,将其中的大数放到10050H单元,小数放到10052H单元。 解:显然,这是一个双分支程序。 根据比较结果(CF标志)用条件转移指令实现分支。 X1L
23、X1HX2LX2H10000H10050H大数小数54DATASEGMENT ORG0000HMAD DW X1,X2 ORG 0050HMAX DW2DUP (?)DATAENDSCODESEGMENT ASSUMECS:CODE, DS:DATASTART:MOVAX,DATAMOV DS,AXMOVAX, 0000H55 MOVBX, 0002H CMPAX,BX JNCLOP1 MOVMAX, BX MOVMAX+2,AXLOPT: MOV AH,4CH INT 21HLOP1: MOVMAX,AX MOVMAX+2,BX JMPLOPTCODE ENDS END START56例 将
24、寄存器BX中的内容以十六进制形式显示出来。(二进制 十六进制) 有关字符、数码转换的处理1. 计算机处理字符时,常用的字符编码是ASCII 码。2. 数字和字母的ASCII码是一个有序序列数字09 : 30H 39H大写字母AZ : 41H 5AH小写字母az : 61H 7AH57 3.计算机处理信息时,其对象都是二进制数。 外设(显示器、打印机、键盘等) 用ASCII码与CPU进行信息传送。例如: 1) 在键盘上按下某一字符键 (如9),键盘接口向键盘缓冲区送去的是该字符的ASCII码(如39H),不是送数字09H。 2) 在文本方式下,要在显示器上显示某一字符(如A), 须将该字符的AS
25、CII码(如41H)送显示缓冲区, 不是送数字0AH。 计算机要利用显示器、键盘等外设时, 须据程序设计的需要进行有关转换。58例1 将BX寄存器中的内容以十六进制形式显示出来。 BX是一个16位寄存器二进制 1010 1001 0011 1110 用十六进显示时,每4位用一个字符显示,共4个其中 0000 0 30H , 1010 A 41H 0001 1 31H , 1011 B 42H 、 、 1001 9 39H , 1111 F 46H?十六进制 A 9 3 E 屏幕上的显示 A 9 3 E 对应的ASCII 41H 39H 33H 45H59算法: 取出要显示的某4位,转换为对应的
26、ASCII码,再调用DOS系统功能进行显示。1) 对于00001001(09), 先扩展成一个字节,高4位清0, 加上30H后, 即可得字符09对应的ASCII码。 0000 0001B + 30H= 31H ; 0000 1001B + 30H=39H 0001B 1 1001B 9 2) 对于10101111(AF), 先扩展成一个字节,高4位清0,加上30H后, 还要再加上07H,才能得到AF 对应的ASCII码 0000 1010B+30H+07H = 41H 1010B A 0000 1111B+30H+07H =46H 1111B F60CODE SEGMENT ASSUME CS
27、:codestart: MOV CH, 4 ;字符个数 MOV CL, 4 ;循环移位次数 next: ROL BX, CL ;取显示位的值 MOV DL, BL ;保存在DL中 AND DL, 0FH ;清除高4位 ADD DL, 30H ;转变为数字的ASCII CMP DL, 39H ;大于39H, 则应转变 JLE print ;为字母AF的ASCII ADD DL, 07H 61print: MOV AH, 02H ;显示DL中的字符 INT 21H DEC CH ;显示结束? JNZ next MOV AH, 4CH ;返回DOS INT 21HCODE ENDS END star
28、t62编程将CPU内SP、BP、SI、DI4个16位寄存器当前的内容分别用十六进制形式显示出来。 要点: 将上例改写为一个子程,入口参数为BX 子程中注意寄存器值的保存和恢复 注意CS 、IP、PSW寄存器值的获取方法63CODE SEGMENT ASSUME CS:CODEstart: MOV BX, SP ;显示SP CALL LISTBX MOV BX, BP ;显示BP CALL LISTBX MOV BX, SI ;显示SI CALL LISTBX MOV BX, DI ;显示DI CALL LISTBX MOV AH, 4CH ;返回DOS INT 21H64LISTBX PROC
29、 PUSHF ;保存寄存器 MOV CH, 4 MOV CL, 4next: ROL BX, CL MOV DL, BL AND DL, 0FH ADD DL, 30H CMP DL, 39H JLE print ADD DL,07Hprint:MOV AH,02H ; 输出字符 INT 21H DEC CH JNZ next MOV DL, 20H ; 显示空格符 MOV AH, 02H INT 21H RET ;子程返回LISTBX ENDPCODE ENDEND start 65 子程与主程的参数传送:用寄存器传送用定义的变量传送3) 利用地址表传送4) 用堆栈传送66 一、概述 : 例
30、:编写完整汇编语言程序,要求:清屏,显示“ Hello China!”方法:将0AH功能输入的字符串, 用09H功能显示出来。 结果如下:data SEGMENTmax DB 12,?,4 DUP(?)string DB Hello World! ,$data ENDS7.7 DOS功能调用67code SEGMENTASSUME CS:code, DS:datastart: MOV AX, data ; 置缓冲区地址于DS:DXMOV DS, AXLEA DX, maxMOV AH, 0AH ; 调用0AH输入功能INT 21HLEA DX, stringMOV AH, 09H ; 调用09
31、H显示功能INT 21HMOV AH, 4CH INT 21H ;返回DOScode ENDSEND start68 PCDOS是IBM PC微型计算机的磁盘操作系统。它为用户提供了许多命令,也有80多个子程序可供用户调用。这些子程序的功能主要是实现对存储器和基本I/O设备的管理等。为了便于调用将所有子程序顺序编号,如PC DOS2.0有87个子程序,编号从0开始到57H。 用户编程原则:尽可能使用DOS的系统功能调用,提高程序可移 植性。在DOS功能不能实现情况下,考虑用BIOS功能调 用。在DOS和BIOS的中断子程不能解决问题时,使用 IN/OUT指令直接控制硬件。691. 调用方法 D
32、OS系统功能调用是一种内部中断方式,它是通过INT 21H指令进入功能调用,再通过功能号进入具体子程序。 需要三个语句: 将入口参数送指定寄存器 将功能号(057H)送AH寄存器 使用内部中断指令:INT 21H70设置入口参数在AH设置功能号m执行中断指令INT N分析、应用出口参数1. 调用方法71使用DOS功能调用还要注意下列问题:(1)从键盘输入的字符由系统自动转换为ASCII码,在进行数据处理时要特别注意;(2)需要在屏幕上显示的字符要在程序中将其转换为ASCII码。 2、DOS功能调用要注意的问题721. 显示单字符 ( 02H功能 )入口参数 DL = 要显示字符的ASCII 码
33、 功能号 AH=02H类型号 INT 21H出口参数 无实现功能 显示指定字符,光标随动。例 显示字符A MOV DL, A MOV AH, 02H INT 21H二、DOS系统功能调用 (21H类型中断调用)73入口参数 定义要显示的字符串,字符串尾 应为$,作为结束显示的标志。 DS : DX = 字符串的首地址功能号 AH = 09 H类型号 21H出口参数 无实现功能 显示字符串,遇 $ 停止显示,光 标随动。2. 显示字符串 ( 09H功能 )74例 编程显示字符串 Tsinghua Universitydata SEGMENT ;定义显示的子符串stri DB Tsinghua University, $data ENDScode SEGMENT ASSUME CS:code, DS:datastart: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;调显示功能 INT 21H MOV AH, 4CH ;返回DOS INT 21H code ENDS END start75 入口参数 无 功能号 AH = 01H 类型号 21H 出口参数 AL = 键入字符的ASCII码 实现功能 等待从键盘输入一个字并在屏 幕上回显,光标移动, 检测 Ctrl-Break键3.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年HDTV彩色显像管及其材料和部件合作协议书
- 佛山国五道路施工方案
- 2024-2025学年下学期高一语文第四单元B卷
- 科学合理施用肥料对农产品质量的影响及高效解决措施研究
- 专项施工方案评审
- 智研咨询发布:中国海缆敷设船行业市场发展环境及前景研究报告
- 新未来大学英语 视听说教程1(智慧版) 听力脚本 Unit 6
- 新课标下高中生物生活化教学策略研究
- 江西省赣州市2024-2025学年高一上学期1月期末考试政治试题2
- 高考物理一轮复习课时跟踪检测(三十一)磁场的描述磁场对电流的作用(重点高中)
- 新版(七步法案例)PFMEA
- 临床护理重点专科建设项目评审标准
- 新苏教版科学五年级下册全套教学课件
- 审计部组织架构及岗位设置
- 流行性乙型脑炎PPT课件
- 深圳市轨道交通线网规划(2016_2035)(草案)
- 400V电缆分支箱生产实用工艺流程
- 四十二式太极剑剑谱
- 完整解读2021年《建设工程抗震管理条例》PPT教学讲座课件
- 新版小学英语PEP四年级下册教材分析(课堂PPT)
- 食用植物油生产许可证审查细则.doc
评论
0/150
提交评论