第四章汇编语言程序设计-5.pptx

上传人:莉*** 文档编号:80113733 上传时间:2023-03-22 格式:PPTX 页数:136 大小:847.92KB
返回 下载 相关 举报
第四章汇编语言程序设计-5.pptx_第1页
第1页 / 共136页
第四章汇编语言程序设计-5.pptx_第2页
第2页 / 共136页
点击查看更多>>
资源描述

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

1、主要内容:4.1 汇编语言和汇编程序4.2 汇编语言程序规范4.3 伪指令4.5 宏指令4.6 汇编语言程序设计第1页/共136页机器语言:二进制数形式的指令和数据。助记符:用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。汇编语言:指令助记符、符号地址、标号、伪指令等语言元素的集合及这些元素使用的规则。汇编语言源程序:用汇编语言编写的程序。4.1 汇编语言和汇编程序第2页/共136页汇编程序源程序的编译程序汇编程序汇编语言 源程序机器语言目标程序 汇编源程序需翻译成机器语言(变成可执行文件,机器才能执行)这个翻译过程叫汇编。高级语言中称该过程为“解释”或

2、“编译”。执行翻译的程序称为“汇编程序”。第3页/共136页汇编语言程序设计与执行过程汇编语言源程序 源文件.ASM汇编(编译)目标文件.OBJ链接 可执行文件.EXE调试 最终程序.EXEMASM 1.ASMLINK 1.OBJDEBUG 1.exe第4页/共136页4.2 汇编语言程序规范1.分段结构2.语句的类型3.语句的构成与规范4.数据项与表达式作业:4-2 4-3(用表格形式)第5页/共136页1.分段结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑段组成:数据段存放数据、变量堆栈段堆栈区域代码段存放程序指令示例第6页/共136页2.语句的类型指令语句:由指令

3、助记符构成,汇编后将产生相应的机器代码构成的目标程序,供CPU执行。伪指令语句:为汇编程序和链接程序提供一些必要控制信息的、由伪指令构成的管理性语句。宏指令语句:为程序简洁,将一组反复出现的指令集中定义为一条宏指令,汇编后还原为这组指令对应的目标代码。第8页/共136页3.语句的构成与规范汇编语言程序的每个语句由4个域构成:标号、名字 操作符 操作数 ;注释标号名字域:标号指令的符号地址,用来代表指令在存储器中的地址。标号后应加上冒号。名字段、过程、变量的名字,用来代表它们在存储器中的地址。名字后不加冒号。示例第9页/共136页语句的构成与规范操作符域:指令、伪指令、宏指令助记符。操作数域:即

4、指令的操作对象。可以有0个、1个或2个。操作数之间以逗号分隔。形式:寄存器、存储单元、常数或表达式。注释域:以分号开头,用来说明程序的功能、分段,以便阅读和理解。汇编时不予处理。示例第10页/共136页4.数据项与表达式常量标号变量表达式第12页/共136页 常量没有属性的纯数二进制数:以B结尾,如01001101B。十进制数:如85,或以D结尾。十六进制数:以H结尾,第1个数字为A-F时,前面应加0,如0F160H,否则被误会是标识符。字符串:用单引号括起来的1个或多个字符,每个字符的ASCII码值构成。如256,汇编时被翻译成ASCII码323536H,而不是256。第13页/共136页标

5、号:指令语句的名字也是其符号地址。标号有3个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR(段内引用)或FAR(段外引用)常作为转移指令的转移地址 标号第14页/共136页 变量变量:存于内存单元中的数据,可被程序改变变量名:是变量的符号地址变量也有3个属性:段地址:变量所在段的段地址 偏移量:变量单元地址与段首址间的位移量。类 型:有BYTE、WORD和DWORD三种,由定义变量的伪指令确定。变量与标号统称为存储器操作数。第15页/共136页标号和变量名的使用规则1.组成:A-Z a-z 0-9?._$2.不能以数字开头,句号(.)只能作首字符3

6、.长度小于31个字符4.不能与保留字(指令助记符、伪指令、预定义符号等)重名5.不能重复定义例:正确:LP1,AGAIN,NEXT,_GO,OK_1 错误:4M,LOOP,AAA,#HELP,+ONE第16页/共136页 表达式表达式:由常数、寄存器名、标号、变量与一些运算符的组合而成。运算符有6类:A.算术运算符B.逻辑运算符C.关系运算符D.分析运算符E.综合运算符属性运算符优先级别第17页/共136页算术运算符 +、-、*、/、MOD、SHL、SHR完成整数的算术运算,结果也是整数。注意:地址运算要求两个地址要在同一段内,只有加、减法运算才有实际意义。用于数字表达式:MOV AX,4*1

7、024 ;汇编后的形式为:MOV AX,4096用于地址表达式:LEA SI,TAB+3 ;若TAB的偏移地址为1000H,汇编后的形式为:LEA SI,1003H求余、左移、右移 第18页/共136页例4-1 一个程序片断:DATADATA SEGMENT SEGMENT VR DB 1,3,5,6 DATADATA ENDSENDS CODECODE SEGMENT SEGMENT MOV AH,VR+2 ;将VR+2单元内容5AH MOV AL,3*10-20 ;将表达式值10AL MOV BH,10 MOD 3 ;将表达式值1BH MOV BL,01010B SHL 1;左移1次得14

8、HBL6 5 3 1 MVR 第19页/共136页逻辑运算符 AND、OR、XOR、NOT逻辑运算符只能用于数值表达式中。例:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H注意:不要把逻辑运算符与逻辑运算指令混淆:例:AND AX,3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX,3F00H等价。第20页/共136页关系运算符 EQ、NE、LT、GT、LE、GE 关系运算的关系运算的结果结果是一个是一个逻辑值逻辑值:真真或或假假 关系为关系为真真,结果为,结果为全全1 1 关系为关系为假假,结果为,结果为全全0 0 例:例:

9、MOV BX,PORT GT 300HMOV BX,PORT GT 300H 若若PORTPORT值小于值小于300H,300H,则汇编后为则汇编后为:MOV BX,0:MOV BX,0 否则汇编后为:否则汇编后为:MOV BX,0FFFFHMOV BX,0FFFFH第21页/共136页分析运算符取地址运算符 SEG、OFFSET取值运算符 TYPE、LENGTH、SIZE第22页/共136页SEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VAR DB 12H MOV BX,OFFSET VAR;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址

10、;若VAR在当前使用数据段中,则:AX=DS 取地址运算符 SEG OFFSET第23页/共136页取值运算符TYPE、LENGTH、SIZETYPE:取变量/标号的类型(1,2,4,-1,-2)LENGTH:取变量的长度(变量中元素的个数)SIZE:取变量在存储区的字节数(=TYPE*LENGTH)例如:V1 DB 2AH,3FH V2 DW 10 DUP(1,?,2)V3 DW 12DUP(?)注意:LENGTH和SIZE对重复操作数DUP定义的数组逗号隔开的第一项有效,如V2;在如V1变量,对逗号隔开的第一项有效;都符合SIZE=TYPE*LENGTH。DB BW DD NEAR FAR

11、;LENGTH=1,SIZE=1;LENGTH=1,SIZE=1;LENGTH=10,SIZE=20;LENGTH=10,SIZE=20;LENGTH=12,SIZE=24;LENGTH=12,SIZE=24第24页/共136页DATA SEGMENTV1 DB 2AH,3FHV2 DW 2A3FH,3040HV3 DD 12345678H,12ABCDEFHV4 DW 20 DUP(1,4,2DUP(?)DATA ENDS例:下面定义的数据段DATA,从40000H开始。MOV AX,SEG V1 MOV BX,SEG V2 MOV CX,SEG V3 同属一段,段基址相同。MOV AX,O

12、FFSET V1 MOV BX,OFFSET V2 MOV CX,OFFSET V3 偏移地址分别为0,2,6。MOV AX,TYPE V1 MOV BX,TYPE V2 MOV CX,TYPE V3 类型值分别是1,2,4。MOV AX,LENGTH V4 MOV BX,SIZE V4 长度和字节数分别是20,40。MOV AH,LENGTH V1 MOV AL,SIZE V1 MOV BH,LENGTH V2 MOV BL,SIZE V2 MOV CH,LENGTH V3 MOV CL,SIZE V3 只对第一项有效。AH=1AL=1BH=1BL=2CH=1CL=4第25页/共136页属性

13、运算符PTR用来改变或建立地址操作数的新类型。格式:PTR 类型BYTE,WORD,DWORD,NEAR,FARBYTE、WORD、DWORD 描述数据存储单元(变量)地址NEAR、FAR 描述转移、调用(标号)的目的地址第26页/共136页例:MOV BYTE PTR DI,0;字节类型 MOV WORD PTR DI,0;字类型 MOV DI,0B5H ;类型不定 PTR也可用来进行强制类型转换例:STR1 DW 2345H;STR1定义为字类型 MOV AX,STR1 ;合法 MOV AL,STR1 ;非法 MOV AL,BYTE PTR STR1;合法45H23HMSTR1第27页/共

14、136页 与EQU配合,为汇编的下一个存储单元定义一个新的符号名,与下一个存储单元具有相同的地址。格式:THIS 例:LABC EQU THIS BYTE;LABC为字节 LABD DW 4321H,3456H;LABD为字 ;LABC和LABD有相同的段首址和偏移地址 MOVAL,LABC ;AL=21H MOV AX,LABD ;AX=4321H指定新类型THIS43H56HLABC34H21HLABD第28页/共136页优先级优先级运运 算算 符符高高低低(),.,LENGTH,WIDTH,SIZE,MASK,记录字段名记录字段名PTR,OFFSET,SEG,TYPE,THIS,CS:,

15、DS:,ES:,SS:HIGH,LOW*,/,MOD,SHL,SHR+,-EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT分析、综合运算符分离运算符算术运算符关系运算符 逻辑运算符段类型属性第29页/共136页4.3 伪指令伪指令1.数据定义伪指令2.符号定义伪指令3.标号定义伪指令4.段定义伪指令5.段寻址伪指令6.过程定义伪指令7.定位伪指令8.汇编结束作业:4-4(存储示意图)4-5(存储示意图)4-7 4-11 第30页/共136页1.数据定义及存储器分配伪指令功能:为程序分配指定数目的存储单元。格式:变量名 伪指令 ;注释 数据项表为由逗号分隔的表达式组。常用的数

16、据定义伪指令:DB 字节(BYTE)变量,1个字节;DW 字(WORD)变量,2个字节;DD 双字(DWORD)变量,4个字节;DQ 四字(QWORD)变量,8个字节;DT 十字节(TBYTE)变量,10个字节。每 数 据 项 占例1字符 特殊操作数 第31页/共136页例1:DATA_B DB 10,5,10HDATA_W DW 100H,-4DATA_D DD 0FFFBH05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H-4 40FFFBH0FFFBH汇编后的

17、内存分配情况第32页/共136页字符串操作数定义:M41H00Hu 字符串只能定义为字节DB或字DW DB定义如:STR DB HELLO DW定义,串中只能有一个或两个字符 例如:DW ABC ()如:DB AB;41H在低地址,42H在高地址 DW AB;42H在低地址,41H在高地址 当DW定义,字符串中有一个字符时 例如:DW A;41H在低地址,高地址补0STRHELLO48H45H4CH4CH4FHABBAM41H42H42H41H第33页/共136页1.操作数?:用来保留存储空间,但不置初值,为随机值。RSV DW?,?,?,?,?,?,?,?2.重复操作符DUP:变量名 伪指令

18、 DUP(表达式)重复的数据可以使用重复操作符DUP,如上面RSV亦可写成:RSV DW 8 DUP(?)3.操作数$(也称程序计数器):其值为程序下一个分配的存储单元的偏移地址。特殊操作数?DUP$第34页/共136页例:TABLE DB 10 DUP(?)BUFFER DW TABLE,$+3设TABLE的偏移地址为0080H,则汇编后:BUFFER0080H80HTABLE008AH008BH008CH008DH.8FH00H00H0089H10 Bytes第35页/共136页2.符号定义伪指令符号定义伪指令 EQU =等值伪指令:EQU 和 等号伪指令:=格式:符号名 EQU/=表达式

19、表达式:常数、表达式、寄存器名、指令助记符注意:1.用”=”定义的符号可在任何时候进行重定义。2.用EQU定义的符号未清除前,不能重新定义。清除可用PURGE伪指令。3.二者均不占用存储空间,仅是给符号赋值。第36页/共136页例:FIVE EQU 5 COUNT EQU AX TEN EQU 10 DIST =BYTE PTRSI+BP GOTO =JMP MOV AX,TEN MOV CX,COUNT ADD DIST,FIVE DIST=WORD PTRSI+BP+1 ADD DIST,AX GOTO LABEL 定义引用第37页/共136页3.标号定义伪指令标号定义伪指令 LABEL功

20、能:用来定义变量或标号的新类型格式:变量(标号)名 LABEL 类型变量:BYTE WORD DWORD 例如:VAR1 LABEL WORD VAR2 DB 20 DUP(1)标号:NEAR FAR 例如:L1 LABEL FAR L2:MOV AX,1000H两变量具有相同两变量具有相同的地址指针的地址指针两标号为同一指令的符号地址THIS第38页/共136页4.段定义伪指令段定义伪指令定义一个段的基本格式:段名 SEGMENT 定位类型 组合方式 类别 段名 ENDS1.二者成对出现,段名应一致。2.段由SEGMENT开始,ENDS结束。3.对数据段和堆栈段中的语句一般是变量定义。4.对

21、代码段则是指令语句。第39页/共136页1)定位类型功能功能:说明说明如何确定如何确定逻辑段的逻辑段的边界边界。PAGE:PAGE:逻辑段从页边界开始。256字节称为一页,故段的起始物理地址应为00H。PARAPARA(Paragraph):(Paragraph):逻辑段从一个节(16个字节)的边界开始。段的起始地址应能被16整除,即段起始物理地址应为0H。默认类型BYTE:BYTE:从字节边界开始,即从任何地址开始。WORD:WORD:从字边界开始,即段从偶地址开始。第40页/共136页2)组合类型组合类型功能:功能:说明不同模块中同名段的组合方式NONE:该段独立,与其他段无关。默认类型P

22、UBLIC:所有同名同类型的段组合成一个逻辑段,公用一个段基址,运行时装入同一个物理段中。STACK:专用于说明堆栈段,同PUBLIC。COMMON:所有同名段同类型的段具有相同的段基址(后覆盖前),段长度取决于最长的COMMON段。AT:按绝对地址定位,数值表达式值(16位)就是段地址,不能用于代码段。MEMORY:该段位于被连接在一起的其他所有段之上。第41页/共136页3)类别由编程者赋予该段的与段名不同的另外一种名字信息。功能:所有同类别段被安排在连续的存储区中。用单引号括起来的字符串。例:模块1中:seg1 SEGMENT PARA STACK stack seg1 ENDS 模块2

23、中:seg2 SEGMENT PARA STACK stack seg2 ENDS第42页/共136页5.段寻址伪指令段寻址伪指令在代码段中用来设定各段名和段寄存器的关系格式:ASSUME CS:code,DS:data,ES:data 语句中的code和data为段名。这个语句说明:1.CS将指向名字为code的代码段 2.DS和ES将指向名字为data的数据段第43页/共136页注意:注意:ASSUMEASSUME伪指令伪指令只是告知只是告知汇编程序有关汇编程序有关段寄段寄存器与段的存器与段的关系关系,并没有给段寄存器赋予实际的初值。,并没有给段寄存器赋予实际的初值。故需要以下语句:故需要

24、以下语句:MOVMOVAX,DATAAX,DATA MOV MOVDS,AXDS,AX MOV MOVES,AXES,AX 将段基址装入段寄存器将段基址装入段寄存器。如果程序中用到堆栈段,。如果程序中用到堆栈段,则则SSSS也需装入实际的初值也需装入实际的初值。代码段基地址代码段基地址不需要程序员装入不需要程序员装入CSCS寄存器寄存器,而由,而由OS(OS(操作系统操作系统)负责装入负责装入。第44页/共136页堆栈段定义过程:堆栈段定义过程:STACK SEGMENT STACK DW 32DUP(?);段内留出32个字作为堆栈区 TOS LABEL WORD ;TOS为字变量,偏移地址为

25、0040H STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,STACK MOV SS,AX ;堆栈段寄存器初始化 MOV SP,OFFSET TOS;堆栈指针初始化 LABEL第45页/共136页6.过程定义伪指令过程定义伪指令(1)定义过程(子程序)伪指令(2)近过程举例(3)同一模块远过程举例(4)连接伪指令连接伪指令:PUBLICPUBLIC 和和 EXTRN(5)不同模块远过程举例第46页/共136页(1)格式:过程名 PROC NEAR/FAR RET 过程名 ENDP (a)过程名:过程入口的符

26、号地址。(b)PROC开始和ENDP结束,须成对出现。(c)过程的类型有2种:NEAR表示段内调用(默认类型)FAR表示段间调用 (d)RET为过程返回主程序的出口语句。可放在中间或者结尾,但必须是最后执行的语句。(e)调用一个过程的格式为:CALL 几点说明:第47页/共136页DATA SEGMENT AA DW 1234HBB DW 5678HCC DW?CC DW?DATA ENDSMAIN SEGMENTASSUME CS:MAIN,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,AA MOV BX,BB (2)近过程举例:近过程举例:CALL

27、ABC MOV AH,4CH INT 21HABC PROC NEAR ABC PROC NEAR MOV CX,BX MOV CX,BX ADD CX,AXADD CX,AX MOV CC,CX MOV CC,CX RETRETABC ENDPABC ENDPMAIN ENDS END START第48页/共136页DATA SEGMENT AA DW 1234HBB DW 5678HCC DW?CC DW?DATA ENDSMAIN SEGMENTASSUME CS:MAIN,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,AA MOV BX,BB C

28、ALL FAR PTR ABC(3)远过程远过程(同一模块同一模块)举例:举例:MOV AH,4CH INT 21HMAIN ENDSCODE SEGMENTASSUME CS:CODE ABC PROC FAR ABC PROC FAR MOV CX,BX MOV CX,BX ADD CX,AXADD CX,AX MOV CC,CX MOV CC,CX RETRETABC ENDPABC ENDPCODE ENDS END START第49页/共136页(4)连接伪指令:PUBLIC和EXTRNPUBLIC:模块前声明模块中变量、标号、符号常量和外部过程可供其他模块引用。没声明不能被其他模块

29、引用例如:PUBLIC AA,ABC;说明:此模块中定义的变量AA和子程序ABC可供其他模块使用。EXTRN:模块前给出此模块需要用到的变量、标号、符号常量和外部过程的属性。例如:EXTRN AA:WORD,ABC:FAR 说明:此模块中要用到其他模块定义可公用的字变量AA,并需要调用子程序ABC。EXTEXTE ERN RN 外部变量外部变量 公用符号伪指令 引用符号伪指令 第50页/共136页EXTRN ABC:FARDATA SEGMENT COMMONAA DW 0809HBB DW 1234HDATA ENDSMAIN SEGMENTASSUME CS:MAIN,DS:DATA ST

30、ART:MOV AX,DATA MOV DS,AX MOV BX,AA MOV CX,BB CALL ABC MOV AH,4CH INT 21HMAIN ENDS END STARTPUBLIC ABCPUBLIC ABCDATA SEGMENT COMMONDATA SEGMENT COMMONCC DW 5678HCC DW 5678HDATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATA ABC PROC FARABC PROC FAR PUSH DSPUSH DS M

31、OV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV DX,CCMOV DX,CC POP DS POP DS RETRETABC ENDPABC ENDPCODE ENDSCODE ENDS END ABCEND ABC(5)远过程远过程(不同模块不同模块)举例:举例:模模块块一一 模模块块二二 ;组合类型组合类型 组合类型组合类型 第51页/共136页7.定位伪指令定位伪指令 ORG功能:指定某条语句或变量的偏移地址。格式为:ORG 表达式的值作为下一条指令或变量的偏移地址。例:DATA SEGMENT ORG 2 VAR1 DB 2,3,4 ORG

32、$+3 VAR2 DW 1234H DATA ENDS M 0 VAR1 02H 03H 04H 2 VAR2 34H 12H 8 5 第52页/共136页8.汇编结束汇编语言汇编语言源程序的源程序的最后最后,要加要加汇编结束伪指令汇编结束伪指令ENDEND,以使以使汇编程序汇编程序结束汇编结束汇编。格式:格式:END END 启动标号或过程名启动标号或过程名 启动标号启动标号:程序第一条指令的标号程序第一条指令的标号,指示程序的启,指示程序的启动地址动地址(要执行的第一条指令的地址要执行的第一条指令的地址)。告诉告诉汇编程序汇编程序源程序结束源程序结束,并给出执行程序的入口,并给出执行程序的

33、入口地址,启动地址只有在地址,启动地址只有在主模块主模块才有意义。才有意义。例子例子 举例 第54页/共136页DATA SEGMENTAB DW 1234HDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,AB MOV BL,BYTE PTR AB MOV AH,4CH INT 21HCODE ENDS END START例子例子第55页/共136页 4.5 4.5 宏指令1.宏指定义2.宏调用3.举例4.宏调用与过程调用的区别5.取消宏指令第56页/共136页1.1.宏指令定义功能

34、:将一组重复使用的语句定义成一条宏指令格式:宏指令名 MACRO 形式参数表 ;宏体 ENDM形式参数:在调用宏指令时用实在参数来代替。也可不设参数。程序中位置:放在汇编结束前的任何位置。第57页/共136页2.2.宏调用例:例:两个数之和的宏定义和宏调用。两个数之和的宏定义和宏调用。宏定义宏定义:DADDDADD MACROMACRO X X,Y Y,Z Z MOV AXMOV AX,X X ADD AX ADD AX,Y Y MOV Z MOV Z,AXAX ENDMENDM调用宏:DADD DATA1,DATA2,SUMDATA1,DATA2,SUM是实在参数,由它们替换定义中的X、Y、

35、Z。第58页/共136页DATA SEGMENT AA DW 1111HBB DW 2222HCC DW?CC DW?EE DW?DATA ENDSDADD MACRO X,Y,ZDADD MACRO X,Y,Z MOV AX,XMOV AX,X ADD AX,Y ADD AX,Y MOV Z,AX MOV Z,AX ENDMENDM3.举例:MAIN SEGMENT ASSUME CS:MAIN,DS:DATA START:MOV AX,DATA MOV DS,AX DADD AA,BB,CC MOV AX,CC DADD AA,CC,EE MOV BX,EE MOV AH,4CH INT

36、21HMAIN ENDS END START第59页/共136页4.4.宏调用与过程宏调用与过程调用调用区别:区别:1.1.执行形式执行形式:宏命令伪指宏命令伪指令令由宏汇编程序由宏汇编程序在汇在汇编编过程中过程中处理处理,而而过程调用过程调用由由CPUCPU执行执行。2.2.汇编结果汇编结果:宏命令伪指令宏命令伪指令汇编后被展开汇编后被展开。3.3.执行速度执行速度:宏命令宏命令执行速度较快执行速度较快(因因无调用转无调用转移移)4.4.占用内存占用内存:宏指令宏指令简化了源程序简化了源程序,但不能简但不能简化目标程序化目标程序,并不节省内存单元并不节省内存单元。使用过程使用过程可以可以节省

37、代码占用的内存空间节省代码占用的内存空间。第60页/共136页5.5.取消宏指令 宏指令定义后,在宏指令定义后,在整个程序中整个程序中有效有效。若宏指令与指令或伪指令若宏指令与指令或伪指令名字相同名字相同,则,则宏指令宏指令优先优先,同名同名指令或伪指令指令或伪指令失效失效。功能:取消宏指令,功能:取消宏指令,使使指令或伪指令指令或伪指令恢复恢复。格式:格式:PURGE PURGE ,2第61页/共136页 4.6 4.6 汇编语言程序设计 程序设计步骤 汇编语言上机过程 源程序的基本结构第62页/共136页 程序设计步骤1.根据实际问题抽象出数学模型,确定算法2.画出程序框图(流程图)3.分

38、配内存工作单元和寄存器4.根据框图编写源程序,存成.ASM文件5.对源程序汇编,生成.OBJ目标文件6.把.OBJ文件连接,生成.EXE执行文件7.运行、调试1 2 第63页/共136页绘制程序框图(流程图)(1)(1)用用方框方框表示表示工作框工作框,框中,框中标明标明要完成的要完成的功能功能(2)(2)用用菱形框菱形框表示表示判断框判断框框中框中标明标明比较比较、判断判断和和条件条件N NY Y?第64页/共136页绘制程序框图(流程图)(4)各框之间用直线连起来表示程序走向。框中标明子程序名字(入口参数等)(3)用 框表示调用子程序或过程。开始 结束 第65页/共136页 汇编语言上机过

39、程YYYNNN有错?有错?有错?结束汇 编输入(修改)源程序连 接运 行查 错开始用EDIT,TXT等任何文本编辑器。源程序存为.ASM文件 用MASM宏汇编程序进行汇编。汇编后生成.OBJ目标文件。格式:MASM 用LINK进行连接,生成.EXE可执行文件格式:LINK ;用TD、DEBUG等调试程序进行调试。格式:DEBUG 第66页/共136页 源程序的基本结构1.基本结构介绍2.顺序结构与简单程序设计3.条件结构与分支程序设计4.循环结构与循环程序设计5.子程序结构与子程序设计基本4-13 分支4-18 排序4-24 循 环4-25第67页/共136页1.1.基本结构介绍(1)顺序结构

40、(2)分支结构(条件选择)(3)循环结构 结构定理(1966年):任何程序都可以由3种基本结构程序构成结构化程序。每一个结构只有一个入口和一个出口,3种结构的任意组合和嵌套就构成了结构化的程序。Boehm和Jacobi 鲍赫门和加柯皮鲍赫门和加柯皮 BohmBohm和和Jacopini Jacopini 第68页/共136页(1)顺序结构第69页/共136页(2)分支结构(条件选择)IFTHEN结构 IFTHENELSE结构 CASE结构第70页/共136页标号:条件满足?处理体 NYIFTHEN结构程序结构:TEST/CMP指令 条件转移指令(Jx 标号)处理体 标号:其他指令 第71页/共

41、136页程序结构:TEST/CMP指令 Jx 标号1 处理体P1 JMP 标号2标号1:处理体P2标号2:其他指令 IFTHENELSE结构条件满足?处理P1处理P2标号1:标号2:条件1条件2YN第72页/共136页CASE结构 TEST/CMP指令(条件1)Jx 标号1 处理体P1 JMP 标号n+1标号1:TEST/CMP指令(条件2)Jx 标号2 处理体P2 JMP 标号n+1标号2:标号n-1:TEST/CMP指令(条件n)Jx 标号n 处理体Pn JMP 标号n+1标号n:处理体Pn1 标号n+1:(公共出口)标号1:条件1成立?P1YN条件2成立?条件n成立?Pn+1标号2:标号

42、n-1:标号n:P2PnYYNN标号n+1:程序结构:第73页/共136页(3)循环结构DOUNTIL 结构DO WHILE 结构 第74页/共136页DOUNTIL 结构 初始化 循环体 循环控制 继续循环?Y N 先执行,再判断条件。工作部分至少执行一次。第75页/共136页DO WHILE 结构 初始化 循环体 循环控制 继续循环?Y N 先判断条件,再执行。工作部分有可能一次都不执行。第76页/共136页2.顺序结构与简单程序设计顺序结构的程序,指令逐条依次被执行,指令指针IP内容为线性增加。顺序结构指令:传送类、运算类和移位类。介绍两个简单功能:表达式程序 查表程序第77页/共136

43、页表达式程序例4-12 编程计算:z=(x2-3y)/2 设x,y为单字节正整数,结果z用2个字节来存放。程序段 1、2 结束 开始(X -3Y)/2Z 2X*X 3*Y 第78页/共136页源程序如下:DATA SEGMENT ;数据段 X DB 25 ;变量X Y DB 32 ;变量Y Z DW?;变量ZDATA ENDS ;数据段结束CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA ;段寻址EXPRE PROC FAR ;定义子程序START:PUSH DS ;保护返回地址 SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX ;

44、初始化DS;子程序起始说明子程序起始说明 第79页/共136页 MOV AH,0 MOV AL,X MUL AL ;X*X MOV BH,0 MOV BL,Y MOV CX,BX ADD BX,BX ADD BX,CX ;3*Y SUB AX,BX ;X*X-3*Y SHR AX,1 ;除2 MOV Z,AX ;存结果 RET ;返回调用程序EXPRE ENDP ;子程序结束CODE ENDS ;代码段结束 END START ;汇编结束第80页/共136页查表程序功能:可以直接调用汇编语言不支持的平方、立方、方根、超越及三角函数等。解决输入与输出无一定算法关系的代码转换问题。关键:组织表格。

45、方法:利用表格首址加索引值得到结果地址。通常索引就是被查询的数值。第83页/共136页例4-13 利用查表求Y=X3,设X放在数据区XVAL单元,结果存入YVAL单元。立方表放在从TABLE开始的单元。解:立方表按03,13,23,63的顺序存放。设X3 表的单元地址为TABLE+X。源程序如下:DATA SEGMENT ;数据段 TABLE DB 0,1,8,27,64,125,216 XVAL DB 6 YVAL DB?DATA ENDSCODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;初始化DS MOV DS,AX2 3

46、00H01H08H1BH40H7DHD8H06H?MTABLE00010203040506070809第84页/共136页 LEA BX,TABLE ;BX指向表首址 MOV AH,0 ;被查数作索引值 MOV AL,XVAL ;6AL(AX)ADD BX,AX ;移动指针到查表位置 MOV AL,BX ;查表 MOV YVAL,AL ;存结果 MOV AH,4CH INT 21H ;返回DOSCODE ENDS ;代码段结束 END START ;汇编结束00H01H08H1BH40H7DHD8H06H?MTABLE000102030405060708092 3TABLE+X第85页/共13

47、6页 LEA BX,TABLE ;BX指向表首址 MOV AH,0 ;被查数作索引值 MOV AL,XVAL ;6AL(AX)ADD BX,AX ;移动指针到查表位置 MOV AL,BX ;查表 MOV YVAL,AL ;存结果可用查表转换指令XLAT,此程序段可简化为:LEA BX,TABLE;BX指向表首址 MOV AL,XVAL ;被查数作索引值 XLAT ;查表转换 MOV YVAL,AL ;存结果00H01H08H1BH40H7DHD8H06H?MTABLE000102030405060708092 3查表程序段第86页/共136页3.条件结构与分支程序设计实现分支的要素:1.使用能

48、影响状态标志的指令。2.使用条件转移类指令对状态位进行测试判断,确定如何转移,形成分支。分类:两路分支 例4-14 三路分支 例4-15 多路分支 例4-16 第87页/共136页两路分支用一条条件转移语句就可实现两路分支:例4-14 比较两个数,选出其中大者存AL寄存器。MOV AL,BX ;取前一个元素到AL INC BX ;指向后一个元素 CMP AL,BX ;两数比较,设置CF JAE BIGER ;前一个后一个,CF=0转EXCH:MOV AL,BX ;否则,取后一个到ALBIGER:.程序片段:第88页/共136页NEXT 三路分支连续使用两条条件转移指令可实现三路分支:例4-15

49、 编程计算下面函数,X取值范围:-128127。Y-1 X(AL)X0?X0?Y0 Y1 YN 1 (X0)Y=0 (X0)-1 (X0)源程序 1 2 NY 第89页/共136页源程序如下:DATA SEGMENT ;数据段 X DB -3 ;定义X Y DB?DATA ENDS ;数据段结束CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;初始化DS MOV DS,AX1 2 第90页/共136页 MOV AL,X ;XAL CMP AL,0 ;X与0比较 JGE BIGER ;X0,转BIGER MOV AL,0FFH

50、;X0,-1送AL MOV Y,AL ;-1送Y单元 JMP NEXT ;返回BIGER:JE EQUL ;X=0,转EQUL MOV AL,1 ;X0,1送AL MOV Y,AL ;1送Y单元 JMP NEXT ;返回EQUL:MOV Y,AL ;0送Y单元NEXT:MOV AH,4CH INT 21H ;结束程序,返回DOSCODE ENDS END START1 2 第91页/共136页 MOV AL,X ;XAL CMP AL,0 ;X与0比较 JGE BIGER ;X0,转BIGER MOV AL,0FFH ;X0,-1送AL JMP EQUL ;存Y并结束BIGER:JE EQUL

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

当前位置:首页 > 应用文书 > PPT文档

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

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