第4章 8086,88汇编语言程序设计

合集下载

汇编语言程序设计

汇编语言程序设计

汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。

⼆、8086汇编语⾔程序的⼀个例⼦Pg90。

§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。

指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。

也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。

⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。

3.常量出现在汇编语⾔源程序中的固定值称为常量。

(1)数值常量①⼆进制:以字母B结束。

②⼗进制:以字母D或⽆字母结束。

③⼋进制:以字母Q(或O)结束。

④⼗六进制:以字母H结束。

(2)字符常量指⽤单引号或双引号引起的字符或字符串。

4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。

⼀个标识符不能超过31个字符,不能以数字开头。

5.保留字汇编语⾔中具有特殊意义的字符序列。

6.注释⼀⾏中分号以后的部分。

⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。

⼆、符号具有⼀定意义的字符序列。

1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。

1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。

第4章. 80868088汇编语言程序设计

第4章. 80868088汇编语言程序设计

指令语句
是一种执行性语句,它在汇编时,汇编程序将为之产生 一一对应的机器目标代码。 汇编指令 机器码
MOV ADD
DS,AX AX,BX
8E D8 03 C3
伪指令语句
是一种说明性语句、指示性语句,它在汇编时只为汇编程序 提供进行汇编所需要的有关信息,如定义符号,分配存储单元, 初始化存储器等;指示性语句由汇编程序执行。它指出汇编程序 应如何对源程序进行汇编,如何定义变量,分配存储单元以及指 示程序开始和结束等。指示性语句没有机器码指令相对应。 DATA SEGMENT AA DW 20H,-30H DATA ENDS
4.各种寻址方式下操作数的表达式
1)常量与数值表达式 (1)常量是指那些在汇编过程中已经有确定数值的量,它主要用作指令语句 中的立即操作数 、变址寻址和基址加变址寻址中的(位移量DISP)或在 伪指令语句中用于给变量赋初值。 (2)常量分‚数值常量‛(也称字面常数)与‚符号常量‛两种。 数值常量:以各种进位制数值形式表示,以后缀字符区分各种进位制, 后缀字符H表示十六进制,O或Q表示八进制,B表示二进制,D表示十进 制,十进制常省略后缀。 符号常量:预先给常量定义一个‚名字‛,然后在汇编语句中用该‛名字‛ 表示该常量。采用符号常量的优点是改善程序的可读性;如果将符号常量作 为程序的参数,则可方便地实现参数的修改,增强程序的通用性。其定义需 用伪指令命令(伪指令)‚EQU”或‚=”。 例:ONE EQU 1 DATA1=2*12H MOV AX,DATA1+ONE 即把25H送AX。 常量是没有属性的纯数据,其值是在汇编时确定的。

段可以从性质上分为代码段、堆栈段、数据 段和附加段4种,但代码段与堆栈段是不可少的,数 据段与附加段可根据需要设臵。 在上面这个例子中,一共定义了3个段: 1个数据段 1个堆栈段 1个代码段

汇编语言程序设计 第4章 8086 8088汇编语言(格式)

汇编语言程序设计 第4章 8086 8088汇编语言(格式)

1
《汇编语言程序设计》 汇编语言程序设计》
课前思考
• (1) 建立并运行一个汇编语言程序有几个操作步骤? 建立并运行一个汇编语言程序有几个操作步骤? 指令和伪指令的区别是什么? (2) 指令和伪指令的区别是什么? 在汇编语言程序中, (3) 在汇编语言程序中,段定义伪指令和数据定义伪指 令起什么作用? 令起什么作用? 变量和标号的类型属性分别有哪几种? (4) 变量和标号的类型属性分别有哪几种? 什么是表达式?表达式的优先级顺序是如何排列的? (5) 什么是表达式?表达式的优先级顺序是如何排列的? 汇编语言的上机过程是什么? (6) 汇编语言的上机过程是什么? (7) 汇编语言源程序一般由几个段组成? 汇编语言源程序一般由几个段组成? 汇编程序和连接程序的输入、输出文件有哪些? (8) 汇编程序和连接程序的输入、输出文件有哪些?它 们的作用是什么? 们的作用是什么?
2010-11-17
汇编语言( 第4章 8086/8088汇编语言(格式) 章 汇编语言 格式)
8
《汇编语言程序设计》 汇编语言程序设计》
第4章 8086/8088汇编语言(格式) 8086/8088汇编语言 格式) 汇编语言(
4.1 汇编语言和汇编程序的基本概念 4.2 汇编语言源程序书写格式 4.3 伪指令语句 4.4 8086/8088汇编语言程序格式 8086/8088汇编语言程序格式 4.5 汇编语言的上机过程
《汇编语言程序设计》 汇编语言程序设计》
8086/8088和ARM核 8086/8088和ARM核 汇编语言程序设计
第4章 8086/8088汇编语言(格式) 8086/8088汇编语言 格式) 汇编语言(
2010-ቤተ መጻሕፍቲ ባይዱ1-17

chapter 4-3 80868088汇编语言程序设计

chapter 4-3 80868088汇编语言程序设计

DI, D1 DX, [DI] CX, [DI+2] BX, [DI+4] SI, [DI+6] DI, D2 DX, [DI] CX, [DI+2] BX, [DI+4] SI, [DI+6] AL, 0 AL, 0 AH, 4CH 21H BG
;将D1表示的偏移地址送DI ;取第1操作数到寄存器中


注意:上机汇编、连接时,文件扩展名可省去。
8
4.3.2 分支结构程序
要求计算机作出判断,根据判断结果做出不同处理。即 根据某条指令运行的结果是否满足一定的条件来改变程
序执行的顺序,从而去执行不同的分支程序。
条件

分支 1

分支 2
9
【注意】:
带符号数的条件转移指令: JG/JNLE、JL/JNGE、JGE/JNL、JLE/JNG
;将D2表示的偏移地址送DI
;最高位进位放入AL ;程序结束,返回DOS操作系统
汇编语言上机前的软件准备:

MS-DOS操作系统(如:MSDOS6.2、MSDOS7.0 等) 文本编辑器(如:记事本、WORD、 等) 汇编程序(如:MASM.EXE、ASM.EXE等) 连接程序(如:LINK.EXE等) 调试程序(如:DEBUG.EXE等)
第四章
8086/8088汇编语言程序设计
主讲教师:胡晓娟
4.3 8086/8088汇编语言程序设计基本方 法
进行汇编语言程序设计可以参考下述步骤: ① 分析问题,建立基于问题的数学模型
② 设计算法
③ 绘制流程图或结构图 ④ 编写程序 ⑤ 上机调试 在DOS环境下的8086/8088汇编语言程序结束时,通常用DOS的 4CH号中断调用,以便使程序控制返回 DOS操作系统。 MOV AH, 4CH INT 21H

(微机原理)第4章8086汇编语言程序设计

(微机原理)第4章8086汇编语言程序设计

逻辑运算指令的编写与使用
逻辑操作
包括与、或、异或、非等运算。
测试指令
对某一位或某一组存储单元进行 运算和测试。
字符串操作
适合处理字符串拼接、截取等操 作。位操作指令的编写与使用 Nhomakorabea1
设置指令
包括STC、STD等,可设置标志寄存器中
输入输出
2
相应的位。
指令IN、OUT等,可实现从外部设备的输
入和输出。
堆栈是一种重要的存储结构,在程序中 起到了重要的作用。
寄存器的种类及其功能
通用寄存器
8个通用寄存器,用于存储数据 或内存地址。
计数器与时序寄存器
用于计数和处理时间信息。
状态标志寄存器
记录程序的运行状态,如进位标 志、零标志、符号标志等。
数据传输指令的编写与使用
MOV
用于数据传输,是汇编程序常用的一种指令。
3
控制指令
HLT、WAIT等控制指令,可控制程序的执 行。
转移指令的编写与使用
JMP
无条件转移指令,直接跳转到指定的地址。
JE
条件转移指令,按指定条件进行转移操作。
CALL
过程调用指令,可将参数传递给被调用的程序。
RET
过程返回指令,将跳转到调用指令后面的位置。
输入输出指令的编写与使用
IN 指令
从设备或端口读入数据到指定的 操作数中。
O U T指令
将指定的操作数中的数据送到设 备或端口中。
PUS H /PO P指令
将寄存器的值压入堆栈或从堆栈 中取出数据。
堆栈操作的编写与使用
1
PUSHA/POPA
将16个通用寄存器的值一次性入栈或出栈。
2

第4章 汇编语言程序设计

第4章  汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)

第4章80868088汇编语言程序设计1PPT课件


0F1D4H
‘xxx’或“xxx” ‘AB’
常量的应用
1)指令语句源操作数中做立即数,它应与目的操 作数的位数相一致,可以是8位或16位的。 如: MOV AX,1234H 2)在指令语句中的基址加变址的寻址方式中作位 移量。 如:MOV BX,[SI+32H] 3)在数据定义伪指令中。 如:DB 12H ;定义一个字节数据
第4章 8086/8088汇编语言程序设计
X86系列微处理器指令系统
保护模式
基本指令集
制 控
指 统强
指 令令
系 增 基本指令集 集 集
8086/8088 116条指令
Pentium 306条指令
实模式
4.1 程序设计语言概述 4.2 8086/8088汇编语言的基本语法 4.3 汇编语言程序设计基本方法
CPU不执行,而由汇 编程序执行的语句, 不生成目标代码
二 汇编语言语句格式
1 指令性语句: [标号:] [前缀] 助记符 [操作数],[操作数] [ ;注释]
指令的符号地址, 操作码 标号后要有冒号
注释前加分号
2指示性语句格式: [名字] 伪指令助记符 操作数 [,操作数,…] [ ;注释]
变量的符号地址,其 后不加冒号
操作数 (数据项和表达式)
操作数
寄存器 存储器单元 常量 变量或标号 表达式
1 常量
数值常量 符号常量(用EQU或=定义)
数值常量:
二进制 八进制 十进制 十六进制 字符串
xxxxxxxxB
01000101B
xxxO 或xxxQ 721O或721Q
xxxx或xxxxD 1991或1991D
xxxxH
;(AL)= 2

第九讲 8086汇编语言程序设计(3)

式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、 Y、Z、V中,结果存放在双字变量W之中, 程序的流程图如图4.1所示。
•第四章 8086/8088汇编语言程序设计
• 图 4 . 1 顺 序 运 算 程 序 流 程 图
•第四章 8086/8088汇编语言程序设计 源程序如下: DATA SEGMENT X DW 200
EXIT: MOV AH,4CH
END
START
•第四章 8086/8088汇编语言程序设计
例4.4:试编一程序,求三个带符号字数据中的最大值,并 将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。 程序流程图如下图所示
例4.4程 序流程图
•第四章 8086/8088汇编语言程序设计
Y
Z V
DW
DW DW
100
3000 10000
W DW
2 DUP(?)
DATA ENDS STACK SEGMENT PARA STACK ’STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK
•第四章 8086/8088汇编语言程序设计 START:MOV AX,DATA MOV MOV DS,AX AX,X ;DATA→AX
•第四章 8086/8088汇编语言程序设计 程序如下: DATA SEGMENT DATA1 DB 80 DUP(?);学生成绩 DATA2 DB 5 DUP(0);为统计结果留出存储单元 DATA ENDS ; CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV CX,80 LEA SI,DATA1 LEA DI,DATA2

汇编语言程序设计

第四章汇编语言程序设计(assembly languageprogramming)§4.1 汇编语言(assembly language)一.概述汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,用标号或符号代表地址、常量和变量,与机器语言几乎一一对应汇编语言程序:用汇编语言编写的程序汇编:把汇编语言源程序翻译成机器语言目标程序的过程汇编语言源程序手工汇编或汇编程序机器语言目标程序汇编程序:用来完成汇编工作的程序,有小汇编ASM宏汇编MASM动态调试程序DEBUG二.汇编语言的语句格式: [名称] 指令助记符 [操作数] [;注释]带方括号的项有时可没有,注释项完全可以没有每个部分用空格分开每行最多可有132个字符,但最好不要超过屏宽80语句可分成指令性语句和指示性语句(伪指令语句)指令性语句汇编后可生成机器码[标号:] 指令助记符 [操作数] [;注释]指示性语句指示汇编程序处理一些工作[名称] 伪指令(指示符) [操作数] [;注释]1.名称(或称标识符)给指令或存储单元地址起的名字,由字母、数字、字符组成字母:A~Z ,a~z数字:0~9字符:可打印+-*/=()[]〈〉;.' ’ ,_:?@$&(非打印空格制表符TAB 回车换行)(界符:,;:.()[]〈〉+-*/=?_@&$' ’界符用来表示某个标志的结束)数字不能作名称的第一个字符,圆点.仅能作第一个字符保留字不能作标识符($、?是保留字,与其它字符组合除外)名称最长为31个字符当名称后跟冒号,表示该名称是其后指令的标号,代表该指令的开始地址,其他指令可以用该标号作为转移地址当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不跟冒号冒号隐含NEAR属性,例:供段内调用写成 OUTPUT:OUT DX ,AL供段间调用写成 OUTPUT OUT DX ,AL2.指令助记符8086/8088指令,也可以是伪指令,如果指令有前缀(LOCK、REP等)则前缀和指令用空格分开3.操作数指令执行的对象,可能有一、二个或没有名称指令助记符操作数注释RET ;返回(无操作数)COUNT: INC CX ;CX加1(1个操作数)MOV AL,BL ;ALBL(2个操作数)伪指令可有多个操作数COST DB 3,4,5,6,7,8 ;(6个操作数,用逗号分开)操作数可以是常数、寄存器名、标号、变量、表达式,MOV AX,[BP+4];(第二个操作数为表达式)4.注释可选项,使程序易读,汇编时不作处理注释前面要加分号,它可位于操作数之后,也可位于行首三.常量与变量1.常量,也叫常数,没有属性的纯数,汇编时已确定的值·数字常量为0~65535中的数(16位寄存器使用,伪操作可定义32位),进制加后缀说明,十进制加D(可省),二进制加B,八进制加Q,十六进制加H,若十六进制第一位为字母,则前头应加0·字符和字符串叫串常量,是ASCII码字符串,必须加单(或双)引号例:‘A’,“ABC”,汇编后变成41H,414243H2.变量,用于表达数值(或串)的标识符,有三个属性① 段属性(SEGMENT)② 偏移地址属性(OFFSET)③ 类型属性(TYPE),用DB、DW、DD定义§4.2 伪指令(pseudo-instruction)一.符号定义伪指令1.等值EQU格式:符号名 EQU 表达式用来给符号定义一个值,程序中出现该符号就用其值代替,EQU只能定义一次DATA EQU 1234 ;代表一个数XYZ EQU ALPHA[SI] ;代表一个地址2.等号 =格式:符号名 = 表达式意义与EQU一样,但程序中可重新定义符号的值EMP = 6 ;EMP代表6EMP =EMP + 1 ;EMP现在代表73.解除PURGE格式:PURGE 符号名(符号1,符号2,……,符号n)用于解除所定义的符号使该符号在以后的定义中有效例:原定义 TAB EQU 5可用 PURGE TAB 来解除然后可重新定义 TAB EQU 10二.数据定义伪指令用于预置存储器或定义变量1.定义字节DB格式:[变量名称] DB 表达式例:DATA1 DB 2,3,4,5;从DATA1单元开始存放4字节数据2.定义字DW格式:[变量名称] DW 表达式例:TAB DW 1234H;TAB单元内容为34H,TAB+1单元内容为12H 3.定义双字DD格式:[变量名称] DD 表达式每个数据二字(四字节)低位部分在低地址,高位部分在高地址·用DB/DW/DD定义的数每行不得超过16项,超过16项必须换行DB/DW/DD用法<1> SUM DB ? ;给SUM单元分配一个字节,内容未定<2> TAB DB 20 DUP(0);给TAB开始单元分配20字节,内容为0<3> TIME DW 100 DUP(?);给TIME开始单元分配100字,内容未定<4> ADDR DD TABLE ;TABLE的地址(双字)给ADDR例:DATA SEGMENTORG 100HTABLE DB 1,2,3,4ADDR DD TABLEDATA ENDS假设汇编后DS=13A2H(如果ADDR用DW定义,只得偏移量)(如果TABLE是变量,ADDR得地址,是常量,ADDR得数值)<5> LETTER DB ‘ABCDEFG’;将字符串以ASCII码形式填入LETTER开始的内存<6> HIS DB 3 DUP(‘WELCOME!’,0DH,0AH);从HIS单元开始重复3次存放WELCOME!和回车换行符4.标号LABEL格式:标号名 LEBEL 类型标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,供调用和转移之用标号有三个属性段属性偏移量属性距离属性(即格式中的类型):NEAR(近程)和FAR(远程)NEAR:本标号为段内标号,调用本标号只提供偏移地址,段基址为当前代码段FAR:本标号为段间标号,调用本标号提供偏移地址和段基址一个具有NEAR属性的标号也可用标号加冒号作后缀,并排列在代码行的开头来隐含如 AGAIN LABEL NEARXOR AX,BUFF[BX]可写成 AGAIN:XOR AX,BUFF[BX]例:ROOT LABEL NEAR ;以下程序所用的ROOT标号是段内属性COMP PROC NEAR ;以下程序所用的过程下的标号是段内属性TIME PROC FAR ;以下程序所用的过程下的标号是段间属性三.运算符1.算术运算符+、-、*、/、MOD即加、减、乘、除、除法取余数(如19 MOD 7=5)操作数是数字,结果也是数字存储器地址运算时只有加减,例TAB+2、BETA-5等2.逻辑运算符AND、OR、XOR、NOT即与、或、异或、非操作数是数字,结果也是数字例:AND BX,DAT AND 0FEH3.关系算符EQ、NE、LT、GT、LE、GE即相等、不等、小于、大于、小于等于、大于等于若关系是假结果为0,若关系是真结果为0FFFFH例:MOV BX,PAD LT 3则PAD的值小于3时,汇编成MOV BX,0FFFFH否则,汇编成MOV BX,04.分析运算符可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型5.合成算符由已存在的存储器操作数生成一个段值与偏移量相同,而类型不同的新的存储器操作数以下讨论分析算符和合成算符1.取段基址SEG它加于一个变量或标号之前,回送段基址,例:ASSUME CS:SEG BEGIN ;令CS为BEGIN程序段段基址MOV AX,SEG VARN ;将VARN的段基址送AX2.取偏移量OFFSET它加于一个变量或标号之前,取其偏移量,例:MOV BX,OFFSET SUM ;将SUM的段内偏移量存入BX3.取类型码TYPE它加于一个变量或标号之前,取其类型代码DB DW DD DQ DT NEAR FAR1 2 4 8 10 -1 -2例:NG1 DB ‘A’,‘D’,3NG2 DW 88,265……MOV AL,TYPE NG1 ;NG1定义字节,AL 1MOV AL,TYPE NG2 ;NG2定义字,AL 24.取长度LENGTH它加于一个变量之前,取分配给变量的项数例:TAB DB 150 DUP(?);150项,150字节FUM DW 150 DUP(?);150项,300字节则,MOV CX,LENGTH TAB ;CX 150MOV AX,LENGTH FUM ;AX 150·注意:LENGTH返回的存储区必须用DUP()来定义,否则返回为1 5.取字节数SIZE它加于一个变量之前,取回变量所占字节总数,有SIZE = LENGTH * TYPE由上例,LENGTH TAB = 150,TYPE TAB = 1LENGTH FUM = 150,TYPE FUM = 2可知: SIZE TAB = 150SIZE FUM = 300以上5个叫数值返回算符6.类型指示PTR格式:类型 PTR 地址表达式表示PTR右边的(存储器)操作数是左边的类型,有:BYTE、WORD、DWORD、NEAR、FAR例:INC BYTE PTR [BX] ;将BX指向的单元字节加1MOV WORD PTR [DI],99 ;立即数99送DI指向的字中JMP NEAR PTR FOK ;以近程方式跳转到FOK(只取FOK偏移地址)7.指定符THIS(合成算符)用于定义当前所指单元中的类型格式:THIS 类型/距离经THIS定义过的标号具有当前汇编段、偏移量和所规定的类型或距离等属性,例:FOOB EQU THIS BYTE;下面的字类型变量FOOW在这里指定为字节型FOOBFOOW DW 120 DUP(?)定义后,对同一数据块(FOOB和FOOW有相同的段和段内偏移量)有两种类型访问FOOB时为字节操作,访问FOOW时为字操作ADD AL,FOOB[3] ;将数组第四字节与AL相加MOV AX,FOOW[4]将数组第五六字节组成的字送AX也可以这样来构成FOOB:FOOB EQU BYTE PTR FOOW又例:DATAF EQU THIS FARDATAN:MOV AX,FOO这时 JMP DATAN为近程转移JMP DATAF为远程转移8.段修改符:用于对某一地址表达式指定临时段基址,如MOV AX,ES:[BX];指定ES为BX的段基址,对当前指令有效9.短程符SHORT与NEAR、FAR功能类似,位移量一字节范围 -128~+127,对应一条短转移指令例:JMP SHORT LAB;转移到标号LAB的地址10.方括号 [ ]表示操作数(加方括号)是一个地址偏移量,不是数值格式:[表达式] 或者 [表达式][ ]例:MOV [BX],AX ;将AX内容送BX所指单元MOV [BX+7],AX ;将AX内容送BX+7所指单元MOV AX,[BX][SI] ;将BX+SI所指单元内容送AX11.取高/低字节HIGH/LOW用来分离常量的高/低字节,对存储器操作数无效例:DATA EQU 789AHMOV AL,HIGH DATA ;AL=78HMOV AL,LOW DATA ;AL=9AH四.段定义伪指令1.SEGMENT—ENDS格式:[段名] SEGMENT [定位类型] [组合类型] [‘类别名’]┇[段名] ENDS·段名·定位类型(Align),给出实际段地点的种类或段长度的信息<1> PARA 段起始地址从一个节(paragraph)的边界开始<2> BYTE 段地址可从任意绝对地址开始<3> WORD 段地址从任意一个字的边界开始<4> PAGE 段地址从某一页的边界开始(一页等于256字节)<5> INPAG 段长度小于一页未说明定位类型时则默认为PARA·组合类型(Combine),又称联合类型,程序中各程序段的连接和定位方法<1> PUBLIC 将段名相同的程序段(亦称模块)依此紧密连接,但彼此不相互覆盖<2> COMMON将段名相同的程序段连接,各段都从同一地址开始<3> AT表达式段定位在由表达式(结果必须是常数)所指定的节的边界上例:AT 1234H,则段地址被定位在物理地址为12340H处,如果希望从12345H开始,则在SEGMENT命令的下一行写上ORG 5AT 不能向前引用<4>STACK 表示这个段是运行期间的堆栈段<5>MEMORY 该段是相互连接的几个段中地址最高的段<6>NONE本段与其他段无组合关系未说明联合类型时则默认为NONE,不和别的段连接·‘类别名’(Class),也叫组名,加单引号,汇编后类别名相同的程序段代码集中在一起定位,形成一个统一的物理段,类别名可自定,约定的有CODE (代码段)、DATA(数据段)、STACK(堆栈段)、CONST(常数)、MEMORY(存储)等2.ASSUME段寄存器说明伪指令,指明所定义的段名所使用的段寄存器(告诉汇编程序在运行期间通过哪一个段寄存器寻址才能找到所要的指令和数据),本语句一般在定义的代码段中第一条出现格式:ASSUME 段寄存器:段名 [,…]例: ASSUME CS:CODE,DS:DATA ;用SEGMENT—ENDS定义ASSUME CS:SEG KGF,DS:SEG BEGIN;由算符定义ASSUME ES:NOTHING ;用关键字定义,表示不使用ES(取消ES段寄存器)(保留字NOTHING在这里作为一个段名参数,ASSUME NOTHING表示取消所有段寄存器,各个段寄存器只能在指令性语句中由MOV指令赋值)·ASSUME只是设定段寄存器与逻辑段的对应关系,并没给段寄存器装入实际值,所以程序中必须对DS、ES、SS赋值,而CS由系统赋值3.ORG定点伪指令(段内定位),用以确定下一条指令(或变量)在当前段中的偏移地址格式:ORG 表达式表达式以65536(64K)为模计算,超过64K则取其余数本语句前未定义过的变量不可出现在表达式中,表达式可包含$(程序计数器当前值)如:ORG OFFSET $+1000表达式必须为正值,若为负值,就会从当前段的地址高端开始表达式最好不要写成OFFSET $-1000,以免把汇编过的1000个字节覆盖掉ORG指令不能带标识符,如START:ORG 0和SKIP ORG 100都是错的例:CODE SEGMENT ;段起始ORG 100H ;本程序代码从偏移地址100H开始装入ASSUME CS:CODE ;装入代码段地址到CS中START:IN AL,30H ;程序段SHL AL,1OUT 32H,ALJMP STARTCODE ENDS ;程序段结束END START ;汇编结束例:DATA SEGMENTORG 50HDAT DW 1,2,$+1┇DATA ENDS注意DAT不能定义为字节,否则与$不匹配五.过程定义伪指令格式:过程名 PROC 属性┇过程体RET过程名 ENDP·过程名不可缺省,它和标号一样有三个属性:段属性、偏移地址属性、距离属性·距离属性在PROC后指定,有NEAR和FAR,如果希望过程能让别的程序调用,则必须是FAR属性·一个过程允许多个入口,入口处有标号,标号要说明距离属性例:延时100ms子程序DELAY PROC ;隐含NEARMOV BL,10 4TDLY1: MOV CX,2801 ;内循环延时10ms 10TWAIT0: LOOP WAIT0 9/5T DEC BL 2TJNZ DLY1 8/4TRET 8TDELAY ENDP六.结束伪指令·NAME:给模块(源程序)命名格式:NAME 模块名称它出现在源程序的最前端·END:汇编结束格式:END [标号名]它通知汇编程序本模块汇编到此结束标号名是可选项,若选取,应指向执行本程序的起始地址若一个源程序是多模块,只有主模块的END后加标号,子模块只有END七.宏指令宏指令:在汇编语言源程序中多次重复出现的程序段,用一个名字来定义,然后当成一条指令来使用宏汇编:源程序中的宏指令经汇编程序翻译后扩展成对应程序段的机器码宏指令用MACRO—ENDM来定义,如:CRLF MACROMOV DL,0DHMOV AH,02HINT 21H┇ENDM(CRLF作回车换行)§4.3 汇编语言程序设计(assembly language programming)一.设计要求1.程序简明、易读、易调试、易修改2.程序占用内存要少(包括程序长度及运行时所需空间)3.程序运行速度要快二.基本设计方法1.选择合适的计算方法2.绘制程序流程图3.编制程序4.上机调试三.汇编语言程序格式和基本结构一般一个完整的汇编语言程序至少应包括以下三个程序段简化段格式:.MODEL SMALL.STACK 64H.DATA……;紧接指令代码从偶地址开始存放.CODESTART: MOV AX,@DATAMOV DS,AX……END STARTDATA SEGMENT ‘DATA’┇数据段DATA ENDSSTACK SEGMENT ‘STACK’┇堆栈段STACK ENDSCODE SEGMENT ‘CODE’ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX┇代码段CODE ENDSEND START程序的基本结构分为顺序结构、分支结构、循环结构和子程序结构(一)顺序结构一种简单程序,按顺序执行例1.将200H单元的低4位和高4位分别送入201H和202H单元的低4位,这二单元的高4位清0200HX X201H 0202H 0DATA SEGMENTORG 200HBCD DB 47HDB 2 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACK MOV SS,AXMOV AX,TOPMOV SP,AXMOV BX,OFFSET BCD MOV AL,[BX]AND AL,0FHMOV [BX+1],AL MOV AL,[BX]MOV CL,4ROL AL,CLAND AL,0FHMOV [BX+2],AL HLTCODE ENDS END START例2.将ADDR1和ADDR2两单元开始的二个16位无符号数相加,考虑到进位,将其结果存放在SUM开始的三个单元中DATA SEGMNETADDR1 DW 7854HADDR2 DW 9981HSUM DB 3 DUP(0)DATA ENDSSATCK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,ADDR1ADD AX,ADDR2MOV WORD PTR SUM,AXADC SUM+2,0HLTCODE ENDSEND START例3.查表将DATA1单元中字节类型数据(0~0FH)转换成ASCII码,并存入ASCII单元中DATA SEGMENTASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HDATA1 DB 09HASCII DB ?DATA ENDSSTACK SEGMENT STACKDW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARASCTAB 30 031 1┇93941 A42 B┇46 F┇ASCIIPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET ASCTABMOV AL,DATA1XLATMOV ASCII,ALRETSTART ENDPCODE ENDSEND START例4.将200H和201H单元字节的高4位对调,低4位不变CODE SEGMENT200H201HORG 200HDATA1 DB 0F3H,47HASSUME CS:CODE,DS:CODESTART:MOV AX,CODEMOV DS,AXMOV CL,4MOV AX,WORD PTR DATA1 ;AX=47F3HROL AX,CL ;AX=7F34H ROL AH,CL ;AX=F734H ROL AL,CL ;AX=F743H MOV WORD PTR DATA1,AXHLTCODE ENDSEND START(二)分支结构通过判断产生分支,借助于条件转移指令跳转到相应的分支地址执行分支程序分支程序由三部分组成① 测试部分,负责产生决定分支的条件② 定向部分,根据测试条件是否满足,决定程序是否分支③ 标注部分,标明分支的去向利用跳转表也可使程序转移到分支地址例1.16位二进制补码X在DATA1单元,求其绝对值送DATA2单元(设X≠8000H)∣X∣= X,X≥0-X, X<0DATA SEGMENTDATA1 DW 9F87HDATA2 DW ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,DATA1AND AX,AXJNS ABS0NEG AXABS0: MOV DATA2,AXHLTCODE ENDSEND START例2.多重分支学生成绩按分数段划分为:A、90~100(5AH~64H)B、80~89 (50H~59H)C、70~79 (46H~4FH)D、60~69 (3CH~45H)E、 <60 ( <3CH)已知分数存放在MARK单元,请用ASCII码的A、B、C、D、E去代表MARK单元中的分数所属的段,并存于GRADE单元DATA SEGMENTMARK DB 81GRADE DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET MARKMOV AL,[BX]CMP AL,3CHJC LPECMP AL,46HJC LPDCMP AL,50HJC LPCCMP AL,5AHJC LPBMOV AL,41H ;‘A’JMP SHORT DONELPB: MOV AL,42H ;‘B’JMP SHORT DONELPC: MOV AL,43H ;‘C’JMP SHORT DONELPD: MOV AL,44H ;‘D’JMP SHORT DONELPE: MOV AL,45H ;‘E’DONE: MOV BX,OFFSET GRADE MOV [BX],ALHLTCODE ENDSEND START法2:直接查表转换(顺序结构)DATA SEGMENTTAB DB ‘EEEEEEDCBAA’MARK DB 81GRADE DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABMOV AL,MARKMOV AH,0MOV CL,10DIV CLXLATMOV GRADE,ALHLTCODE ENDSEND START(三)循环结构使机器重复执行一系列指令,是一种闭合的分支结构循环程序由四部分组成① 初始化部分(或预置部分),负责设置循环初值② 处理部分,循环过程的主体③ 控制部分,修改初值,判断是否循环循环次数由一计数器控制循环次数由某一指定条件是否满足来决定④ 结束部分,处理循环程序的最后结果例1.将DTAB单元开始的一组字节补码数(≤255个)求平均值,结果存入AVE单元,若结果为负,在SYM置FFH否则置0DATA SEGMENTDTAB DB 0FDH,0FCH,05H,0F8H,……DB 08H,25H,83H,97H,……COUNT EQU $-DTABAVE DB ?SYM DB ?DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK AVER PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,DTABMOV CX,COUNTXOR DX,DXNEXT: MOV AL,[BX]CBWADD DX,AXINC BXLOOP NEXTMOV AX,DX MOV CL,COUNTIDIV CLMOV AVE,ALMOV SYM,0AND AL,ALJNS DONEMOV SYM,0FFHDONE: RETAVER ENDPCODE ENDSEND START循环控制方法:循环次数由计数器控制例2.将8位二进制小数规格化设需规格化的小数在DATA1单元,要求规格化后使其最高位为1,并存入DATA2单元,办法是把小数左移至最高为位为1为止,左移次数存入DATA3单元,若小数是0,则在DATA2和DATA3单元存入0示例:DATA1 DATA2 DATA322H 88H 02H01H 80H 07HCBH CBH 00H00H 00H 00HDATA SEGMENTDATA1 DB 22HDATA2 DB ?DATA3 DB ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CL,0MOV AL,DATA1 ;取数AND AL,AL ;设ZF、SF标志JZ DONECHKSF:JS DONEINC CLADD AL,AL ;左移一位JMP SHORT CHKSFDONE: MOV DATA2,ALMOV DATA3,CLHLTCODE ENDSEND START循环控制方法:循环次数由某一指定条件是否满足来决定例3.多重循环将n个无符号字节数从小到大排序,方法是依此比较相邻两单元的数,若前小后大不交换第一轮比较n-1次,最大数沉底(高地址)第二轮比较n-2次,次大数沉到最大数上面第n-1轮比较完若在某一轮比较时没有出现交换,说明顺序已排好,不必后续比较,故设交换标志AH=1代表不交换,AH=2代表有交换DATA SEGMENTLIST DB 18,6,11,3,1,2,3,9,8,7,6 DB 111,110,99,112,115,114,113,98,96,97 COUNT EQU $-LISTDATA ENDSSTACK SEGMENT STACKSTA DW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSET PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV DX,COUNT-1 ;n-1轮(外循环)EXGO:MOV CX,DX ;每轮次数(内循环)MOV AH,01H ;交换标志MOV BX,OFFSET LIST ;数据块首址INGO: MOV AL,[BX]INC BXCMP AL,[BX]JC NEXT ;数1小,不交换XCHG AL,[BX] ;数1>数2,交换DEC BXXCHG AL,[BX]INC BX ;恢复数据指针MOV AH,02H ;有交换标志NEXT: LOOP INGODEC DXJZ DONEDEC AHJNZ EXGODONE: RETSET ENDPCODE ENDSEND START(四)子程序结构基本要求:① 子程序的开始(入口处)应给予一个标号,结束处有返回指令② 通用子程序要说明入口条件(入口参数)和出口条件(出口参数)③ 调用子程序要注意保护现场和恢复现场调用—返回的堆栈操作:CALL target ;段内SPSP-2,[SP+1,SP] IP,IPIP+disp段间SPSP-2,[SP+1,SP] CS,CSsegSPSP-2,[SP+1,SP] IP,IPoffsetRET ;段内IP [SP+1,SP],SPSP+2;段间IP [SP+1,SP],SPSP+2CS [SP+1,SP],SPSP+2RET n ;如上操作后SPSP+n·子程序入口标号应说明距离属性·对于一个FAR过程,过程初必须先保护程序段前缀中的中断指令INT 20H 的断点地址(DS:0000),它是一个程序正常结束退出的中断处理程序例1.将内存200H单元开始的一个五字节十六进制数显示出来(低位在低地址)DATA SEGMENTORG 200HNUM DB 9AH,78H,56H,34H,12HDATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,5MOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSET NUMNEXT: MOV DH,[SI+BX-1] ;(不用AL,因调用MOV DL,DH ; display返回时DL→AL)MOV CL,4ROL DL,CLAND DL,0FHCALL DISPLAYMOV DL,DHAND DL,0FHCALL DISPLAYDEC BXJNZ NEXTMOV AX,4C00HINT 21HDISPLAY PROC NEARADD DL,30HCMP DL,3AHJB OKADD DL,07H;(如果DL=3AH,3AH+7=41H是‘A’)OK: MOV AH,02HINT 21HRET。

微机原理与接口技术第4章 8086汇编语言程序设计


参与关系运算的必须是两个数值或同一段中的两个存储单
元地址,但运算结果只可能是两个特定的数值之一:当关系不
பைடு நூலகம்
成 立 ( 假 ) 时 , 结 果 为 0( 全 0) ; 当 关 系 成 立 ( 真 ) 时 , 结 果 为
0FFFFH(全1)。例如: MOV AX,4 EQ 3 MOV AX,4 NE 3 ;关系不成立,故(AX)←0 ;关系成立,故(AX)←0FFFFH
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 ; 运算次数为5 MOV SI,0 CLC LOOPER: MOV AH,4CH MOV AL,DATA2[SI] INT 21H ADC DATA1[SI],AL INC SI CODE ENDS DEC CX END START JNZ LOOPER
VAR DW ? 10 DUP(?) ;变量VAR的类型为字 ;变量ARRAY的类型为双字
ARRAY DD STR DB
'THIS IS TEST' ;变量STR的类型为字节
MOV
MOV MOV

AX,TYPE VAR
BX,TYPE ARRAY CX,TYPE STR
;(AX)←2
;(BX)←4 ;(CX)←1
② 标号的偏移量属性表示标号所在段的起始地址到定义该
标号的地址之间的字节数。偏移量是一个16位无符号数。
③ 标号的类型属性有两种:NEAR和FAR。前一种标号可 以在段内被引用,地址指针为2字节;后一种标号可以在其他段 被引用,地址指针为4字节。
伪指令语句中的名字可以是变量名、段名、过程名。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章 8086/8088汇编语言程序设计
本章主要讲述8086/8088微处理器的
汇编语言源程序的结构
汇编语言语句格式
伪指令
汇编语言程序设计方法 DOS和BIOS功能调用 软件调试方法
19
汇 编 语 言 程 序 设 计
8086/8088
4.1 程序设计语言概述 4.2 8086/8088汇编语言的 基本语法 4.3 8086/8088汇编语言程序 设计基本方法 4.4 软件调试技术
23
汇编语言程序的上机与处理过程
编辑程序 edit.exe
prog.asm 文件
汇编程序 masm.exe
prog.obj 文件
prog.exe 文件
连接程序
link.exe
24
第一步:汇编
汇编源程序需翻译成机器语言,变成可执行文件,机器才能 执行,这个翻译过程叫汇编。 高级语言中称该过程为‚解释‛或‚编译‛。执行翻译的程 序称为‚汇编程序‛。 汇编程序分两种,一种是基本汇编(ASM.EXE),一种是 宏汇编(MASM.EXE),宏汇编功能比较强。
003ffh
CS IP CS IP 00004 00002
1KB
00000h
5
返回断点 中断服务程序结束时执行中断返回指令 IRET:使IP、CS、PSW按顺序出栈。 …… …… …… …… CPU返回断点继续执行后续程序
如:INT 2AH,类型号为2AH,为获取它的中断服务程 序入口地址在向量表中存放的首地址,需将类型号*4。 1)2AH=0010 1010B;化成二进制数 2)0010 1010 00B=1010 1000B;左移2位 中断服务程序入口地址在向量表中存放的首地址即为: 000A8H。
6
8086的中断指令
INT 中断类型; 功能 标志寄存器入栈; 禁止响应可屏蔽中断和单步中断 IF←0,TF←0; 断点的段地址入栈,偏移地址入栈; 从中断向量表取入口地址,进入中断服务程序。 在使用INT指令时,8086预定义的类型号(0、1、 2、3、4)和可屏蔽中断已使用的类型号一般不应 出现在INT指令中。
执行结果为AX=6655H,BX=6655H, CL=55H,SI=24C0H,DS=8877H
17
3.已知IP=1000H,CF=0,则执行指令JNC Short label后,下列 各数中哪一个是可能的IP值? (A)0FFFFH (B)0FFEH (C)10FEH (D)1100H
(B)
18
1KB
00004 CS IP 00002
00000h
4
进入中断服务程序 CPU取类型号:外中断、内 255#向量 中断,指令提供、预定义 类型号×4:对应向量在表 中的首地址 保护断点:PSW、CS、IP依 次入栈 从向量表读取服务程序入口 1#向量 地址,IP←低位字,CS←高 位字 进入中断服务程序 0#向量
PUSH
IN LES MOV IMUL MOV SHL
DX
AX,3FH AX,[SI] BL,4CH BL CL,5 BX,CL
16
SHL INT
BX,5 300
3. 设若内存单元DATA在数据段中偏移量为24C0H处,24C0H ~ 24C3H单元中依次存放着55H、66H、77H、88H。下列几条 指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少? MOV AX,DATA LEA SI,DATA MOV CL,[SI] LDS BX,DATA
15
2. 下列各条指令错在哪里? MOV DS,1000H
MOV MOV
AX,1000H DS,AX
MOV
[100],23H
MOV BYTE PTR [100],23H ADD AX,[BX+DI+6]
ADD
PUSH IN LES IMUL
AX,[BX+BP+6]
DL AX, [3FH] SS,[SI] 4CH
调用MASM.EXE
汇编
.ASM
.OBJ
.LST
.CRF
可选
25
汇编程序(MASM.EXE)的主要功能
将汇编语言源程序翻译成机器语言; 按程序员指定,分配存储区域(包括程序区、数据区、 堆栈区等); 将各种进位制数据转换成二进制数; 把字符转换成ASCII码; 计算出数值表达式的值; 对源程序进行检查,如果有指令错或程序格式错则给出 相应提示。 汇编的方法 手工汇编 机器汇编 驻留汇编(本机自我汇编) 交叉汇编(用户终端利用服务器的汇编程序进行它 机汇编)
10
WAIT 通常用在CPU执行完ESC指令后,用来等待外部事件, 即等待TEST线上的有效信号 当TEST=1时,表示CPU正处于等待状态,并继续执行 WAIT指令,每隔5个时钟周期就测试一次TEST状态; 一旦测试到TEST=0,则CPU结束WAIT指令,继续执行后 续指令 WAIT与ESC两条指令是成对使用的,它们之间可以插 入一段程序,也可以相连
20
4.1 程序设计语言概述
程序设计语言是专门为计算机编程所配置的语言。它 们按照形式与功能的不同可分为



机器语言( Machine Language ) 机器语言是由0、1二进制代码书写和存储的指令 与数据。 汇编语言( Assembly Language) 汇编语言是用指令的助记符、符号地址、标号等 书写程序的语言,简称符号语言。 高级语言( High Level Language ) 高级语言是脱离具体机器(即独立于机器),面 向用户的通用语言,不依赖于特定计算机的结构 与指令系统。
8
(六)处理器控制类指令
处理器控制指令只完成对CPU的简单控制功能。
1. 对标志位操作指令
CLC、STC、CMC指令用来对进位标志CF清‚0”、置 ‚1”和取反操作 CLD、STD指令用来将方向标志DF清‚0”、置‚1”,常 用 于串操作指令之前 CLI、STI指令用来将中断标志IF清‚0”、置‚1”。当 CPU需要禁止可屏蔽中断进 入时,应将IF清‚0”, 允 许可屏蔽中断进入时,应将IF置‚1”。
14
代码段寄存器CS不可用作指令的目的寄存器 指令对地址还是对地址中的内容操作要分清 如:LEA BX, MESS; (BX)←MESS的偏移地址 MOV BX, MESS; (BX)←MESS的内容 使用指令时要注意指令隐含的操作寄存器 如:乘/除法(AX, DX:AX)、串指令的寻址(SI、DI)、十进 制调整指令(AL) 对带符号数和无符号数操作应正确选择相应的条件转移指令 用移位指令来倍增或倍减一个值很方便,但要注意对带符号 数和无符号数使用的指令不同。 如:(AX)=8520H,(AX)为无符号数时,(AX)/2可用 SHR AX, 1,得到(AX)=4290H,如果(AX)为有符号数,结果变 成了0C290H 注意标号与变量(数据符号)的区别
22
采用汇编语言进行程序设计的特点
优点
比机器语言易读、易写、易记。 可充分利用机器的硬件功能和结构特点,加快程序的执 行速度,减少目标程序所占用的存储空间。 常用来编写实时控制程序、实时通信程序,有时也用来 编制某些系统软件程序。
缺点
编程效率低(与人们描述计算过程的需要差距大) 与机器硬件的具体结构联系过于紧密,在一种结构的机 器上开发的程序极难移植到另一种不同结构的机器上去。
7
INTO
OF=1,立即向CPU发出溢出中断请求,并根据系统
对溢出中断类型的定义,可从中断入口地址表中得到 类型4的中断服务程序入口地址 该指令一般安排在带符号的算术运算指令之后,用于 处理溢出中断 是一条1字节指令
IRET
总是安排在中断服务程序的出口处,由它控制从堆栈
中弹出程序断点送回CS和IP中,弹出标志寄存器内 容送回F中,迫使CPU返回到断点继续执行后续程序 也是一条1字节指令
12
要点与一些习题分析
一、本节要点
各类指令的指令格式,对标志的影响,特别是: 传送指令(地址传送、堆栈操作…) 加法、减法(NEG、CMP…) 逻辑运算指令的应用 移位指令和循环移位指令的应用 所有控制转移类指令 串操作类指令
13
二、习题分析
1. 编写指令时需要注意几个问题 注意区别立即寻址方式和直接寻址方式 如:MOV AX, 123; 将数据123放入AX寄存器中 MOV AX, [123]; 将数据段中123单元内容放入AX寄存器中 使用寄存器间接寻址时应注意和寄存器寻址方式的区别 如:MOV AX, BX; 将BX中的内容放入AX寄存器中 MOV AX, [BX]; 将BX指示的地址中的内容送入AX中 在双操作数指令中,源操作数和目的操作数地址不能同时为 存储器地址 如:ADD [123], [456]; × 段跨越前缀可修改操作数所在的段,且段跨越前缀不能用CS 如:MOV DL, MESS1[SI]; 源操作数地址为: ; (DS)×16+(SI)+OFFSET MESS1 MOV DL, ES:MESS2[SI]; 源操作数地址为: ; (ES)×16+(SI)+OFFSET MESS2
21
汇编语言(Assemble Language)
是一种面向机器的程序设计语言,用 符号表示的低级程序设计语言(机器 语言的符号化描述),通常是为特定 计算机或计算机系列专门设计的。 用汇编语言编写的程序不能由机器直 接执行,而必须经汇编程序翻译成机 器语言程序。 助记符用便于记忆的英语单词表示的 指令操作码。它反映了指令的功能和 主要特征,便于人们理解和记忆。
LOCK LOCK是一字节的指令前缀,而不是一条独立的指令 作为指令指令执行过程中都禁止 其他协处理器占用总线,故它可称为总线锁定前缀
相关文档
最新文档