汇编语言及汇编程序设计优秀PPT.ppt

上传人:石*** 文档编号:78737394 上传时间:2023-03-19 格式:PPT 页数:114 大小:4.51MB
返回 下载 相关 举报
汇编语言及汇编程序设计优秀PPT.ppt_第1页
第1页 / 共114页
汇编语言及汇编程序设计优秀PPT.ppt_第2页
第2页 / 共114页
点击查看更多>>
资源描述

《汇编语言及汇编程序设计优秀PPT.ppt》由会员分享,可在线阅读,更多相关《汇编语言及汇编程序设计优秀PPT.ppt(114页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、汇编语言及汇编程序设计汇编语言及汇编程序设计你现在浏览的是第一页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计2一、概述一、概述 汇编语言是一种面向汇编语言是一种面向CPU指令系统的程序设计语指令系统的程序设计语言。指令格式言。指令格式:1 1、标号标号是指该指令的符号地址,以冒号结束;是指该指令的符号地址,以冒号结束;2 2、用助记符表示操作码,是指令名称的代表符号,是语句、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;中的关键字,不可缺省;你现在浏览的是第二页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计

2、汇编语言及汇编程序设计3一、概述一、概述(续上页续上页)3、用符号代表操作数或操作数地址。、用符号代表操作数或操作数地址。操作数是本指操作数是本指令执行需要的数据。令执行需要的数据。有些指令不需要指明操作数,有些指令不需要指明操作数,可以默认;有些指令需要两个操作数;还有些操作数可以默认;有些指令需要两个操作数;还有些操作数可以用表达式。可以用表达式。4、注释项是可选项,用分号开始。、注释项是可选项,用分号开始。你现在浏览的是第三页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计4一、概述一、概述(续上页续上页)用汇编语言编写的程序称为源程序,常用的汇编

3、用汇编语言编写的程序称为源程序,常用的汇编程序有程序有ASM-86和宏汇编和宏汇编MASM-86。汇编语言源程序的组成部分汇编语言源程序的组成部分:可以使用可以使用CPU指令系统指令系统所提供的指令所提供的指令(硬指令硬指令);可以使用各种可以使用各种符合汇编语法符合汇编语法的表达式,的表达式,运算运算符以及自行定义生成满足需要的目标代码的指令。符以及自行定义生成满足需要的目标代码的指令。你现在浏览的是第四页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计51、标号、标号 8086/8088汇编语言中使用的标号必须遵循下列汇编语言中使用的标号必须遵循下列

4、规则:规则:(1)大小写字母;大小写字母;(2)数字数字09;(3)某些特殊字符(某些特殊字符(,_,?)(4)第一个字符不能是数字,第一个字符不能是数字,“?”不能单独作为标不能单独作为标号。号。(5)标号的有效长度是标号的有效长度是31;有效标号有效标号:START MY_PROGRAM 无效标号无效标号:MAIN%1BETA你现在浏览的是第五页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计6二、伪指令二、伪指令 伪指令是告诉汇编程序生成目标代码的指令语伪指令是告诉汇编程序生成目标代码的指令语句。句。1、符号定义伪指令符号定义伪指令 2、内存数据定

5、义伪指令内存数据定义伪指令 3、段定义伪指令段定义伪指令 4、段寄存器说明伪指令段寄存器说明伪指令 5、定位伪指令定位伪指令 6、子程序伪指令子程序伪指令你现在浏览的是第六页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计71、符号定义伪指令、符号定义伪指令 (1)EQU伪指令伪指令 (2)等号等号(赋值赋值)伪指令伪指令 (3)解除符号定义伪指令解除符号定义伪指令你现在浏览的是第七页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计8(1)EQU伪指令伪指令伪指令格式伪指令格式:EQU 指令功能指令功能:给符号名赋

6、值。符号名可以由程序员取给符号名赋值。符号名可以由程序员取定,定,表达式应该是可以计算得出一个具体值。例表达式应该是可以计算得出一个具体值。例:PORT EQU 88H;定义符号;定义符号PORT代表代表88H DATA EQU PORT+2;定义符号;定义符号DATA代表代表;PORT+2注意注意:用用EQU定义的符号,不能重新再定义,除非用定义的符号,不能重新再定义,除非用PURGE伪指令解除;伪指令解除;如果在表达式中用了其他符号,必须事先定义。如果在表达式中用了其他符号,必须事先定义。你现在浏览的是第八页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程

7、序设计9(2)等号等号(赋值赋值)伪指令伪指令伪指令格式伪指令格式:=指令功能指令功能:与与EQU类似,唯一的区别是类似,唯一的区别是“=”可以可以随时对符号名赋新值,随时对符号名赋新值,而不必使用而不必使用PURGE伪指令。伪指令。例例:PORT=88H;定义符号;定义符号PORT代表代表88HDATA=PORT+2;定义符号;定义符号DATA代表代表PORT+2你现在浏览的是第九页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计10(3)解除符号定义伪指令解除符号定义伪指令伪指令格式伪指令格式:PURGE 符号符号1,符号符号2,指令功能指令功能:撤

8、消用撤消用EQU赋值的符号名,赋值的符号名,以便于赋予以便于赋予新值。新值。例例:PURGE PORT,DATA;撤消用;撤消用EQU对对PORT、;DATA的赋值的赋值你现在浏览的是第十页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计112、内存数据定义伪指令、内存数据定义伪指令格式格式:变量变量 命令命令 参数参数1,参数参数2,功能功能:数据定义语句用来分配存储单元。数据定义数据定义语句用来分配存储单元。数据定义语句的语句的命令命令有有:DB 定义字节数据定义字节数据 DW定义字数据定义字数据 DD定义双字数据定义双字数据 DQ定义定义8字节数据

9、字节数据 DT定义定义10字节数据字节数据你现在浏览的是第十一页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计122、内存数据定义伪指令、内存数据定义伪指令复制操作符复制操作符 格式格式:DUP 数据数据1,数据,数据2,功能功能:汇编程序把所定义的数据按先后次序连续:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字分配存储空间,所起的名称只代表第一个单元的字符。符。例题例题你现在浏览的是第十二页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计132、内存数据定义伪指令、内存数据定

10、义伪指令例例:VAR1 DB 32H,ABCVAR2 DW 1234H,40H,AB DD 12345678H DB?,11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,(?,1)你现在浏览的是第十三页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计143、程序分段伪指令、程序分段伪指令 段定义伪指令的用途是在汇编语言程序中定义逻辑段,用段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。类别。常用的段定

11、义伪指令有常用的段定义伪指令有 SEGMENT/ENDS 和和 ASSUME等。等。(1)段定义伪指令)段定义伪指令 SEGMENT/ENDS格式格式:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名 ;本段程序内容;本段程序内容(指令语句或伪指令语句指令语句或伪指令语句)段名段名 ENDS段名为所定义段的名称或标识符段名为所定义段的名称或标识符你现在浏览的是第十四页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计15段定义由伪指令段定义由伪指令SEGMENT开始开始、ENDS结束结束。n其中:SEGMENT 和ENDS 必须成

12、对出现,n 且语句前必须有段名,段名必须相同。SEGMENT和和ENDS语句之间可以有指令和其他伪语句之间可以有指令和其他伪操作操作,表示存放在该段内存的变量、指令或其他伪操作表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理对该段内存的处理 程序中可以定义多个段。程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的程序经汇编、连接及装入内存后,段名为一具体的段值。段值。你现在浏览的是第十五页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计16定位类型定位类型 PAGE:表示相应的段必须从某一页(256个字节)的边界开始。PAGE=

13、0000 0000BPARA:表示段的起点是从存储器中的某一个节的边界开始。PARA=0000B WORD:表示段的起点可以从任何一个字的边界(偶地址)开始。WORD=0BBYTE:表示段的地址可以从存储器的任何地址开始。BYTE=B组合类型 PUBLIC:依次连接。COMMON:从相同的地址开始,具有同样的段地址。AT表达式:相应段定位在由表达式求值得到的节边界地址上。STACK:与PUBLIC方式相同,但仅用于堆栈段。MEMORY:装在被连接的其它段之上你现在浏览的是第十六页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计17源程序模块的段定义示例源

14、程序模块的段定义示例 :STACKSEGSEGMENT PARA STACK STACK ;;定义堆栈段STACKSEGENDS ;DATASEGSEGMENT;定义数据段DATASEG ENDS ;EXTRASEG SEGMENT;定义附加数据段EXTRASEG ENDS;CODESEG SEGMENT;START:定义代码(即指令)段CODESEG ENDS;END START;源程序模块结束 你现在浏览的是第十七页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计18(2)段寄存器说明伪指令 ASSUMEn格式:ASSUME 段寄存器:段名 ,段寄存

15、器:段名,n 其中 段寄存器为CS、DS、ES、SS中的一个n 段名为用伪操作SEGMENT定义过的段名n例 ASSUME CS:cc,DS:aa ASSUME 伪操作的作用 指示汇编程序指令中用到的标号、过程及变量所在的段。其中 对标号、过程必须用 CS 段寄存器指示 对变量可用 CS、DS、ES、SS 段寄存器指示你现在浏览的是第十八页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计19若未用若未用ASSUME语句指示指令中用到的标号、语句指示指令中用到的标号、过程和变量所在的段过程和变量所在的段,汇编程序将给出错误信息。汇编程序将给出错误信息。AS

16、SUME语句只起指示作用,并无实际的操作。语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如需按寻址方式用传送指令(如MOV)给相应的段寄)给相应的段寄存器赋值。存器赋值。你现在浏览的是第十九页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计20data SEGMENT value DW 1234H,5678H result DW?data ENDS code SEGMENT ASSUME CS:code,DS:data start:MOV AX,data ;给给DS赋

17、值赋值 MOV DS,AX MOV AX,value ;取数取数 ADD AX,value+2 ;两数相加两数相加 MOV result,AX ;保存结果保存结果 MOV AH,4CH ;返回返回DOS INT 21H code ENDS END start例例 用程序实现用程序实现 1234H+5678H你现在浏览的是第二十页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计21程序中有程序中有ASSUME语句,经汇编,连接和装入内存后的情况:语句,经汇编,连接和装入内存后的情况:data SEGMENT value DW 1234H,5678H res

18、ult DW?data ENDS code SEGMENT ASSUME CS:code,DS:data start:MOV AX,data ;给给DS赋值赋值 MOV DS,AX MOV AX,value ;取数取数 ADD AX,value+2 ;两数相加两数相加 MOV result,AX ;保存结果保存结果 MOV AH,4CH ;返回返回DOS INT 21H code ENDSD:MASMDEBUG assume.exe-R ;查看程序执行前各寄存器查看程序执行前各寄存器AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000

19、DI=0000DS=1295 ES=1295 SS=12A5 CS=12A6 IP=0000 NV UP EI PL NZ NA PO NC12A6:0000 B8A512 MOV AX,12A5-U ;查看在内存的程序查看在内存的程序12A6:0000 B8A512 MOV AX,12A512A6:0003 8ED8 MOV DS,AX12A6:0005 A10000 MOV AX,0000 12A6:0008 03060200 ADD AX,0002 12A6:000C A30400 MOV 0004,AX12A6:000F B44C MOV AH,4C12A6:0011 CD21 INT

20、 21、你现在浏览的是第二十一页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计224、过程定义伪指令 PROC/ENDP 在在程程序序设设计计中中,经经常常将将一一些些重重复复出出现现的的语语句句组组定定义义为为子子程程序序。子子程程序序又又称称为为过过程程,可以采用,可以采用CALL指令来调用。指令来调用。使用格式:使用格式:过程名 PROC NEAR/FAR (语句系列)(语句系列)RET (语句系列)(语句系列)过程名 ENDP 调用一个过程的格式为:调用一个过程的格式为:CALL 过程名 你现在浏览的是第二十二页,共114页2022/10/19

21、第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计23 过程过程定义由伪指令定义由伪指令 PROC开始、开始、ENDP结束结束。其中:其中:PROC 和和 ENDP 必须成对出现必须成对出现,且语句前必须有过程名,且语句前必须有过程名,过程名必须相同过程名必须相同。PROC和和ENDP语句之间为子程序的指令序列。语句之间为子程序的指令序列。程序中可以定义多个过程。程序中可以定义多个过程。程程序序经经汇汇编编、连连接接及及装装入入内内存存后后,过过程程名名为为一一具具体体的的内内存存地地址址,指示子程序入口。指示子程序入口。你现在浏览的是第二十三页,共114页2022/10/19第第4章章

22、 汇编语言及汇编程序设计汇编语言及汇编程序设计24过程名常用作过程名常用作CALL调用指令的操作数调用指令的操作数,子程的最后安排子程的最后安排RET返回指令,使执行完子程后能返回调用处返回指令,使执行完子程后能返回调用处。过程有两种类型:过程有两种类型:NEAR和和FAR 无类型项时,无类型项时,默认为默认为NEAR类型类型。当过程与调用指令不在同一段时,应将过程定义为当过程与调用指令不在同一段时,应将过程定义为 FAR 类型。类型。过程类型决定子程序中过程类型决定子程序中RET的返回类型的返回类型你现在浏览的是第二十四页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编

23、语言及汇编程序设计25例例1 display PROC 、C3H 、RET ;NEAR 属性的过程对应段内返回属性的过程对应段内返回 display ENDP例例2 display PROC FAR 、CBH 、RET ;FAR属性的过程对应段间返回属性的过程对应段间返回 display ENDP你现在浏览的是第二十五页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计26启动地址可是一个标号或过程名启动地址可是一个标号或过程名,指示程序的入口。指示程序的入口。程序装入内存后,系统跳转到入口处程序装入内存后,系统跳转到入口处,开始执行程序。开始执行程序。a

24、a SEGMENT ;数据段数据段1 str1 DB Hello!aa ENDSbb SEGMENT ;数据段数据段2 str2 DB 6 dup(?)bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:cc ASSUME DS:aa,ES:bb start:CLD MOV AX,aa MOV DS,AX LEA SI,str1 MOV AX,SEG str2 MOV ES,AX MOV DI,OFFSET str2 MOV CX,6 REP MOVSB MOV AH,4CH INT 21H cc ENDS END start D:masmDEBUG hello.exe-U

25、 :查看代码段查看代码段129F:0000 FC CLD129F:0001 B89D12 MOV AX,129D129F:0004 8ED8 MOV DS,AX129F:0006 8D360000 LEA SI,0000129F:000A B89E12 MOV AX,129E129F:000D 8EC0 MOV ES,AX129F:000F BF0000 MOV DI,0000129F:0012 B90600 MOV CX,0006129F:0015 F3 REPZ129F:0016 A4 MOVSB129F:0017 B44C MOV AH,4C129F:0019 CD21 INT 21、-

26、D 129d:0 l10 ;查看数据段查看数据段1的内容的内容129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.-D 129e:0 l10 ;查看数据段查看数据段2的内容的内容129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-你现在浏览的是第二十六页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计275 5、模块定义和程序结束伪操作、模块定义和程序结束伪操作 (1)NAME 和和 TITLE 伪指令伪指令

27、格式格式 NAME 模块名模块名 格式格式 TITLE 模块名模块名 在源程序开始可用在源程序开始可用 NAME 或或 TITLE 为模块命名为模块命名,模块名的作用是指示给连接程序进行连接用。模块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。源程序中可无模块定义,此时源文件名作为模块名。你现在浏览的是第二十七页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计28 (2 2)程序汇编结束伪指令程序汇编结束伪指令 END END 格式格式 END 起始地址起始地址 作用是指示源程序到此结束。作用是指示源程序到此结束。汇编

28、程序对汇编程序对 END 之后的语句不进行处理。之后的语句不进行处理。程序中所有有效语句应放在程序中所有有效语句应放在 END 语句之前。语句之前。源程序中必须有源程序中必须有 END 结束语句。结束语句。汇编程序对无汇编程序对无 END 语句的源程序不进行处理语句的源程序不进行处理,只给出无只给出无 END 语句错误信息。语句错误信息。标号是程序中第一句指令性语句的标号标号是程序中第一句指令性语句的标号。你现在浏览的是第二十八页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计29假设假设 TEST.asm 是一个无是一个无 END 语句的汇编语言源程序

29、。语句的汇编语言源程序。其汇编结果如下其汇编结果如下:D:MASM TEST;Microsoft(R)Macro Assembler Version 5.10Copyright(C)Microsoft Corp 1981,1988.All rights reserved.End of file encountered on input file End of file encountered on input file 49968+421181 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsD:由于没有由于没有END语句,汇编程

30、序根本没对源程序进行汇编,语句,汇编程序根本没对源程序进行汇编,此时显示警告性错误总数为此时显示警告性错误总数为 0,严重性错误总数为,严重性错误总数为 0,用户不要被此值的误导用户不要被此值的误导。你现在浏览的是第二十九页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计30起始地址可是一个标号或过程名起始地址可是一个标号或过程名,指示程序的入口。指示程序的入口。程序装入内存后,系统跳转到入口处程序装入内存后,系统跳转到入口处,开始执行程序。开始执行程序。aa SEGMENT ;数据段数据段1 str1 DB Hello!aa ENDSbb SEGMEN

31、T ;数据段数据段2 str2 DB 6 dup(?)bb ENDScc SEGMENT ;代码段代码段 ASSUME CS:cc ASSUME DS:aa,ES:bb start:CLD MOV AX,aa MOV DS,AX LEA SI,str1 MOV AX,SEG str2 MOV ES,AX MOV DI,OFFSET str2 MOV CX,6 REP MOVSB MOV AH,4CH INT 21H cc ENDS END start D:masmDEBUG hello.exe-U :查看代码段查看代码段129F:0000 FC CLD129F:0001 B89D12 MOV

32、AX,129D129F:0004 8ED8 MOV DS,AX129F:0006 8D360000 LEA SI,0000129F:000A B89E12 MOV AX,129E129F:000D 8EC0 MOV ES,AX129F:000F BF0000 MOV DI,0000129F:0012 B90600 MOV CX,0006129F:0015 F3 REPZ129F:0016 A4 MOVSB129F:0017 B44C MOV AH,4C129F:0019 CD21 INT 21、-D 129d:0 l10 ;查看数据段查看数据段1的内容的内容129D:0000 48 65 6C

33、 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.-D 129e:0 l10 ;查看数据段查看数据段2的内容的内容129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-你现在浏览的是第三十页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计316、指定地址伪指令 ORG 偏移地址定位语句偏移地址定位语句作用:作用:指定某源程序或数据块起点在段内的偏移地址,指定某源程序或数据块起点在段内的偏移地址,利用利用ORG伪指令可以改变位置计数器的值。伪指令可

34、以改变位置计数器的值。使用格式使用格式:ORG expexp 为能计算出为能计算出16位立即数的表达式位立即数的表达式例:例:ORG 2000H ORG$+1000H你现在浏览的是第三十一页,共114页2022/10/19第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计32$程序计数器程序计数器 字符“$”在 8086/8088 宏汇编中具有一种特殊的意义,把它称为程序计数器。表示位置计数器的当前值,它可以在数值表达式中使用。在程序中,“$”出现在表达式里,它的值为程序下一个所能分配的存储单元的偏移地址。你现在浏览的是第三十二页,共114页2022/10/19第第4章章 汇编语言及汇编

35、程序设计汇编语言及汇编程序设计33 7、结构定义伪指令 STRUC/ENDSSTRUC/ENDS 结构就是相互关联的一组数据的某种组合形式。结构就是相互关联的一组数据的某种组合形式。用用伪伪指指令令 STRUC 和和 ENDS把把相相关关数数据据定定义义语语句句组组合合起起来来,便便构构成成一一个个完完整整的结构。的结构。使用格式:使用格式:结构名结构名 STRUCSTRUC (数据定义语句序列)(数据定义语句序列)结构名结构名 ENDSENDS你现在浏览的是第三十三页,共114页1.结构定义语句结构定义语句结构是指一组相互关联变量的组合,例如学生成绩登记表中一个学生所登结构是指一组相互关联变

36、量的组合,例如学生成绩登记表中一个学生所登录的各项:学号、姓名、性别、课程名称、考试成绩等。录的各项:学号、姓名、性别、课程名称、考试成绩等。结构类型变量可把类似上述一个学生的各项看成一个整体,定义、赋值、结构类型变量可把类似上述一个学生的各项看成一个整体,定义、赋值、修改、引用都大为方便。修改、引用都大为方便。(1)结构类型的定义结构类型的定义格式:格式:STRUC 数据定义伪指令序列数据定义伪指令序列 ENDS例:为学生考试成绩登记表定义一个结构例:为学生考试成绩登记表定义一个结构 STUDTAB STRUC NAMEDB WANG WEI HUA;姓名姓名 SNO DD 20020923

37、H ;学号学号 SEX DB 1 ;性别:性别:0为女为女,1为男为男 COURSE DB ASSEMBLER ;课程名课程名 SCORE DB 90 ;成绩成绩 STUDTAB ENDS你现在浏览的是第三十四页,共114页(2)结构变量的说明结构变量的说明 格式:格式:结构变量名结构变量名 其中其中结构变量名结构变量名由用户起,是可选项,没有它汇编程序照样分配空间。由用户起,是可选项,没有它汇编程序照样分配空间。结构类型名结构类型名是已是已定义的结构类型;定义的结构类型;用来给结构变量的字段赋初值,它们的类型、顺用来给结构变量的字段赋初值,它们的类型、顺序必须与序必须与结构类型名结构类型名定

38、义的一致,各初值之间以逗号隔开。定义的一致,各初值之间以逗号隔开。若某字段的初值采用结构类型定义时的初值,可空缺不写若某字段的初值采用结构类型定义时的初值,可空缺不写(但相应逗号不可省但相应逗号不可省),若所有字,若所有字段全部采用定义时的初值,可只写一个尖括号段全部采用定义时的初值,可只写一个尖括号;尖括号尖括号在任何时候都不可省。在任何时候都不可省。例:利用已定义的例:利用已定义的STUDTAB结构类型说明考试成绩登记表中某学生的结构变量。结构类型说明考试成绩登记表中某学生的结构变量。STUDENT1 STUDTAB ;各字段初值全部采用结构类型定义时的初值各字段初值全部采用结构类型定义时

39、的初值 STUDENT2 STUDTAB ;各字段初值重新赋值各字段初值重新赋值 STUDENT3 STUDTAB ;性别和成绩字段采用结构定义时的初值;性别和成绩字段采用结构定义时的初值;;下面说明一个下面说明一个50个学生的结构数组,各字段初值采用结构类定义时的初值。个学生的结构数组,各字段初值采用结构类定义时的初值。CLASS2 STUDTAB 50 DUP()你现在浏览的是第三十五页,共114页(3)结构变量字段值的修改结构变量字段值的修改 定定义义结结构构类类型型时时可可为为各各字字段段设设置置初初值值,说说明明结结构构变变量量时时可可对对字字段段初初值值进进行行修修改改,使用结构变

40、量时仍可对它们各个字段进行修改。使用结构变量时仍可对它们各个字段进行修改。只有用只有用DB、DW或或DD加以说明的单项字段才能被修改字段值,加以说明的单项字段才能被修改字段值,而用重复运算符而用重复运算符DUP说明的多重字段不能被修改。说明的多重字段不能被修改。对字符串类型的字段,修改后串的长度不能超过定义结构类型时的长度。对字符串类型的字段,修改后串的长度不能超过定义结构类型时的长度。(4)结构的使用结构的使用结构类型定义在先,一般定义在程序的开始部分,也可定义在数据段中;结结构类型定义在先,一般定义在程序的开始部分,也可定义在数据段中;结构变量说明在后,通常在数据段中加以说明;构变量说明在

41、后,通常在数据段中加以说明;最后在代码段中对结构变量及其字段加以引用,包括对它们的值进行修改。最后在代码段中对结构变量及其字段加以引用,包括对它们的值进行修改。对对结结构构变变量量的的引引用用,与与引引用用其其它它变变量量一一样样,可可以以通通过过名名字字对对结结构构变变量量进进行行存存取取。要要引引用用结构变量中的字段,可使用点运算符,形式为:结构变量中的字段,可使用点运算符,形式为:结构变量名结构变量名.结构字段名结构字段名例:取出结构变量的字段例:取出结构变量的字段MOV AL,STUDENT2.SCORE;取取出出结结构构变变量量STUDENT2的的成成绩绩字字段段值值送送AL下面两条

42、指令完成的操作与上面一条指令相同:下面两条指令完成的操作与上面一条指令相同:MOV BX,OFFSET STUDENT2 MOV AL,BX.SCORE 你现在浏览的是第三十六页,共114页2.记录定义语句记录定义语句 记记录录用用于于处处理理按按二二进进制制数数位位计计算算的的数数据据信信息息。使使用用记记录录,需需要要先先定定义义记记录录类类型型,再再说说明明记记录录变变量量,然然后后再使用记录。再使用记录。(1)定义记录类型定义记录类型格式:格式:RECORD:=表达式表达式,:记记录录名名与与字字段段名名由由用用户户起起,程程序序中中记记录录名名不不允允许许重重名名,同同一一记记录录内

43、内字字段段名名不不允允许许重重名名。宽宽度度必必须须是是常常数数,表表示示该该字字段段所所占占二二进进位位的的位位数数;表表达达式式为为可可选选项项,表表示示该该字字段段的的初初值值,未未选选时时初初值值为为0。一一个个记记录录中中可可有有多多个个字字段段,它它们们之之间间用用逗逗号号隔隔开开。16位位微微处处理理器器方方式式,所所有有字字段段宽宽度度之之和和不不得得超超过过16。宽宽度度之之和和超超过过8时时占占用用2个个字字节节,汇汇编编程程序序按按字字处处理理,否否则则按按字字节节处处理理。若若选选用用了了386及及以以上上方方式式,各各字字段段宽宽度度之之和和最最多多可可达达32;超超

44、过过16位时,占用位时,占用4个字节,按双字存放和处理。个字节,按双字存放和处理。例例:定定义义一一个个表表示示学学生生情情况况的的记记录录,年年龄龄占占6位位,性性别别占占1位位(0女女,1男男),健健康康状状况况占占一一位位(0健健康康,1不健康不健康)STATUS RECORD AGE:6=19,SEX:1,HEALTH:1与结构一样,记录类型定义时不分配存储空间。与结构一样,记录类型定义时不分配存储空间。(2)记录变量说明记录变量说明格式:格式:记录变量名记录变量名 记记录录变变量量名名由由用用户户定定义义,可可以以省省略略(照照样样分分配配内内存存),记记录录名名是是已已定定义义的的

45、记记录录类类型型,字字段段初初值值表表给给各各字字段段赋赋初初值值,各各初初值值之之间间用用逗逗号号隔隔开开,各各项项的的顺顺序序应应与与记记录录类类型型定定义义时时的的顺顺序序一一致致;若若某某字字段段值值采采用用记记录录类类型型定定义义时时的的初初值值,则则可可省省略略,仅仅写写逗逗号号即即可可;若全部字段都采用定义时的初值,则仅写尖括号。尖括号在任何时刻都不能省略。若全部字段都采用定义时的初值,则仅写尖括号。尖括号在任何时刻都不能省略。你现在浏览的是第三十七页,共114页2.记录定义语句记录定义语句(续)(续)例:用记录类型例:用记录类型STATUS定义记录变量定义记录变量 ZHANG1

46、 STATUS 被被分分配配一一个个字字节节的的记记录录变变量量ZHANG1在在内内存存中中的的分分配配形形式式为为01011110,即即该该记记录录变变量量的的值为值为5EH。WANG3 STATUS WANG3记录变量前记录变量前6位为位为011001(记录类型定义的初值记录类型定义的初值),后两位为,后两位为00,该记录值为,该记录值为64H。STUDEN1 STATUS 记录变量记录变量STUDENT1为一个字节,各字段值采用记录类型定义时的初值,为为一个字节,各字段值采用记录类型定义时的初值,为67H。CLASS1 STATUS 50 DUP()CLASS1是是个个记记录录数数组组,

47、共共有有50个个元元素素,每每个个元元素素的的三三个个字字段段初初值值分分别别为为18、1、0,记记录值为录值为62H。(3)记录的使用记录的使用可通过记录变量名对记录进行访问,记录变量名可以像其它变量名一样使用。可通过记录变量名对记录进行访问,记录变量名可以像其它变量名一样使用。例:例:MOV AL,ZHANG1 ;AL5EH(ZHANG1记录的值记录的值)记录变量可作为操作数记录变量可作为操作数(立即数立即数)使用。使用。例:例:MOV AH,STATUS ;AH62H记录的字段名可在程序中直接使用,表示一个位移量,即该字段位移到记录的最低位所需的移位次数。记录的字段名可在程序中直接使用,

48、表示一个位移量,即该字段位移到记录的最低位所需的移位次数。例:例:MOV CL,SEX ;CL1(SEX移到记录最低位的次数移到记录最低位的次数)你现在浏览的是第三十八页,共114页2.记录定义语句记录定义语句(续)(续)给记录变量给记录变量(或记录数组元素或记录数组元素)的某字段赋值时不应破坏其余字段上的值,先用的某字段赋值时不应破坏其余字段上的值,先用AND指令对该字指令对该字段清段清0,再用,再用OR指令将相应值设置在该字段上。对记录数组元素的寻址与一般的字节、字或双指令将相应值设置在该字段上。对记录数组元素的寻址与一般的字节、字或双字的数组一样,而对记录数组元素的某一字段访问与对记录变

49、量的字段访问类似,只是将记字的数组一样,而对记录数组元素的某一字段访问与对记录变量的字段访问类似,只是将记录变量名换为记录数组元素的地址表达式。录变量名换为记录数组元素的地址表达式。例:把前面说明的记录数组例:把前面说明的记录数组CLASS1的第三个元素的的第三个元素的AGE字段设为字段设为18。可先取得第三个元素的。可先取得第三个元素的起始地址,取出该元素字节值,将起始地址,取出该元素字节值,将AGE字段清字段清0,然后将字段值,然后将字段值18送一个寄存器,并移位到高送一个寄存器,并移位到高6位,再用位,再用OR指令置成相应值。指令序列如下:指令置成相应值。指令序列如下:MOV SI,OF

50、FSET CLASS1;记录数组的起始地址送记录数组的起始地址送SI ADD SI,2 ;生成第三个元素的起始地址生成第三个元素的起始地址 MOV AL,SI ;AL第三个元素的字节值第三个元素的字节值 AND AL,03H;将将AGE字段清字段清0 MOV AH,18 ;AH18 MOV CL,AGE;CL移位次数移位次数2 SHL AH,CL ;AH左移左移2位,使位,使18与与AGE字段对齐字段对齐 OR AL,AH ;将将18置在置在AGE字段上字段上 MOV SI,AL ;将修改后的结果送回第三个单元将修改后的结果送回第三个单元 你现在浏览的是第三十九页,共114页3.联合定义语句联

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

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁