




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 汇编语言层 内容回顾: 1.(宏)汇编语言的概念 2.汇编语言语句格式 3.80x86宏汇编语言的常数、变量、 标号、运算符和表达式 1 第1节 概述 1.汇编语言 一种面向机器的低级程序设计语言 符号化的机器语言,汇编指令与机器指令一一对应 用助记符(Memoni)代替操作码 用地址符号(Symbol)或标号(Label)代替地址码 2.宏汇编语言 一种更高级的汇编语言 包含一般汇编语言的功能,而且提供了记录、结构和 字符串操作;具有宏处理、条件汇编及DOS功能调用 等多种功能 2 标号指令助记 符 操作数注释:; , (1)指令语句格式 (2)伪指令语句格式 符号名伪指令符操作数注释; , 第2节 汇编语言语句格式 3 第3节 80x86宏汇编语言 数据、表达式和运算符 5.3.1 常数 纯数值数据、无属性、值不能改变 1. 数值常数(B、O、Q、D、H) 2. 字符常数( “” ASCII码) 4 5.3.2 变量 数据或存储单元的符号地址 5.3.3 标号 指令的符号地址, 转移类指令的目标地址 5.3.4 表达式与运算符 1.运算符 2.表达式 由常数、变量、标号通过运算符连接而成 5 第4节 80x86宏汇编语言伪指令 伪指令是汇编程序对源程序进行汇编时处理的操 作,完成处理器选择、存储模式定义、数据定义、存 储器分配、指示程序开始结束等功能。 赋值伪指令(EQU/=) 处理器选择伪指令 段定义伪指令(SEGMENT/ENDS) 段寻址伪指令(ASSUME) 段组伪指令(GROUP) 定位伪指令(ORG)与对准伪指令(EVEN) 过程定义伪指令(PROC/ENDP) 包含伪指令(INCLUDE) 标题伪指令(TITLE) 6 5.4.1 赋值伪指令 格式: 符号 EQU 功能: 将表达式的值赋给符号 1、EQU 常数/数值表达式 地址表达式 变量/标号/指令助记符 例:COUNT EQU 5 ADR1 EQU DS:BP+14 L1 EQU SUBSTART EQU伪指令不分配存储单元; 同一符号不能用EQU伪指令重新定义; 2、等号 = 格式:符号 = 表达式 功能:与EQU相同; 区别:可重新定义符号。 7 code segment code assume cs:code,ds:code,ss:code,es:code begin: num1 EQU 99 num2 = 66 sum dw ? main proc near mov ax, num1 add ax, num2 mov sum, ax main endp code ends 例: 8 5.4.2 处理器选择伪指令 用于确定选择使用哪种指令系统,缺省时为 8086/8088指令系统和8087协处理器指令集。 .8086 .286 .286P .486 .486P 通常放在源程序的开头位置。 其中,“P”表示保护模式 .386 .386P .586 .586P 9 5.4.3 段结构伪指令 1、段定义伪指令SEGMENT/ENDS 段名 SEGMENT 定位类型 组合类型 使用类型 类别名 段名 ENDS 格式: 功能:指定逻辑段的名字和范围、段的起始边界 、 段与段之间的连接关系等。 (1)段名必选,开始与结尾的段名一致 (2)定位类型可选,指定装入时的起始边界要求 4种:PAGE(页)、PARA(节)、 WORD(字)、 BYTE(字节) 默认 10 (3)组合类型可选,指定段与段之间的连接方式 6种:NONE(隐含)、PUBLIC、COMMON、 STACK、MEMORY、AT (4)使用类型 可选,指定386以上CPU的段模式 2种:USE16 段基值和偏移地址都是16位 USE32 段基值16位,偏移地址32位 (5)类别名 可选,单引号扩起来 2、段寻址伪指令 ASSUME 格式:ASSUME sr1:seg1 , sr2:seg2, 功能:建立段名与段寄存器之间的联系 段寄存器名 段名 11 DS_DATA SEGMENT VAR1 DB12H DS_DATA ENDS ES_DATA SEGMENT VAR2 DB34H ES_DATA ENDS CODE SEGMENT VAR3 DB 56H ASSUME CS:CODE, DS:DS_DATA, ES:ES_DATA START: INC VAR1 INC ES:VAR2 INC CS:VAR3 CODEENDS END START 例: 12 3、段寄存器的装载 (1) DS 和 ES 的装载用数据传送指令 例: MOV AX,DATA_DS ;设置DS MOV DS,AX MOV AX,DATA_ES ;设置ES MOV ES,AX (2)SS 的装载 自动装载:定义堆栈段时,组合类型置为STACK 。 STACK1SEGMENT PARA STACK DW 20H DUP(0) STACK1ENDS 用执行指令的方法装载:与DS/ES的装载方法类似 。 13 STACK1 SEGMENT DW 20H DUP(0) TOP LABEL WORD STACK1 ENDS CODE SEGMENT 。 MOV AX,STACK1 ;设置SS MOV SS,AX MOV SP,OFFSET TOP ;设置SP 例: 注:空栈,SP指向栈底 14 (3)CS 的装载(设置CS和IP) 使用结束伪指令END,格式如下: END 执行转移类指令时,CPU自动修改CS和IP。 5.4.4 段组伪指令GROUP 把程序中不同段名的段组成一个段组,格式如下: GROUP 段组名由程序设计人员设定; 可直接引用段名,也可用SEG /; 段组内各段间的程序转移可按段内转移处理; 段组内各段的数据存取操作可用同一个段寄存器。15 5.4.5 内存模式和简化段定义伪指令 1、内存模式伪指令 格式: .MODEL 6种模式:Tiny、Small、Medium、 Compact、Large、Huge 确定用户程序中代码和数据在内存中的存放方式。 2、简化段定义伪指令 .CODE 段名 ;代码段 .DATA ;数据段,已初始化数据 .DATA? ;数据段,未初始化数据 .CONST ;常数段 16 例: . MODEL SMALL . STACK 20H;定义堆栈段 . DATA;定义数据段 .CODE;定义代码段 BEGIN: MOV AH ,4CH INT 21H END BEGIN .FARDATA 段名 ;远数据段,已初始化数据 .FARDATA? 段名 ;远数据段,未初始化数据 .STACK长度 ;堆栈段 17 3、预定义符号 类似于EQU伪指令定义的等价符号,例如: Model、 Code、Data、Fardata、Stack 、 Codesize、 Datasize 5.4.6 定位和对准伪指令 1、位置计数器($) 2、定位伪指令(ORG) 记录正在汇编的数据或指令的目标代码 在当前段内的偏移地址。 $: 表示位置计数器的当前值。 设置位置计数器的值 格式: ORG 18 位置计数器 $ :保存当前正在汇编的指令的地址 ORG $+8 ; 跳过8个字节的存储区 JNE $+6 ; 转向地址是 JNE 的首址 +6 JMP $+2 ;转向下一条指令 $ 用在伪操作的参数字段: 表示地址计数器的当前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 00H 01H 00H 02H 00H 7CH 00H 03H 00H 04H 00H 82H ARRAY 007E 0078 0074 19 ORG 伪指令: SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 VAR2 DW 5678H ORG $+8 VAR3 DW 1357H SEG1 ENDS BUFFER LABEL BYTE ORG $+8 BUFFER DB 8 DUP (?) ORG 100H START: 20 3、对准伪指令(EVEN) 功能:将位置计数器的值调整为偶数。 格式: EVEN 5.4.7 过程定义伪指令 PROC/ENDP 过程名 PROC NEAR/FAR RET 过程名 ENDP 指令序列 过程定义在逻辑段内; 过程名是必须的; 至少有一条返回指令RET。 格式: 3个属性:段、偏移地址、类型属性; 21 5.4.8 包含伪指令 INCLUDE 格式: INCLUDE 功能:将指定文件插入到正在汇编的源程序中。 5.4.9 标题伪指令 TITLE 格式: TITLE 功能:为程序指定标题。 不超过80个字符; 指定的标题在列表文件中每一页的第一行显示。 在源程序开始处使用; 22 第5节 宏指令 1、宏指令的使用过程 3步:宏定义、宏调用和宏展开 (1)宏定义 宏名 MACRO 形参1,形参2, ENDM 宏体 例:定义宏,交换两个存储单元的数据 XCHAGE MACRO MEM1,MEM2,REG MOV REG ,MEM1 XCHG REG ,MEM2 MOV MEM1 ,REG ENDM 23 (2)宏调用 宏名 实参1,实参2, (3)宏展开(P226) 宏汇编程序扫描宏指令语句(宏调用) 时,用宏体的目标代码插入宏调用处; 对带参数的宏,用实参代替形参,并对 宏体中出现参数的地方作适当修改。 例,可对前面定义的宏调用如下: XCHAGE SI, DI, AX 24 (2)表达式操作符%(例) 格式: %表达式 功能:告诉宏汇编程序获取表达式的值, 而不是表达式本身。宏调用中 例:SHIFT_VAR MACRO R_M, DRECT, COUNT MOV CL, COUNT SBX清零 XORAX,AX ;AX清零 JCXZEXIT0 ;CX=0则跳到EXIT0 LOP:ADDBX,DX ADCAX,0 LOOPLOP EXIT0:MOVMULT3,BX MOVMULT3+2,AX ENDM 宏的功能:MULT1*MULT2=AX:BXMULT3+2,MULT3 28 两次调用MULTIP MULTIPDA1,DA2,DA3 MULTIPDA1+2, DA2+2,DA3+4 按照标号的顺序分别用 ?0000 ?0001 ?0002 ?0003 代替标号 LOP和EXIT0 4、宏库 通常用.MAC或.INC作为扩展名。 多个宏定义以文件形式组织成宏库。 使用时用INCLUDE伪指令。 include 文件名 29 编制汇编语言程序的步骤: (1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序 第6节 汇编语言程序设计基本技术 30 分支结构 子程序结构 程序结构: 复合结构:多种程序结构的组合 顺序结构 循环结构 31 例:试编制程序,计算下列公式的值,并将结果存放 在FUN存储单元中。 F 其中X,Y,Z的值分别存放在VARX、VARY、 VARZ三个字存储单元中,且计算过程的中间值和最后 结果仍在16位二进制数的范围内。编制源程序如下: TITLE EXAMPLE PROGRAM DATA SEGMENT ;设置数据段 VARX DW 123H;变量X VARY DW 456H;变量Y VARZ DW 789H;变量Z FUNDW ? ;结果单元 DATA ENDS STACK1 SEGMENT PARA STACK;设置堆栈段 DW 20H DUP(0) STACK1 ENDS 32 CODESEGMENT;设置代码段 ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA;置段基值于DS MOV DS,AX MOV AX,VARX;取变量X ADD AX,VARY;AX (X+Y) MOV BX,AX;BX (X+Y) SAL AX,1;AX2*(X+Y) SAL AX,1;AX 4*(X+Y) ADD AX,BX;AX 5*(X+Y) SAL AX,1;AX 10*(X+Y) MOV BX,VARZ;取变量Z DEC BX;BX (Z1) MOV CX,BX;CX (Z1) SAL BX,1;BX 2*(Z1) ADD BX,CX;BX 3*(Z1) SUB AX,BX;AX 10*(X+Y) 3*(Z1) SAR AX,1;AX 10*(X+Y) 3*(Z1)/2 MOV FUN,AX;存放计算结果 MOV AH,4CH;终止用户程序,返回DOS INT 21H CODEENDS END START 33 例:用查表方法将一位十六进制数(09,AF ) 转换成它对应的ASCII码。 首先在数据段建立一个表TABLE,按照十六进制数从小 到 大(即从09到AF)的顺序,在表中存入它们对应 的ASCII码值(十六进制数用大写英文字母AF)。为查 出某个数的ASCII码,需计算它在内存中的地址。 用简化段定义伪指令,编制源序如下: .MODEL SMALL;设置内存模式 .DATA;设置数据段 TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 4 ASCI DB ? 34 . STACK 100H;设置堆栈段 . CODE;设置代码段 START: MOVAX,DATA MOVDS,AX LEABX,TABLE ;取表首址 XORAH,AH ;AH清零 MOVAL,HEX ;取一位十六进制数 ADDBX,AX;确定查表位置 MOVAL,BX ;查表 MOVASCI,AL ;存结果 MOVAH,4CH;终止程序,返回DOS INT21H ENDSTART ;基址寻址 xor bx,bx mov bl,hex mov al,tablebx 寄存器间址 35 5.6.3 分支程序设计 1、转移指令 无条件转移指令 条件转移指令 直接寻址 间接寻址 段内转移 段间转移 单条件转移指令 无符号数条件转移指令 符号数条件转移指令 段内转移 段间转移 36 (1)无条件转移指令 格式: JMP 目标地址 目标地址有两种表达方式 a. 直接寻址:目标地址通常是标号 段内转移:相对转移,指令给出位移量DISP; 执行操作:IP (IP) + DISP 段间转移:指令中给出目标地址的段基值和指令中给出目标地址的段基值和 偏移地址;偏移地址; 执行操作:IP 偏移地址 CS 段基值 例如: JMP NEXT;NEXT为标号 JMP指令的下一指令 与目标地址所指的指 令之间的字节距离 37 b. 间接寻址: 目标地址通常由寄存器或存储单元提供 段内转移:寄存器或存储字单元提供偏移地址 执行操作:IP 偏移地址 段间转移: 由一个由一个双字单元双字单元提供目标地址的提供目标地址的 段基值和偏移地址;段基值和偏移地址; 执行操作:IP 偏移地址 CS 段基值 (2)条件转移指令 格式: Jxx 目标地址 只能在段内转移,而且是相对转移。 xx为转移条件 38 a. 单条件转移指令 指令 转移条件 含义 JC CF=1 有进位 / 借位转移 JNC CF=0 无进位 / 借位转移 JE/JZ ZF=1 相等 / 等于0 转移 JNE/JNZ ZF=0 不相等 / 不等于0转移 JS SF=1 是负数转移 JNS SF=0 是正数转移 JO OF=1 有溢出转移 JNO OF=0 无溢出转移 JP/JPE PF=1 有偶数个“1”转移 JNP/JPO PF=0 有奇数个“1”转移 39 b. 无符号数条件转移指令 指 令 转 移 条 件 含 义 JA/JNBE CF=0 AND ZF=0 AB转移 JAE/JNB CF=0 OR ZF=1 AB转移 JB/JNAE CF=1 AND ZF=0 A B转移 JGE/JNL SF=OF OR ZF=1 AB转移 JL/JNGE SFOF AND ZF=0 A OF Jump if less/not greater or equal (signed comparisons) JGE/JNL SF=OF Jump if greater or equal/not less (si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度春季四川省国有资产投资管理有限责任公司招聘8人笔试参考题库附带答案详解
- 黄冈师范学院《动画设计与制作》2023-2024学年第二学期期末试卷
- 邢台应用技术职业学院《计算机通信与网络实验》2023-2024学年第二学期期末试卷
- 丽江文化旅游学院《冶金热力学参数测定与分析》2023-2024学年第二学期期末试卷
- 河南师范大学《无机非金属材料工艺学》2023-2024学年第二学期期末试卷
- 上海外国语大学贤达经济人文学院《网络传播与法规》2023-2024学年第二学期期末试卷
- 湖北工程学院《针织物设计与试织》2023-2024学年第二学期期末试卷
- 广东南方职业学院《环境工程CAD实验》2023-2024学年第二学期期末试卷
- 北京北大方正软件职业技术学院《建筑工程制图与识图》2023-2024学年第二学期期末试卷
- 重庆五一职业技术学院《图案与字体设计》2023-2024学年第二学期期末试卷
- 完全病历模板
- 食材配送服务人员配置方案
- 幼儿园新生入园报名登记表
- 人工流产-清宫术知情同意书
- 中国临床戒烟指南的指导意义
- (完整版)EORTC生命质量测定量表QLQ-C30(V3.0)
- 医院医学影像科CT-MR室诊疗指南和操作规范2022版
- 金税工程(三期)总体实施方案
- ABAQUS官方培训资料PPTlecture7-job-visualization
- 苏教版四年级数学下册确定位置
- 【超星尔雅学习通】数字影视编导与制作网课章节答案
评论
0/150
提交评论