汇编语言程序设计---3.ppt
《汇编语言程序设计---3.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计---3.ppt(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 主要内容1 1 MASMMASM宏汇编语言结构宏汇编语言结构2 2 MASMMASM汇编语言数据、表达式和运算符汇编语言数据、表达式和运算符3 3 伪指令伪指令 4 4 程序设计程序设计 5 5 DOSDOS功能调用功能调用 6 6 实用程序设计举例实用程序设计举例 第第4章章 汇编语言程序设计汇编语言程序设计 2一、一、MASM MASM 汇编语句结构汇编语句结构 MASM 有两种基本语句。n n指令语句(Instruction statements)l指令语句又称可执行语句,要求CPU执行某种操作。l 指令语句的格式为:标号:指令助记符 操作数 ;注释标号是该指令的符号地址,表示该指令
2、的第一个字节地址。3n n指示语句(pseude instruction statements)pseude instruction statements)l 指示词句又称伪指令,它不要求CPU执行某种操作,汇编时也不产生对应的机器代码,而仅仅告诉汇编程序,对它后面的指令语句和操作数应该如何产生机器目标代码。l伪指令的格式为:名字 伪指令定义符号 操作数 ;注释区别:伪指令名字后无冒号4二、二、MASM MASM 汇编语言数据、表达式和运算符汇编语言数据、表达式和运算符n常数l 常数是没有任何属性的纯数值。l常数分为两种类型:数值型常数字符串型常数 5数值型常数数值型常数1.二进制数:以字母B
3、结尾,如01011101B2.八进制数:以字母Q或O结尾,如723Q,211Q。3.十进制数:以字母D(或省略)结尾,如1995D,3508。4.十六进制数:以字母H结尾,如3A40H,8BH。字符型常数字符型常数用单引号括起来的字符串。如ABCD,$123456等。每个字符在机内以ASCII码存放,例如A,在内存中为41H。6n变量 变量用来定义存放在存储器单元中的数据。其三重属性为:段属性(SEG)偏移地址属性(OFFSET)类型属性(TYPE)例:例:DATA SEGMENTDATA SEGMENTFIRST DB 5AHFIRST DB 5AH SECOND DW 1122H SECO
4、ND DW 1122H DATA ENDS DATA ENDS对变量的操作:LEA AX,FIRSTMOV AL,FIRSTMOV AX,SECOND变量名:存放数据存储单元的符号地址。7n标号:给指令语句所在地址取的名字给指令语句所在地址取的名字 段段属性(属性(SEGSEG)偏移地址偏移地址属性(属性(OFFSETOFFSET)距离距离属性(属性(DistanceDistance)例:例:(隐含为隐含为NEARNEAR,可以用,可以用LABELLABEL伪指令修改。)伪指令修改。)LOPLOP:MOV AXMOV AX,00000000 JMP LOP JMP LOP8n表达式 MASM
5、MASM 允许使用的表达式分为两类:允许使用的表达式分为两类:数字数字表达式表达式 数字表达式的结果是一个数字。数字表达式的结果是一个数字。例:例:MOV DXMOV DX,(,(6*A-B6*A-B)/2 ;/2 ;(A A、B B为变量)为变量)地址表达式地址表达式 地址表达式的结果是一个存储单元的地址。地址表达式的结果是一个存储单元的地址。例:例:MOV AXMOV AX,ES:BX+SI+1000HES:BX+SI+1000H 9n运算符 MASMMASM的运算符分为六大类:的运算符分为六大类:算数运算符算数运算符 逻辑运算符逻辑运算符 关系运算符关系运算符 分析运算符分析运算符 合成
6、运算符合成运算符 其它运算符其它运算符10MASM支持的运算符运算符类型符号名称运算结果实例算术运算符+加法和减法差*乘法乘积/除法商MOD模除余数SHL左移左移后二进制数SHR右移右移后二进制数2+6=88-2=68*5=4022/5=412 MOD 3=032 MOD 6=2 0010B SHL 2=1000B1100B SHR 1=0101B11例:A1 EQU 1020+3300MOV BX,A1-1000MOV AX,35*5MOV DX,A1/100MOV CX,A1 MOD 100MOV AL,00001010B SHL 4等效于:A1 EQU 4320 MOV BX,3320
7、MOV AX,175 MOV DX,43 MOV CX,20 MOV AL,10100000B12运算符类型符号名称运算结果实例逻辑运算符NOT非运算逻辑非结果AND与运算逻辑与结果OR或运算逻辑或结果XOR异或运算 逻辑异或结果NOT 1010B=0101B1011B AND1100B=1000B1011B OR 1100B=1111B1011B XOR 1100B=0110B13运算符类型符号名称运算结果实例关系运算符EQ相等NE不等LT小于LE不大于GT大于GE不小于 6EQ11B=全06NE11B=全15LT8=全17LE101B=全06GT100B=全16GE111B=全0结果为真输
8、出全1结果为假输出全014例2:MOV AX,5 EQ 101B ADD BL,10H GT 16等效于:MOV AX,0FFFFH ADD BL,00H例1:MOV AL,NOT 10101010B MOV AL,11110000B AND 10111101B等效于:MOV AL,01010101B MOV AL,10110000B15运算符类型符号名称运算结果实例分析运算符SEG返回段基址OFFSET返回偏移地址LENGTH返回变量单元数TYPE返回元素字节数SIZE返回变量总字节数段基址偏移地址单元数字节数总字节数SEG N1=N1所在段段基址OFFSET N1=N1的偏移地址LENGT
9、H N2=N2单元数TYPE N2=N2元素字节数SIZE N2=N2总字节数16 MOV AX,SEG FIRST MOV DI,OFFSET FIRST MOV AL,TYPE FIRST ;(AL)=1 字节 MOV AL,TYPE SECOND ;(AL)=2 字 MOV BX,SEG LOP MOV SI,OFFSET LOP MOV AL,LENGTH FIRST ;(AL)=1 MOV AL,SIZE SECOND ;(AL)=2例:DATA SEGMENT LOPDATA SEGMENT LOP:MOV AXMOV AX,00000000 FIRST DB 5AH FIRST
10、DB 5AH,6BH 6BH SECOND DW 1122H JMP LOP SECOND DW 1122H JMP LOP DATA ENDS DATA ENDS 17ES:BX;DS:BLOCK运算符类型符号名称运算结果实例合成运算符PTR修改类型属性修改后类型THIS指定类型/距离属性指定后类型段寄存器名段前缀修改段HIGH分离高字节高字节LOW分离低字节低字节SHORT 短转移说明BYTE PTRBXALPHA EQU THIS BYTEHIGH 2345H=23HLOW 2345H=45HJMP SHORT LABEL18nPTR:强制类型转换例:F1 DB 15H F2 DW 31
11、32H ALPHA:MOV AL,BYTE PTR F2 JMP FAR PTR ALPHAnEQU THIS:指定类型及距离属性例:B-GAMA EQU THIS BYTE W-GAMA DW 1234H MOV AL,B-GAMA MOV AX,W-GAMA19运算符类型符号名称运算结果实例其它运算符()圆括号改变运算级优先级 方括号下标或间接寻址点运算符连接结构与变量尖括号修改变量MASK返回字段屏蔽码字段屏蔽码WIDTH返回记录宽度记录/字段位数(84)*4=16MOV AX,BXTABT1MASK CWIDTH W20运算符的优先级表优先级符号高低1234567891011LENGT
12、H,SIZE,WIDTH,MASK,(),PTR,OFFSET,SEG,YPE,THISHIGH,LOW+,(单目)*,/,MOD,SHL,SHR+,(双目)EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT21三、伪指令伪指令(指示语言)指示性语句又称伪指令,它没有对应的机器指示性语句又称伪指令,它没有对应的机器指令,不由指令,不由CPUCPU执行,而是在汇编程序汇编时执行,而是在汇编程序汇编时识别,用于说明识别,用于说明CPUCPU的类型、段结构、源程序的类型、段结构、源程序起止信息和段内存的安排等。起止信息和段内存的安排等。MASMMASM的伪指令可分为变量定义语句、符
13、号的伪指令可分为变量定义语句、符号定义语句、段定义语句、段分配语句、过程定定义语句、段定义语句、段分配语句、过程定义语句、群定义语句、结构定义语句、记录定义语句、群定义语句、结构定义语句、记录定义语句等。义语句等。22变量定义语句变量定义语句 变量定义语句用来定义字节、字或双字变量,变变量定义语句用来定义字节、字或双字变量,变量定义语句有两种不同的格式。量定义语句有两种不同的格式。格式一格式一 变量名变量名 DB/DW/DD/DF/DQ/DT DB/DW/DD/DF/DQ/DT 表达式表达式 功能:为变量分配功能:为变量分配 1 1 个字节个字节/字字/双字双字/长字长字/四四 字字/十字节的
14、存储单元,并赋值。十字节的存储单元,并赋值。23(1)用数值表达式定义变量。例如:用数值表达式定义变量。例如:K1 DB 5AH ;将5AH赋给字节变量K1K2 DW 2354H ;将2354H赋给字变量K2K3 DD 2A00 4455H ;将2A00 4455H赋给双字变量K35AH54H23H55H44H00H2AHK1K2K324(2)用字符串定义变量。例如:ONE DB “HOW ARE YOU”;将“HOW ARE YOU”字符串赋给变量ONE。TWO DW OK ;将OK字符串赋给变 量TWOHOW KOONETWO25(3)存放结果时,用(?)定义不确定值的变量ABOV DB?
15、;定义变量ABOV为不确定值的字节变量BLOW DW?;定义变量BLOW为不确定值的字变量CLER DD?;定义变量CLER为不确定值的双字变量(4)用数组表达式定义变量。例如:A1 DB 00H,11H,22H,33HA2 DW 3456H,1025H,25*25,1000/3,10A0H例:MOV AL,A13 ;(AL)=33H MOV AX,A22 ;(AX)=1025H26 格式二格式二 格式格式 2 2 用于定义重复变量,其格式为:用于定义重复变量,其格式为:DB DB DW DW DD DD DF DF DQ DQ DT DT变变量量名名n DUP(n DUP(表达式)表达式)例
16、:TAB1 DB 10 DUP(0)TAB2 DW 2 DUP(?)TAB3 DB 4 DUP(1,2 DUP(50H)27符号定义语句符号定义语句 等值语句(等值语句(EQUEQU)格式:符号格式:符号 EQU EQU 表达式表达式 功能:将表达式的值赋给功能:将表达式的值赋给EQUEQU左边的符号。表左边的符号。表达式可以是常数、变量、标号、数值或地址表达式。达式可以是常数、变量、标号、数值或地址表达式。等号语句等号语句 格式:符号格式:符号=表达式表达式 等号语句(等号语句(=)与)与EQUEQU语句有同样的功能,语句有同样的功能,区别在于区别在于等号语句定义的符号允许重新定义等号语句定
17、义的符号允许重新定义,使用更加方便灵活。,使用更加方便灵活。28【例1】ACOS EQU 1250H COUNT EQU 100 BUF EQU ACOS+1000H MOV CL,COUNT【例2】ONE=100 COUNT=100 A=ONE S=COUNT+100 A=A+10029n段定义指令段定义指令 在汇编程序设计中,需要将存储器分成若干段,在汇编程序设计中,需要将存储器分成若干段,8048680486CPUCPU访问存储器时,凭借段寄存器对各个段进访问存储器时,凭借段寄存器对各个段进行访问。通常用段定义语句(行访问。通常用段定义语句(SEGMENT/ENDSSEGMENT/END
18、S)来来定义各种类型的逻辑段。定义各种类型的逻辑段。30 格式:格式:段名段名 SEGMENTSEGMENT定位类型定位类型 ,组合类型组合类型,字长选择字长选择,类别类别 (段体)(段体)段名段名 ENDSENDS (一)完整段定义伪指令(一)完整段定义伪指令 1.1.段定义语句段定义语句31uu段名:自己选定,前后一致段名:自己选定,前后一致uu定位类型:定位类型:pPAGEPAGE:段的首地址后两位为段的首地址后两位为0000H H,页页边界开始边界开始pPARAPARA:(:(隐含)段的首地址后隐含)段的首地址后1 1位为位为0 0H H,节节边界边界pDWORDDWORD:4 4的倍
19、数的倍数pWORDWORD:偶地址偶地址 pBYTEBYTE:任一字节任一字节32u组合类型:pNONE:(隐含)与同名段不连接,独立存在。pSTACK:表明该段为堆栈段,不可缺省。pAT 表达式:表示本段可定义在表达式指示的节边界上。例:MCODE SEGMENT AT 2050H则该段的首地址为20500H。u字长选择:pUSE16:段字长为16位,最大段长为64KBpUSE32:段字长为32位,最大段长为4GBu分类名:用单引号括起,分类名相同的逻辑段存放在连续存储空间。33 2.2.段分配语句(段分配语句(ASSUMEASSUME)段分配语句用来完成段的分配,说明当前哪些逻辑段分配语句
20、用来完成段的分配,说明当前哪些逻辑段被分别定义为代码段、数据段、堆栈段和附加段。段被分别定义为代码段、数据段、堆栈段和附加段。格式:格式:ASSUME ASSUME 段寄存器:段名,段寄存器:段名,段寄存器:段名段寄存器:段名 功能:说明源程序中定义的段由哪个段寄存器去寻址。段功能:说明源程序中定义的段由哪个段寄存器去寻址。段 寄存器可以是寄存器可以是CSCS,SSSS,DSDS,ESES,FSFS或或GSGS。3.3.段寄存器的装入段寄存器的装入 ASSUMEASSUME语句只建立当段和段寄存器之间的联系,但语句只建立当段和段寄存器之间的联系,但ASSUMEASSUME语句不能将各段的段基值
21、装入各个段寄存器,段基址语句不能将各段的段基值装入各个段寄存器,段基址的装入是用程序的办法。的装入是用程序的办法。34DSDS、ESES、FSFS和和GSGS的装入的装入 DSDS、ESES、FSFS和和GSGS不能用立即数寻址方式直接装入,不能用立即数寻址方式直接装入,段基值需先送入通用寄存器,再传送给段寄存器。段基值需先送入通用寄存器,再传送给段寄存器。SSSS及及SPSP的装入:的装入:pp在段定义伪指令中,选用在段定义伪指令中,选用 “STACKSTACK”参数项,在参数项,在ASSUMEASSUME语句中,语句中,把堆栈段分配给把堆栈段分配给SSSS,则则SSSS和和SPSP自动装入
22、。自动装入。pp如未使用如未使用“STACKSTACK”参数项,则用程序实现参数项,则用程序实现SSSS和和SPSP的装入的装入例:例:MOV MOV AXAX,DATADATA MOV MOV DSDS,AXAX CSCS的装入的装入 :由起始标号确定:由起始标号确定CSCS和和IPIP35例:STACK2 SEGMENT DW 40 DUP(?)BOTTOM LABEL WORD;堆栈底的位置 STACK2 ENDS CODE SEGMENT ASSUME CS:CODE SS:STACK2START:MOV AX,STACK2 MOV SS,AX MOV SP,OFFSET BOTTOM
23、 CODE ENDS END START36例:DATA SEGMENT BCDBUF DB 22H DATA ENDS EXTRA SEGMENT BUFF DB 20 DUP(00H)EXTRA ENDS STACK SEGMENT STACK SBUFF DB 200 DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AXCODE ENDS END START 37 (二)简化段定义伪指令(二)简化段定义
24、伪指令1.1.段次序语句(段次序语句(DOSSEGDOSSEG)格式:格式:DOSSEGDOSSEG 功能:各段在内存的顺序按功能:各段在内存的顺序按DOSDOS段次序预定排列。段次序预定排列。2.2.内存模式语句(内存模式语句(.MODELMODEL)格式:格式:MODEL MODEL 模式类型模式类型.高级语言高级语言 功能:指定数据和代码允许使用的长度。功能:指定数据和代码允许使用的长度。说明:说明:高级语言高级语言 是可选项,可用是可选项,可用C C、BASICBASIC、FORTRANFORTRAN。38n简化段定义 DOSSEGMODEL SMALL486(支持32位寄存器操作)S
25、TACK DB 200HDATA BCDBUF DB 12HCODESTART:END START39过程定义伪指令(过程定义伪指令(PROC/ENDP)在程序设计中,常把具有一定功能的程序段设计成一个子程序,又称为过程。过程定义伪指令的格式如下:过程名 PROC(NEAR/FAR)RET过程名 ENDP40其他伪指令其他伪指令1.LABEL 伪指令:用于给已定义的变量起一个别名。名称 LABLE 类型/距离2.(1)定位伪指令 定位伪指令的格式是:ORG 表达式 (2)当前位置计数器 在汇编程序时,用$表示当前的偏移地址值。DATA SEGMENT ST DB ABCDEFGH COUNT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
限制150内