第3章80 x86汇编语言程序设计下.ppt
《第3章80 x86汇编语言程序设计下.ppt》由会员分享,可在线阅读,更多相关《第3章80 x86汇编语言程序设计下.ppt(115页珍藏版)》请在三一文库上搜索。
1、1,第3章 80x86汇编语言程序设计(下),2,3.3 汇编语言格式,汇编语言源程序结构 汇编语言上机过程 汇编语言语句格式 伪操作(伪指令),3,数据段 说明: 堆栈段 1、各段顺序无关 2、除代码段外,可缺省 3、可有若干个数据段, 若干代码段 代码段 END 标号,附加段,3.3.1 源程序结构概览,4,汇编语言程序例,DATA SEGMENT BUF1 DB 34H BUF2 DB 2AH SUM DB ? DATA ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, BUF
2、1 ADD AL, BUF2 MOV SUM, AL MOV AH, 4CH INT 21H CODE ENDS END START,5,3.3.2 汇编语言源程序上机过程,源程序 .asm,目标程序 .obj,结果 debug DOS下执行,执行,可执行程序 .exe,6,有三类语句: 指令语句完成操作功能,能翻译成机器代码 伪指令语句为汇编程序在翻译源程序时提供 有关信息 宏指令语句由若干条指令语句组成的语句,通用语句格式: 名字 操作项 操作数 ;注释,3.3.3 汇编语言语句格式,7,指令语句格式 标号:指令助记符目的操作数,源操作数;注释 其中, 表示可选项;,1、标号 标号是后续指
3、令的符号名称,可用符号是: 字母:A-Z, a-z 数字符: 0-9 专用字符:?, _, , $ 标号长度不超过31个字符,2、指令助记符 指令助记符是汇编指令的符号代码,不可缺省。 汇编源程序时,系统使用内部对照表将每条指令的 助记符译成相应的机器码。,8,3、目的操作数 1)参与指令操作 2)暂存操作结果 除立即寻址方式外,其他寻址方式均适用于目的操作数.,4、源操作数 提供原始数据或操作对象,面向所有寻址方式,5、注释 注释在系统汇编时并不产生机器码 注释可以放在指令语句尾,也可单独使用 注释前面的“;”不可缺少,9,常量 常量有两种: 1、数值常量 二进制数 以B结尾,如010111
4、01B 八进制数 以Q结尾,如235Q 十进制数 以D结尾或没有结尾字母,如98D或98 十六进制数 以H结尾,如5BH 2、字符串常量 用单引号括起来的一个或多个字符,如A、AB 字符用ASCII码形式存储,常量的应用: (1)在指令语句中作立即数 MOV CX, 100 (2)在指令语句中作位移量 MOV AX, 34SI (3)在数据定义语句中作初值 X DB 12H, 34H,10,变量和标号 变量有三种属性: 1、段属性变量所在段的起始地址 2、偏移属性从段起始地址到定义变量的位置之间的字节数 3、类型属性该变量所保留的字节数 DB 1个字节 DW 2 个字节 DD 4个字节 DQ
5、8个字节 DT 10个字节,11,标号也有三种属性: 1、段属性定义标号所在段的起始地址 2、偏移属性从段起始地址到定义标号的位置之间的字节数 3、类型属性表示它的转移特性 NEAR (近) 段内转移 FAR (远) 段间转移,12,处理器选择伪指令 数据定义和存储器分配伪指令 段定义伪指令 程序开始和结束伪指令 表达式赋值伪指令 地址计数器与对准伪指令 基数控制伪指令,3.3.4 伪指令,13,(一)处理器选择伪指令 .8086 可使用8086指令(一般不用写) .286 可使用80286指令 .286P 可使用保护方式下的80286指令 .386 可使用80386指令 .386P 可使用保
6、护方式下的80386指令 .486 可使用80486指令 .486P 可使用保护方式下的80486指令 .586 可使用Pentium指令 .586P 可使用保护方式下Pentium的指令 .686 可使用Pentium Pro指令 .686P 可使用保护方式下Pentium Pro的指令 .MMX 可使用MMX指令 .XMM 可使用SSE指令,当源程序使用了286及以上的机型新增加的指令时,应该在程序开始使用相应的处理器选择伪指令。,14,(二)数据定义伪指令 格式:变量名 定义符 操作数项表 操作:为变量分配存储单元并将初值置入相应单元中,操作数项可为: 1、常数或表达式 2、字符串 3、
7、?表达式 4、带DUP 的表达式,定义符可为: DB 定义字节 DW 定义字(2个字节) DD定义双字(4个字节) DF定义六字节 DQ定义八字节 DT定义十字节,操作数项表: 操作数项, 操作数项, 操作数项,15,操作数是常数或表达式 X1 DB 40H ;为X1分配1个字节,初值40H X2 DW 250*250 ;为X2分配2个字节,初值62500 X3 DD 10203040H ;为X3分配4个字节,初值为10203040H X4 DQ (120+50)/10 ;为X4分配8个字节,初值17 X5 DB 10, 20, 30 ;多项定义,X5被分配3个字节,初值分别为10,20,30
8、,地址从低到高,各个值间用逗号分开,16,操作数为字符串 STRING1 DB HELLO STRING2 DB H, E, L, L, O 字符串用DB定义,被定义串以单引号括起来 串中可包含数字符、大小写英文字母、回车符、 换行符、 空格、?、$、下划线_等 字符串以ASCII码形式存储在存储单元中。,STRING1 H +1 E +2 L +3 L +4 O,17,区分 S1 DB AB 与 S2 DW AB 它们的存储情况为: S1 S2 A B B A,操作数项为? ?用于预留空间,不置初值 Y1 DB 20H, ? ;定义2个字节,其中预留1个字节 Y2 DW ?, ? ;预留2个
9、字 Y3 DD ? ;预留4个字节 Y4 DQ ? ;预留8个字节 Y5 DT ? ;预留10个字节,18,操作数项带重复定义符DUP 格式: N DUP(操作数项表) 操作:以N所示次数定义操作数项表内容 VAR1 DW 2 DUP(2, 4), 1476H VAR2 DB 2 DUP(?, 2 DUP(A, B) ) 存储情况为: VAR1 02H VAR2 ? 00H A 04H B 00H A 02H B 00H ? 04H A 00H B 76H A 14H B,19,操作数运算符,算术运算符 逻辑运算符 关系运算符 数值回送运算符 属性运算符 运算符优先级,20,算术运算符(单目+
10、, 单目-, +, -, *, /, MOD) 运算符 格 式 运 算 + +表达式 取表达式正值 - -表达式 取表达式负值 + 表达式1+表达式2 求表达式1、表达式2之和 - 表达式1-表达式2 求表达式1、表达式2之差 * 表达式1*表达式2 表达式1、表达式2之积 / 表达式1/表达式2 表达式1、表达式2之商 MOD 表达式1 MOD 表达式2 取余数,说明: 1、算术运算符可用于数值表达式或地址表达式 2、用于地址表达式时,只有其结果有物理意义时才有效 常用的是:地址+数字常量 地址-数字常量,21,算术运算符示例 (1) MOV AL, 20+30 ;50AL MOV BH,
11、100-2 ;98BH MOV CX, 50/2 ;25CX MOV AL, 80 MOD 15 ;5AL,(3) 设数据定义如下: ARRAYA DW 1, 2, 3, 4, 5, 6, 7 WENDA DW ? 将数组长度(字数)存入CX: MOV CX, (WENDA-ARRAYA)/2 ; 地址-地址,结果为一常量,(2) 将首地址为BLOCK的字数组的第6个字传送到DX: MOV DX, BLOCK+(6-1)*2 ; 地址+常量,结果仍为一地址值,22,逻辑运算符(NOT,AND,OR,XOR) 运算符 格 式 运 算 NOT NOT 表达式 按位取反 AND 表达式1 AND 表
12、达式2 按位“与”运算 OR 表达式1 OR 表达式2 按位“或”运算 XOR 表达式1 XOR 表达式2 按位“异或”运算 逻辑运算符和逻辑运算指令的区别: 逻辑运算指令 逻辑运算符 出现在语句的位置 指令助记符 操作数字段 操作对象 可以是寄存器或 只能是整型常数 存储器操作数 何时计算 程序运行时 源程序汇编时,23,关系运算符(EQ,NE,LT,LE,GT,GE) 运算符 格 式 运 算 EQ 表达式1 EQ 表达式2 表达式1=表达式2为真 NE 表达式1 NE 表达式2 表达式1表达式2为真 LT 表达式1 LT 表达式2 表达式1表达式2为真 GE 表达式1 GE 表达式2 表达
13、式1=表达式2为真,关系运算符的两个操作数必须都是常量或同一段内的符号地址,比较结果为逻辑值:如果关系成立,则返回0FFFFH(真);否则,返回0(假)。,24,逻辑运算符示例 MOV AH, NOT 0F0H ;0FHAH MOV BL, 40H OR 0B4H ;0F4HBL XOR BL, 55H XOR 48H ;XOR BL, 1DH AND CH, 50H AND 30H ;AND CH, 10H,关系运算符示例 N1 EQU 10 N2 EQU 20 . MOV BX, N1 EQ N2 ; 0BX MOV CX, N1 NE N2 ;0FFFFHCX MOV AX, N1 LT
14、 N2 ;0FFFFHAX MOV DI, N1 GE N2 ;0DI,25,数值回送运算符 (SEG,OFFSET,TYPE,LENGTH,SIZE) 数值回送运算符对变量或标号进行分析, 回送其地址属性值或变量特征值。 (1)地址回送运算符 符号 作用对象 操 作 SEG 变量或标号 返回其所在段的段基址值 OFFSET 变量或标号 返回其在段内的偏移量,26,(2)符号特征回送运算符 符号 作用对象 操 作 TYPE 变量或标号 用数字表示其类型属性 LENGTH 变量 用DUP重复定义符定义的变量 ,返回分配的元素个数;其他 形式,则返回1 SIZE 变量 回送LENGTH*TYPE之
15、积,27,TYPE 运算符 类型属性 运算结果 变量 DB 1 DW 2 DD 4 DQ 8 DT 10 标号 NEAR -1 FAR -2,28,数值回送运算符示例 D_SEG SEGMENT NUM1 DB 10 DUP(10) ;数据定义 NUM2 DB 10H, 20H, 50H NUM3 DW 20 DUP(0, 4 DUP(2) NUM4 DB STRING D_SEG ENDS,MOV CL, SIZE NUM4 ;1*1CL MOV CH, SIZE NUM3 ;20*2CH,MOV AH, TYPE NUM3 ; 2AH MOV BH, LENGTH NUM3 ;20BH(最
16、外层),MOV SI, OFFSET NUM1 ;NUM1的偏移量SI MOV DI, OFFSET NUM2 ;NUM2的偏移量DI,MOV AX, SEG NUM1 MOV BX, SEG NUM2 ;NUM2与NUM1段基址值相同,注意OFFSET与LEA的区别,29,属性运算符 (PTR,SHORT),SHORT 格式: JMP SHORT 标号 操作: 转移的距离属性为短,即转移范围为-128+127字节,PTR 格式: 类型 PTR 表达式 操作: 对存储器寻址的表达式,类型可为BYTE,WORD,DWORD, QWORD和TBYTE; 表达式为标号时,类型可为NEAR或FAR。
17、该运算符显式指定表达式的类型,30,PTR 运算符示例 (1)DATA1 DB 10H, 20H, 30H DATA2 DW 4023H, 1A00H ;数据定义 MOV AX, WORD PTR DATA1 ;(AX)-2010H MOV BL, BYTE PTR DATA2 ;(BL)-23H PTR运算符指明DATA1由原来的字节变量临时 改变为字变量,而字变量DATA2则临时变为字节变量, 所谓临时是指在当前指令语句中有效,而存储分配情况 并不改变。,(2) MOV BYTE PTRSI, 60H ;字节传送 SUB WORD PTRBX, 36H ;字数据减 JMP FAR PTR
18、S1 ;段间转移,31,本课件涉及到的运算符优先级 优先级 运算符 类 别 1 LENGTH,SIZE 数值回送运算符 2 PTR,OFFSET,SEG,TYPE, 属性与数值回送运算符 3 +,- 符号运算符 4 *,/,MOD 算术运算,移位运算符 5 +,- 算术运算符 6 EQ,NE,LT,LE,GT,GE 关系运算符 7 NOT 逻辑运算符 8 AND 逻辑运算符 9 OR,XOR 逻辑运算符 说明:优先级1最高,而优先级9最低 圆括号()可改变执行顺序,32,(三) 段定义伪指令 1) 完整的段定义伪指令 格式:段名 SEGMENT 定位类型组合类型使用类型类别名 . 段名 END
19、S 操作:定义逻辑段,(1)定位类型 指定当前段的起始地址的性质 1、PARA 段起始地址的低4位为0H,即16的倍数。 2、PAGE 段起始地址的低8位为00H,即256的倍数 3、BYTE 段可从任意地址开始 4、WORD 当前段的起始地址为偶地址 5、DWORD 段的起始地址为4的倍数 默认项是PARA,33,(2)组合类型 说明程序连接时的段合并方法 1、PRIVATE 为私有段,连接时不与其他模块中的同名段合并 2、PUBLIC 不同模块的同名段连接在一起,形成参与邻接模块所公用的物理段 3、COMMON 产生一个覆盖段。与其它具有该类型的同名段拥有同一起始地址,共享相同的存储区。共
20、享存储区的长度由同名段中最大的段确定 4、STACK 功能同PUBLIC,但新形成的段为堆栈段 默认项是PRIVATE,34,(3)使用类型 说明使用16位还是32位寻址方式 USE16 使用16位寻址方式 USE32 使用32位寻址方式 386以下处理器默认项是USE16,386及以上处理器默认项是USE32,(4)类别名 LINK 程序将类别名相同的段依次序连续存放在 内存中。如果这些段未选择PUBLIC、COMMON组合 类型,则这些段将各自独立 缺省类别名,作空处理。,35,段定义伪指令示例 D_SEG SEGMENT PARA DATA NUM1 DB 10 DUP(?) D_SEG
21、 ENDS S_SEG SEGMENT PARA STACK DW 100 DUP(?) S_SEG ENDS E_SEG SEGMENT DATA STRING DB HELLO E_SEG ENDS ,36,2)指定段寄存器伪指令 格式: ASSUME 段寄存器:段名,段寄存器:段名. 操作: 明确段与段寄存器的关系。,说明: 1、代码段中必须至少有一个ASSUME语句 2、ASSUME可以出现在源程序中的任意地方 3、仅说明段与段寄存器的对应关系,除了在程序装入时将代码段和堆栈段的段基址赋值给CS和SS外,并没有把数据段和附加段的段基址值送入DS、ES、GS和FS寄存器中,需要在程序中显
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章80 x86汇编语言程序设计下 80 x86 汇编 语言程序设计
链接地址:https://www.31doc.com/p-2986881.html