4第四章 汇编语言程序设计.ppt
《4第四章 汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《4第四章 汇编语言程序设计.ppt(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 汇编语言程序设计汇编语言程序设计4.3 汇编语言的语法汇编语言的语法4.4 汇编语言程序的上机过程汇编语言程序的上机过程4.5 汇编语言程序设计汇编语言程序设计4.6 系统功能调用系统功能调用4.7 程序设计举例程序设计举例4.1 汇编语言与汇编程序汇编语言与汇编程序4.2 伪指令伪指令4.1 汇编语言与汇编程序汇编语言与汇编程序一、汇编语言概述一、汇编语言概述 用指令的助记符、符号地址、标号、伪指令等符号用指令的助记符、符号地址、标号、伪指令等符号书写的语言。书写的语言。用这种汇编语言书写的程序称为用这种汇编语言书写的程序称为汇编语言源程序汇编语言源程序4.1二、汇编程序 把汇
2、编语言源程序翻译成在机器上能执行的机器语言把汇编语言源程序翻译成在机器上能执行的机器语言程序程序(目标代码程序目标代码程序)的过程叫做汇编,完成汇编过程的过程叫做汇编,完成汇编过程的系统程序称为汇编程序。的系统程序称为汇编程序。4.1 DATASEGMENT BUF1DB34H BUF2DB21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART4.2 伪指令伪指
3、令一、伪指令概述 伪指令也称为伪操作,伪指令用于为汇编程序提供某些信息,让汇编程序在汇编过程中执行某些特定的功能。也叫指示性语句。指示性语句。给出目标程序存放的位置、定义存储单元中存放的初始数据、分配存储区、指示程序结束等功能。伪操作不产生任何目标代码 。伪指令是汇编语言的保留字,不能够用来命名变量名或标号伪指令是汇编语言的保留字,不能够用来命名变量名或标号4.1 DATASEGMENT BUF1DB34H BUF2DB21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF
4、1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART汇编指令 汇编程序在对源程序进行汇编时把指令语句一对一地翻译成机器指令,然后在程序运行期间由CPU来执行其操作伪指令与汇编指令的区别:每一条汇编指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作。伪指令是在汇编期间由汇编程序执行的操作命令,它不生成目标代码。4.2二、常用伪指令 1.段定义伪指令SEGMENT-ENDSSegname SEGMENT align_type combine_type use_type classSegname ENDS可选择的段参数有定位类型
5、、组合类型和类别名 一般情况下,这些说明可以不用,但一般情况下,这些说明可以不用,但如果需用链接程序把本程序与其他程如果需用链接程序把本程序与其他程序模块相连接时,就需要使用这些说序模块相连接时,就需要使用这些说明。明。DATASEGMENT BUF1DB34H BUF2DB21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART4.22.段寄存器设定伪指令ASS
6、UME定义段与段寄存器的对应关系 CS:CODE,DS:DATA只是说明段寄存器与定义段之间的对应关系,段寄存器的内容需要用程序按要求来加载。DATASEGMENT BUF1DB34H BUF2DB21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART4.23.汇编程序结束伪指令END END START DATASEGMENT BUF1DB34H BUF2DB
7、21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART这些伪操作可以把其后的数据存入指定的这些伪操作可以把其后的数据存入指定的存储单元,形成初始化数据,或者只分配存储单元,形成初始化数据,或者只分配空间而不存入确定的数值,开成未初始化空间而不存入确定的数值,开成未初始化数据。数据。4.24.数据定义及存储器分配伪指令DB用来定义字节用来定义字节DW用来定义字用来
8、定义字DD用来定义双字用来定义双字 DATASEGMENT BUF1DB34H BUF2DB21H SUMDB?DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVAL,BUF1 ADDAL,BUF2 MOVSUM,AL MOVAH,4CH INT21H CODEENDS ENDSTART4.24.数据定义及存储器分配伪指令操作数可以是字符串,如:操作数可以是字符串,如:MESS1DB ABMESS2DW AB 4241MESS24142MESS1通常定义字符串时,用通常定义字符串时,用DB低地址低地址
9、高地址高地址低地址低地址高地址高地址4.24.数据定义及存储器分配伪指令repeat_count DUP(operand,operand)例如:例如:ARRAY1 DB 2 DUP(0,1,2,?),?)ARRAY2 DB 100 DUP(?)(?)用来指定括号中的操作用来指定括号中的操作数的重复次数数的重复次数4.25.表达式赋值伪指令EQU/=ABCEQU 256 ;数赋以符号名DEFEQU 2*3 MOVE EQU MOV ;地址表达式赋以符号名以后遇到此标识符则等效于表达式的值或字符串X=10X=X+10给标识符定义一个数值。两者区别:EQU用给标识符定义一个数值时不能重复定义标识符,
10、但“=”允许重复赋值。4.26.地址计数器$JNE$+6 ;转向地址是当前指令JNE的首址+6例:例:$用在伪操作的参数字段用在伪操作的参数字段表示地址计数器的当前值表示地址计数器的当前值ARRAY DW 1,2,$+4,3,4,$+4如果汇编时如果汇编时ARRAY分配的偏移地址为分配的偏移地址为0070H 4.27.对准伪指令ORG/EVEN/ALIGN1)设置起始地址伪指令ORG ORG 100H;使下一地址是100H2)EVEN伪操作使下一变量或指令开始于一个偶数字节地址 EVEN;使下一地址;使下一地址B从偶地址开始从偶地址开始B DW 2 DUP (?);对于字类型地址最好从偶地址开
11、始;对于字类型地址最好从偶地址开始3)ALIGN伪操作为保证双字数组边界从4的倍数开始创造了条件 ALIGN 4ARRAY DD 100 DUP(?);使双字数组边界从;使双字数组边界从4的倍数开始的倍数开始8.过程定义伪指令PROC-ENDP4.2procedure_name PROC NEAR(FAR)procedure_name ENDP 1)NEAR属性:调用程序和子程序在同一代码段中,属于段内调用。2)FAR属性:调用程序和子程序不在同一代码段中,为段间调用。4.3 汇编语言的语法汇编语言的语法一、汇编语言的语句结构 name:operation operand;comment标号
12、操作码 操作数 注释 二、数据与表达式 4.31.算术操作符+、-、/和MOD 可用于数字 表达式或地址表达式中例如:数组ARRAY定义如下,试写出把数组长度(字数)存入CX寄存器的指令ARRAY DW 1,2,3,4,5,6,7END DW?MOV CX,(END-ARRAY)/2MOV CX,7 4.32.逻辑运算与移位操作符逻辑操作符有AND、OR、XOR、NOT移位操作符有SHL和SHR按位操作按位操作 只能用于数值 表达式中 例如:MOV AX,1 SHL 3将表达式1 SHL 3的结果8送入AX将表达式256 SHR 2的结果64送入CX例如:ADD CX,256 SHR 24.3
13、3.关系运算符关系运算符EQ(相等相等)、NE(不等不等)、LT(小于小于)、LE(小于或等于小于或等于)、GT(有大于有大于)、GE(大于或等于大于或等于)6种种 结果为逻辑值,为真时表示为结果为逻辑值,为真时表示为0FFFFH,为假时为为假时为0000H例如:MOV AX,1234 GT 1024将0FFFFH送入AX将0送入BX例如:MOV BX,1234 LT 10244.34.数值回送操作符数值回送操作符TYPE、LENGTH、SIZE、OFFSET、SEG等。等。这些操作符把一些特征或存储器地址的一部分作为数值回送。这些操作符把一些特征或存储器地址的一部分作为数值回送。1)类型回送
14、操作符)类型回送操作符TYPE TYPE 表达式表达式 表达式是变量:回送该变量的以字节表示的类型 DB、DW、DD、分别对应、分别对应变量的类型属性为变量的类型属性为1、2、4。表达式为常数:回送0 例如:例如:ARRAY DW 1,2,3ADD SI,TYPE ARRAY汇编后的结果是:汇编后的结果是:ADD SI,24.32)偏移OFFSET回送操作符 回送变量或标号的偏移地址 如:MOV BX,OFFSET OPER1 等价于:LEA BX,OPER13)SEG 回送变量或标号的段地址值 例如:例如:DATA是从存储器的是从存储器的05000H开始的一个数据段的段名,开始的一个数据段的
15、段名,OPER是该是该段中的一个变量名,则:段中的一个变量名,则:MOV BX,SEG OPER指令执行后,将把指令执行后,将把05000H作为立即数送到作为立即数送到BX寄存器中。寄存器中。4.34)LENGTH 例如:例如:KKK DW 20 DUP(?);汇编程序为变量;汇编程序为变量KKK;分配;分配20个字存储单元。个字存储单元。MOV CX,LENGTH KKK;等价于;等价于 MOV CX,20变量中使用DUP,汇编程序将回送分配给该变量的单元数,又例如:又例如:ARRAY DW 1,2,3MOV CX,LENGTH ARRAY汇编后为:汇编后为:MOV CX,14.35)SIZ
16、E 回送分配给该变量的总字节数,是LENGTH 和TYPE值的乘积 例如:例如:KKK DW 20 DUP(?);汇编程序为变量;汇编程序为变量KKK;分配;分配20个字存储单元。个字存储单元。MOV CX,SIZE KKK;等价于;等价于 MOV CX,404.31.属性操作符(PTR、段操作符、SHORT、THIS、HIGH、LOW)1)PTR 更改一些已经规定了类型的存储单元的类型 type PTR expressionMOV BX,5 该指令把立即数存入BX寄存器内容指定的存储单元中,但汇编程序不能分辨是存入字单元还是字节单元,此里必须用PTR操作符来说明。XYZ DW 10 DUP(
17、?)PP EQU BYTE PTR XYZQQ EQU BYTE PTR XYZ+1把XYZ开始的2个存储单元规定为字节类型KK EQU DWORD PTR XYZ+2把接下来的4个存储单元规定为双字类型MOV BX,XYZMOV BL,PPMOV AL,QQ2)段操作符 MOV AX,ES:BX+SI3)SHORT 用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的127个字节范围内。4)THIS THIS attribute THIS type像像PTR一样建立一个指定类型一样建立一个指定类型(BYTE、WORD、DWORD)的或指定距离的或指定距离(NEAR、FAR)的
18、地址操作数。的地址操作数。FIRST_TYPE EQU THIS BYTEWORD_TABLE DW 100 DUP(?)FIRST_TYPE 与与 WORD_TABLE 的偏移地址及段地址的偏移地址及段地址完全相同,但完全相同,但FIRST_TYPE 是字节类型,而是字节类型,而WORD_TABLE是字类型。是字类型。4.35)字节分离操作符HIGH 和LOWHIGH取其高位字节,LOW取其低位字节 CONST EQU 0ABCDHMOV AH,HIGH CONST;等价于等价于MOV AH,0AB4.36.优先级优先优先级级运算符运算符1 1 LENGTHLENGTH、SIZESIZE、W
19、TDTHWTDTH、MASKMASK、()、()、2 2 PTRPTR、OFFSETOFFSET、SEGSEG、TYPETYPE、THISTHIS、段前缀运算符:、段前缀运算符:3 3 HIGHHIGH、LOWLOW4 4 *、/、MODMOD、SHLSHL、SHRSHR5 5 、-6 6 EQEQ、NENE、LTLT、LELE、GTGT、GEGE7 7 NOTNOT8 8 ANDAND9 9 OROR、XORXOR1010 SHORTSHORT括号内的表达式应优先计算 4.4 汇编语言程序的上机过程汇编语言程序的上机过程步骤包括:源程序的录入编辑源程序的录入编辑汇编汇编连接形成可执行程序连接
20、形成可执行程序运行运行调试调试 4.4编辑程序:如EDIT.EXE汇编程序:如ASM.EXE或MASM.EXE连接程序:如LIKE.EXE调试程序:如DEBUG.COM有时还需要CREF.EXE、EXE2BIN.EXE等文件 4.5 汇编语言程序设计汇编语言程序设计程序有顺序、循环、分支和子程序四种结构形式 流程图的组成成分流程图的组成成分4.54.5一、顺序程序设计 顺序程序结构是指完全按顺序逐条执行的指令序列,这顺序程序结构是指完全按顺序逐条执行的指令序列,这在程序段中是大量存在的,但作为完整的程序则很少见,在程序段中是大量存在的,但作为完整的程序则很少见,一般作为程序的一部分。顺序结构程
21、序是最简单的程序,一般作为程序的一部分。顺序结构程序是最简单的程序,在顺序结构程序中,指令按照先后顺序一条一条执行。在顺序结构程序中,指令按照先后顺序一条一条执行。例:将两个字节数据相加,并存放到一个结果单元中例:将两个字节数据相加,并存放到一个结果单元中,并显示在屏幕上。并显示在屏幕上。4.5DATASEGMENT AD1 DB4CH;定义第;定义第1个加数个加数 AD2 DB25H;定义第;定义第2个加数个加数 SUM DB?;定义结果单元;定义结果单元DATA ENDS4.5CODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,
22、AX MOVAL,AD1;取出第;取出第1个加数个加数 ADDAL,AD2;和第;和第2个加数相加个加数相加 MOVSUM,AL;存放结果;存放结果 MOVBL,AL;显示十六进制结果;显示十六进制结果 MOVCL,4 SHRAL,CL ANDAL,0FH ADDAL,30H END STARTMOV DL,ALMOV AH,2INT21HMOV AL,BLANDAL,0FHADDAL,30HMOV DL,ALMOV AH,2INT21HMOV AH,4CH;返回;返回DOSINT21HCODE ENDSENDSTART4.54.5计算(25*178+355-360)/25,要求计算结果的商存
23、入BUF单元,余数存入BUF+2单元中。DATA SEGMENT;定义数据段;定义数据段X DW 25;定义源数据;定义源数据Y DW 178Z DW 355BUF DW 2 DUP(?)(?);开辟结果单元;开辟结果单元DATA ENDS;数据段结束;数据段结束4.5CODE SEGMENT ASSUME DS:DATA,CS:CODE;段约定段约定BEGIN:MOV AX,DATAMOV DS,AX;数据段地址送;数据段地址送DSMOV AX,X IMUL Y;DX,AXX*YMOV CX,AXMOV BX,DX;BX,CXDX,AXMOV AX,ZCWD;对;对Z进行符号扩展进行符号扩展
24、ADD AX,CX ADC DX,BX;DX,AXX*Y+Z4.5SUB AX,360SBB DX,0;DX,AXX*Y+Z-360IDIV X MOV BUF,AX;存放商;存放商MOV BUF+2,DX;存余数;存余数MOV AH,4CH;返回;返回DOSINT 21H;程序结束;程序结束CODE ENDS;代码段结束;代码段结束END BEGIN;结束汇编;结束汇编计算结果的商计算结果的商B1H存入存入BUF单元,单元,余数余数14H存入存入BUF+2单元中单元中 4.5二、分支程序设计(a)IF_THEN_ELSE语句可以引出两个分支语句可以引出两个分支(b)CASE语句则可以引出多个
25、分支语句则可以引出多个分支4.5 程序的分支一般用条件转移指令来产生程序的分支一般用条件转移指令来产生,利用转移,利用转移指令不影响条件码的特性,连续地使用条件转移指令指令不影响条件码的特性,连续地使用条件转移指令可使程序产生多个不同的分支。可使程序产生多个不同的分支。例:编写计算如下分段函数值的程序:4.5 1 1;X;X0 0Y=Y=0 0;0=0;0=0 -1-1;X0;X0设输入数据为设输入数据为X、输出数据、输出数据Y,且皆为字节变量。且皆为字节变量。程序流程图如下:程序流程图如下:4.5程序如下:程序如下:DATASEGMENTXDB-10YDB?DATAENDSCODESEGME
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 4第四章 汇编语言程序设计 第四 汇编语言 程序设计
限制150内