8086汇编语言语句的类型和格式共30页文档

合集下载

微机原理8086汇编程序设计.ppt

微机原理8086汇编程序设计.ppt

MOV BL,05H OR 30H
;35H→BL
MOV CX,NOT 00FFH
;0FF00H→CX
MOV DX,789AH XOR 000FH
;7895H→DX
13/),不等(NE),小于(LT),大于(GT), 小于等于(LE)及大于等于(GE)。
•运算结果成立时逻辑值为真,用0FFFFH表示;
汇编程序不区分大小写
3/96
汇编语言语句统一格式规定
指令性语句、伪指令语句和宏指令语句的统一格式:
[名字项] 操作项 [操作数项] [;注释项]
1.名字项:最多由21个字符组成。可由下列字符组成。
①字母A~Z、a~z
②数字0~9
③特殊符号?、·、@ 、- 、$等
注意:
➢ 名字项的第一个字符不可以是数字,必须是字母或特殊字
符,但是问号本身不能单独作为名字;
➢ 如果用到特殊符号,则它必须是首字符。
➢ 汇编语言的专用保留字、寄存器名、8088/8086汇编语言中
的指令助记符、伪指令名、表达式中使用的运算符和属性
运算符等均不能作为名字项,否则汇编会给出错误信息;
➢ 名字项在程序中不能重复定义。
4/96
名字项属性
(1) 段属性:可用SIG伪指令求出 此属性用于定义标号和变量的段起始地址。标号通常在代码 段CS中定义,变量通常在DS、ES和SS段中定义。
2 DATA SEGMENT;
数据段

3 DATA ENDS ;…………………………………堆栈段说明 4 STACK SEGMENT PARA STACK′STACK′;堆栈段

5 STACK ENDS
;……………………………………………………………代码段说明

汇编语言程序设计 第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

8086汇编语言

8086汇编语言

DATA_WORD DW 100, 100H
DATA_BYTE DB 100 DUP (?)
MESS1
DB ‘AB’
MESS2
DW ‘AB’
例: OPER1 DB 1, 2 OPER2 DW 1234H, 5678H … MOV AX, WORD PTR [ OPER1+1] MOV AL, BYTE PTR [OPER2]
伪指令--供汇编过程的20种伪操作。 3、操作数 (1)常数类:
二、八、十、十六进制、科学表示法、字符串等
(2)变量(标号):所有的变量和标号都有三种属性
段值(SEG) 偏移量(OFFSET) 类型(TYPE):变量(BYTE/WORD/DWORD)
标号(NEAR / FAR)
(3)表达式
A、算术操作符: , , ,
AX=3402H AL=34H
OPER1 01 02
OPER2 34 12 78 56
低地址 高地址
三、段定义伪操作
格式: 段名 SEGMENT [定位类型, 组合类型, 类别]
……
段名 ENDS 例:定义用户堆栈
stack segment qqq dw 40H dup (?) stack ends code segment
start: mov ax, data1
mov ds, ax
mov ax, data2
mov es, ax
; 段地址段寄存器

code ends
end start
四、程序开始和结束伪操作 ORG 常数表达式 ;使下一地址是常数表达式的值 ORG 100H START: …...
END [程序首地址标号] 五、过程定义 PROC

汇编语言语句种类及其格式 汇编语言数据与运算符 伪指令

汇编语言语句种类及其格式 汇编语言数据与运算符 伪指令

汇编语言 程序设计

其中:变量名是可选项,它仅代表所定义数据存储区 其中:变量名是可选项, 第一个单元的地址;DB、DW、DD、DQ和DT是伪指令符 是伪指令符, 第一个单元的地址;DB、DW、DD、DQ和DT是伪指令符,具 体一条数据定义伪指令取5种之一。 体一条数据定义伪指令取5种之一。 DB定义的是字节类型的变量,每个表达式被分配1 DB定义的是字节类型的变量,每个表达式被分配1个字 定义的是字节类型的变量 节单元。 节单元。 DW定义的是字类型的变量,每一个表达式被分配1 DW定义的是字类型的变量,每一个表达式被分配1个字单 定义的是字类型的变量 个字节) 元(2个字节)。 DD定义的是双字类型的变量,每一个表达式被分配2 DD定义的是双字类型的变量,每一个表达式被分配2个字 定义的是双字类型的变量 单元( 个字节) 单元(4个字节)。 DQ定义的是四字类型的变量,每一个表达式被分配4 DQ定义的是四字类型的变量,每一个表达式被分配4个字 定义的是四字类型的变量 单元( 个字节) 单元(8个字节)。 DT定义的是十字节类型的变量, 每一个表达式被分配10 DT 定义的是十字节类型的变量,每一个表达式被分配 10 定义的是十字节类型的变量 个字节单元。 个字节单元。
汇编语言 程序设计
(1)符号名 符号名在伪指令语句中是一个可选项,符号名后面没有 符号名在伪指令语句中是一个可选项, 冒号,符号名可以是常量名、变量名、过程名等。 冒号,符号名可以是常量名、变量名、过程名等。 (2)伪指令符 伪指令符指定汇编程序要完成的具体操作, 伪指令符指定汇编程序要完成的具体操作,它是伪指令语 句的核心部分,如数据定义伪指令DB、DW、DD,段定义伪指 句的核心部分, 如数据定义伪指令DB、DW、DD, DB SEGMENT,定义过程伪指令PROC等等。 PROC等等 令SEGMENT,定义过程伪指令PROC等等。 (3)操作数 伪指令中的操作数可以是常数、字符串、变量、表达式, 伪指令中的操作数可以是常数、字符串、变量 、表达式, 其个数由具体的伪指令决定,各个操作数之间用“,”分隔。 其个数由具体的伪指令决定, 各个操作数之间用“ 分隔。 (4)注释 伪指令语句的注释也是可选项,需要时必须以“ 伪指令语句的注释也是可选项,需要时必须以“;”开始。 开始。

第三节 80868088汇编语言

第三节 80868088汇编语言

三、汇编语言语句格式汇编语言程序由若干语句组成。

汇编语言语句类型:指令语句—完成操作功能,能编排(比翻译简单)成机器语言代码(即80x86指令系统的指令);伪指令语句—为汇编程序在编排源程序时提供有关信息;宏指令语句—分为宏定义和宏调用语句,编排时用宏定义代替宏调用语句。

汇编语言语句通用格式:[名字项] 操作项[操作数项] [;注释项]1、名字项组成:可由字母、数字、特殊字符(?、.、@、_、$)组成,数字不能作首字符,.只能作首字符。

类型:标号、变量。

(1)标号组成:①语句标号--由名字+冒号(“:”)组成;②过程名、段名等—只由名字组成。

属性:段属性—标号(定义时)所在段的起始地址;偏移属性—标号与所在段起始地址间字节数;类型属性—表明引用它时的特性,段内引用为NEAR,段间引用为FAR。

(2)变量组成:在除代码段外的段中定义,只由名字组成。

属性:段属性—变量(定义时)所在段的起始地址;偏移属性—变量与所在段起始地址间字节数;类型属性—表明为它所保留的主存字节数,DB/DW/DD/DQ/DT对应1/2/4/8/10字节。

思考:标号与变量的主要区别?指令中变量的数据类型如何表示?2、操作项组成:可为指令、伪指令或宏指令的助记符。

说明:指令助记符可带指令前缀。

示例:D_SEG SEGMENTNUM1 DB 10 DUP(10) ;数据定义NUM2 DW 20 DUP(0, 4 DUP(2))NUM3 DB 10H, 5 DUP(?)NUM4 DB ‘STRING’D_SEG ENDS ;假设DS指向D_SEG段MOV AX, SEG NUM1 ;等价于AX←(DS)MOV BX, SEG NUM2 ;AX与BX值相同MOV SI, OFFSET NUM1 ;NUM1相对于段的偏移量→SI MOV DI, OFFSET NUM2 ;等价于LEA DI, NUM2MOV AH,TYPE NUM2 ;2→AHMOV BH,LENGTH NUM2 ;20→BH(指最外层参数)MOV AL,LENGTH NUM3 ;1→AL(指第一个参数)MOV CL, SIZE NUM2 ;20*2→CLMOV CH, SIZE NUM4 ;1*1→CH(4)属性运算符PTR格式:<类型> PTR表达式PTR功能:用新类型取代表达式默认的数据类型PTR说明:①表达式为MEM操作数或变量时,类型可为BYTE、WORD、DWORD,表达式为标号时,类型可为NEAR、FAR;②仅改变数据类型属性,且仅在本语句有效。

第三讲8086汇编语言

第三讲8086汇编语言
换。至少一方为通用Regs。 ❖ 例: XCHG AX, BX ;√
XCHG BH, BL ;√ XCHG AX, 1122H ;× XCHG DS, AX ;× XCHG [SI], BP ;√ XCHG [SI], [DI] ;×
4
3.3 常用汇编指令
D S: 2000H 01H
2001H 02H
CF为前面指令产生的CF
❖格式:ADC DET ,SRC
❖功能:(DST)+(SRC) +CF DST ;
❖要求:同ADD
通用Regs ±
❖ADC指令主要用于多字节加法运算
IMM 通用Regs
MEM
❖ 例:两个32位数相加
0123FAB5H+0ABC212AH=0BE01BDFH 0123 FAB5
;√
MOV 2000H, AX
; × 目的不能为立即数
MOV DS:2000H, AX ; √
3
3.3 常用汇编指令
一、数据传送类指令
2.数据交换指令
❖格式: XCHG DST ,SRC ❖功能:将源 (SRC)和目的(DST)内容互换;
操作结果不影响F标志位。 ❖要求:只在两个通用Regs之间、通用Regs 和MEM之间互
❖ 说明:LEA的源操作数寻址方式为立即数寻址;
LDS、LES的源操作数寻址方式为存储器寻址。
❖例2:设 D S : 1 0 0 0 H 1 0 H 执行: MOV BX, 1000H
1001H 00H
LDS SI, [BX] ;间接寻址
1 0 0 2 H D 2 H 后, NhomakorabeaX=1000H
1003H 13H
➢操作数类型明确,不能出现二义性(即不能模糊)。

四章节8086汇编语言程序设计


一、汇编语言程序设计基本步骤 1. 分析问题,确定模型 2. 确定算法 3. 绘制流程图 4. 编写程序 5. 检查和调试
二、汇编语言程序的基本结构
1、顺序结构
举例
完成 x1*x2x3 x1:byte x2:word x3 34bit
2、分支结构
举例
实现
1 x 0
y
0
x0
1 x 0
用查表法确定分支 a、对8种产品进行编号0,1,……7 b、每一个编号对应一个入口地址 proc0,proc1,……proc7 步骤: a、把入口地址放在Table开始的内存单元; b、根据key内容进行查表实现分支转移
3、循环结构
举例
例1、计算y=0+2+4+……+1998 ydxax
4.2 8086汇编中的伪指令
一、 符号定义语句
1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA
2、等号语句 格式: NUM=34 …… NUM=34+1
复制操作符DUP(Duplication)可预置重复的数值 例4: ALL_ZERO DB 0,0,0,0,0 用复制操作可改为:
ALL_ZERO DB 5 DUP(0)
5、将已定义的地址存入内存单元
例5: LIT DD CYC … CYC: MOV AX , BX
三、段定义语句
1、 段定义语句格式:
2)THIS操作符 格式: THIS 类型(或属性)
例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)

4.8086汇编语言


说明: 说明:
•带[ ]的域是可以缺省项。 带 的域是可以缺省项。 •标号以标识符的形式出现,可缺省。但转移点的 标号以标识符的形式出现, 标号以标识符的形式出现 可缺省。 语句必须要有标号。 语句必须要有标号。
2012-1-12 8
§4.1
汇编语言源程序格式
8086汇编语言 第四章 8086汇编语言
11
§4.1
汇编语言源程序格式
8086汇编语言 第四章 8086汇编语言
汇编语言的数据项
常量 常量常出现在以下场合: 常量常出现在以下场合:
MOV AL,0FFH , •源操作数为立即数的指令中 源操作数为立即数的指令中 •带位移量的存储器寻址指令中的位移量 •带位移量的存储器寻址指令中的位移量 MOV AL,[SI+32H] ,
2012-1-12
9
§4.1
汇编语言源程序格式
8086汇编语言 第四章 8086汇编语言
汇语言的数据项
常量 变量 标识符及其组成规则 标号 1.标识符 程序员编程时自由建立的、有特定意义 标识符 程序员编程时自由建立的、 的字符序列。 的字符序列。 26个英文字母(大小写) 个英文字母(大小写) 个英文字母 •由字符构成 数字:0—9 由字符构成 数字: 特殊的ASCII字符:?,_,@,$ 字符: , ,@, ,@,$ 特殊的 字符 •不能以数字开头 不能以数字开头 •问号 不能单独作标识符 问号?不能单独作标识符 问号 •有效长度为 ,超过部分忽略 有效长度为31 有效长度为 •不允许用保留字 (助记符、伪指令指示符、运 不允许用保留字 助记符、伪指令指示符、 算符、寄存器名) 算符、寄存器名) •不允许复用 不允许复用
2012-1-12

8086-汇编指令集

8086 汇编指令集一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令MOV 传送字或字节.格式为: MOV DST,SRC执行的操作:(DST)<-(SRC)MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.格式为:PUSH SRC执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC)POP 把字弹出堆栈.格式为:POP DST执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.BSWAP 交换32 位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)2. 输入输出端口传送指令.IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} )长格式为:IN AL,PORT(字节)IN AX,PORT(字)执行的操作:(AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为:IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字)OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535.长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)XLAT 换码指令字节查表转换,BX 指向一张256 字节的表的起点,AL 为表的索引值(0-255,即0-FFH);返回AL 为查表结果. 执行的操作: ( [BX+AL]->AL )格式为: XLAT OPR或: XLAT3. 目的地址传送指令.LEA 装入有效地址. 格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.格式为: LDS REG,SRC执行的操作:(REG)<-(SRC) (DS)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI寄存器.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.格式为: LES REG,SRC执行的操作: (REG)<-(SRC) (ES)<-(SRC+2)把源操作数指定的 4 个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI寄存器.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.格式为: LAHF执行的操作:(AH)<-(PWS 的低字节)SAHF 标志寄存器传送,把AH 内容装入标志寄存器.格式为: SAHF执行的操作:(PWS 的低字节)<-(AH)PUSHF 标志入栈.格式为: PUSHF执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)POPF 标志出栈.格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2)PUSHD 32 位标志入栈.POPD 32 位标志出栈.二、算术运算指令ADD 加法.格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST)ADC 带进位加法.格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CFINC 加1.格式: INC OPR执行的操作:(OPR)<-(OPR)+1AAA 加法的ASCII 码调整.DAA 加法的十进制调整.SUB 减法.格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC)SBB 带借位减法.格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CFDEC 减1.格式: DEC OPR执行的操作:(OPR)<-(OPR)-1NEC 求反(以0 减之).格式: NEG OPR执行的操作:(OPR)<--(OPR)CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志. AAS 减法的ASCII 码调整.DAS 减法的十进制调整.MUL 无符号乘法.格式: MUL SRC执行的操作:字节操作数:(AX)<-(AL)*(SRC)字操作数:(DX,AX)<-(AX)*(SRC)IMUL 整数乘法.格式: IMUL SRC执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.以上两条,结果回送AH 和AL(字节运算),或DX 和AX(字运算),AAM 乘法的ASCII 码调整.DIV 无符号除法.非组合BCD 码乘法调整指令格式: DIV SRC执行的操作:字节操作:(AL)<-(AX)/(SRC)的商(AH)<-(AX)/(SRC)的余数字操作: (AX)<-(DX,AX)/(SRC)的商(AX)<-(DX,AX)/(SRC)的余数IDIV 整数除法.格式: DIV SRC执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD 除法的ASCII 码调整.非组合BCD 码除法调整指令CBW 字节转换为字. (把AL 中字节的符号扩展到AH 中去)格式: CBW执行的操作:AL 的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFHCWD 字转换为双字. (把AX 中的字的符号扩展到DX 中去)格式: CWD执行的操作:AX 的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.CWDE 字转换为双字. (把AX 中的字符号扩展到EAX 中去)CDQ 双字扩展. (把EAX 中的字的符号扩展到EDX 中去)三、逻辑运算指令AND 与运算.格式: AND DST,SRC执行的操作:(DST)<-(DST)^(SRC)OR 或运算.格式: OR DST,SRC执行的操作:(DST)<-(DST)V(SRC)XOR 异或运算.格式: XOR DST,SRC执行的操作:(DST)<-(DST)V(SRC)NOT 取反.格式: NOT OPR执行的操作:(OPR)<-(OPR)TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).格式: TEST OPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码SHL 逻辑左移.格式: SHL OPR,CNT(其余的类似)其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是 1 或CL.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255 次.移位一次时,可直接用操作码. 如SHL AX,1.移位>1 次时,则由寄存器CL 给出移位次数.如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D 标志0 表示重复操作中SI 和DI 应自动增量;1 表示应自动减量.Z 标志用来控制扫描或比较操作的结束.MOVS 串传送.格式:可有三种MOVS DST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVS ES:BYTE PTR[DI],DS:[SI]执行的操作:1)((DI))<-((SI))2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1当方向标志DF=0 时用+,当方向标志DF=1 时用-3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0 时用+,当方向标志DF=1 时用-该指令不影响条件码.CMPS 串比较.格式: CMPS SRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1字操作: (SI)<-(SI)+-2,(DI)<-(DI)+-2指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同.SCAS 串扫描.把AL 或AX 的内容与目标串作比较,比较结果反映在标志位.格式: SCAS DSTSCASBSCASW执行的操作:字节操作: (AL)-((DI)),(DI)<-(DI)+-1字操作: (AL)-((DI)),(DI)<-(DI)+-2该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.LODS 装入串.把源串中的元素(字或字节)逐一装入AL 或AX 中.格式: LODS SRCLODSBLODSW执行的操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1字操作: (AX)<-((SI)),(SI)<-(SI)+-2该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.STOS 保存串.是LODS 的逆过程.格式: STOS DSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<-(AL),(DI)<-(DI)+-1字操作: ((DI))<-(AX),(DI)<-(DI)+-2该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中.REP 当CX/ECX<>0 时重复.格式: REP string primitive其中String Primitive 可为MOVS,LODS 或STOS 指令执行的操作:1)如(CX)=0 则退出REP,否则往下执行.2)(CX)<-(CX)-13)执行其中的串操作4)重复1)~3)REPE/REPZ 当ZF=1 或比较结果相等,且CX/ECX<>0 时重复.格式: REPE(或REPZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令.执行的操作:1)如(CX)=0 或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)<-(CX)-13)执行其后的串指令4)重复1)~3)REPNE/REPNZ 当ZF=0 或比较结果不相等,且CX/ECX<>0 时重复.格式: REPNE(或REPNZ) String Primitive其中String Primitive 可为CMPS 或SCAS 指令执行的操作:除退出条件(CX=0)或ZF=1 外,其他操作与REPE 完全相同.REPC 当CF=1 且CX/ECX<>0 时重复.REPNC 当CF=0 且CX/ECX<>0 时重复.五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令1)段内直接短转移格式:JMP SHORT OPR执行的操作:(IP)<-(IP)+8 位位移量2)段内直接近转移格式:JMP NEAR PTR OPR执行的操作:(IP)<-(IP)+16 位位移量3)段内间接转移格式:JMP WORD PTR OPR执行的操作:(IP)<-(EA)4)段间直接(远)转移格式:JMP FAR PTR OPR执行的操作:(IP)<-OPR 的段内偏移地址(CS)<-OPR 所在段的段地址5)段间间接转移格式:JMP DWORD PTR OPR执行的操作:(IP)<-(EA) (CS)<-(EA+2)2>条件转移指令(短转移,-128 到+127 的距离内)1)根据单个条件标志的设置情况转移JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移格式:JE(或JZ) OPR测试条件:ZF=1JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移格式:JNZ(或JNE) OPR测试条件:ZF=0JS(Jump if sign) 结果为负则转移格式: JS OPR测试条件:SF=1JNS(Jump if not sign) 结果为正则转移格式:JNS OPR测试条件:SF=0JO(Jump if overflow) 溢出则转移格式: JO OPR测试条件:OF=1JNO(Jump if not overflow) 不溢出则转移格式: JNO OPR测试条件:OF=0JP(或JPE)(Jump if parity,or parity even) 奇偶位为1 则转移格式: JP OPR测试条件:PF=1JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0 则转移格式: JNP(或JPO) OPR测试条件:PF=0JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1 则转移格式:JB(或JNAE,JC) OPR测试条件:CF=1JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0 则转移格式:JNB(或JAE,JNC) OPR测试条件:CF=02)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)格式:同上JNB(或JAE,JNC)格式:同上JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移格式:JBE(或JNA) OPR测试条件:CFVZF=1JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移格式:JNBE(或JA) OPR测试条件:CFVZF=03)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移格式:JL(或JNGE) OPR测试条件:SFVOF=1JNL(或JGE)(Jump if not less,or greater or equal)不小于, 或者大于或者等于则转移格式:JNL(或JGE) OPR测试条件:SFVOF=0JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移格式:JLE(或JNG) OPR测试条件:(SFVOF)VZF=1JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移格式:JNLE(或JG) OPR测试条件:(SFVOF)VZF=04)测试CX 的值为0 则转移指令JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移格式:JCXZ OPR测试条件:(CX)=0注:条件转移全为8 位短跳!3>循环控制指令(短转移)LOOP CX 不为零时循环.格式: LOOP OPR测试条件:(CX)<>0LOOPE/LOOPZ CX 不为零且标志Z=1 时循环.格式: LOOPZ(或LOOPE) OPR测试条件:(CX)<>0 且ZF=1LOOPNE/LOOPNZ CX 不为零且标志Z=0 时循环.格式: LOOPNZ(或LOOPNE) OPR测试条件:(CX)<>0 且ZF=0这三条指令的步骤是:1)(CX)<-(CX)-12)检查是否满足测试条件,如满足则(IP)<-(IP)+D8 的符号扩充.JCXZ CX 为零时转移.JECXZ ECX 为零时转移.4>子程序CALL 调用指令RET 返回指令5>中断指令INT 中断指令格式: INT TYPE或INT执行的操作: (SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(TYPE*4) (CS)<-(TYPE*4+2)INTO 溢出中断执行的操作:若OF=1 则:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)(SP)<-(SP)-2 ((SP)+1,(SP))<-(CS)(SP)<-(SP)-2 ((SP)+1,(SP))<-(IP)(IP)<-(10H) (CS)<-(12H)IRET 中断返回格式: IRET执行的操作: (IP)<-((SP)+1,(SP))(SP)<-(SP)+2(CS)<-((SP)+1,(SP))(SP)<-(SP)+2(PSW)<-((SP)+1,(SP))(SP)<-(SP)+2六、处理器控制指令1.标志处理指令CLC 进位位置0 指令(Clear carry)CF<-0CMC 进位位求反指令(Complement carry)CF<-CFSTC 进位位置1 指令(Set carry)CF<-1CLD 方向标志置0 指令(Clear direction)DF<-0STD 方向标志置1 指令(Set direction)DF<-1CLI 中断标志置0 指令(Clear interrupt)IF<-0STI 中断标志置1 指令(Set interrupt)IF<-02.其他处理机控制指令NOP 无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代.HLT 停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序.WAIT 等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT 指令继续德行.ESC 换码指令格式ESC mem其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.LOCK 封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.七、伪指令DW 定义字(2 字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.。

8086汇编基本语法

一、汇编语言概述汇编语言是一种面向机器的程序设计语言,与机器硬件密切相关,具有自己独特的编程优势和专门的应用领域。

汇编语言程序运行速度快、占用资源少,可以充分利用硬件资源,设计完成任意功能的程序。

但学习、编程较难,编程效率低,兼容性差。

因此,主要用于系统软件和控制软件的设计。

远不如高级语言应用广泛。

1. 汇编语言程序的执行步骤第一步:使用一种文本编辑软件编写汇编语言源程序,保存为文本文件。

第二步:使用系统软件“汇编程序”将汇编语言源程序汇编成目标程序,目标程序即为机器语言程序。

在汇编的过程中,汇编程序会发现程序中的语法错误,并指出在哪一行,是什么类型的错误。

如没有错误,汇编成功,但这时程序还不能执行。

注:机器语言程序即为二进制程序,所有高级语言和汇编语言都需要最后转换成二进制程序才能够被计算机系统执行。

第三步:使用系统软件“链接程序”将目标程序连接、装配形成可执行程序,在该链接过程中排查错误通过后,即可装入主存运行。

二、汇编语言的语句类型和格式2.1 汇编语言语句的类型:◆指令语句:包含在指令集中,每一个语句汇编后产生一组二进制数目标代码,可被CPU执行。

◆伪指令语句:汇编后不产生目标代码,用于定义段、子程序、常量、变量,以及给变量分配存储单元。

◆宏指令语句:用户定义的一个指令序列集合,汇编后在引用的地方展开成相应的指令序列。

用于提高编程效率2.2 汇编语言语句的格式汇编语言程序中每个语句可以由4项组成,格式如下:指令中的各项要用分隔符分开,名字项是标号时后面要有冒号作为分隔开,为增加查询可读性,对指令做解释时,要将指令和解释内容用分号分隔开,操作数之间用逗号分开,其他用空格分开。

(1) 名字项:用来标识段名、子程序名、宏指令名、标号、变量名和常量名等。

1.可用符号包括数字、字母和特殊符号“?”、“$”、“@”、“_”;2.数字不能作为名字(变量或标号)的第一个符号;3.名字长度不能超过31个字符;4.汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用;5.汇编语言不区分字母的大小写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章 汇编语言程序设计
3) 操作数 汇编语言语句中的第三个组成部分是操作数。在指令语句
中是指令的操作数,可能有单操作数或双操作数,也可能无操 作数;而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。
可以作为操作数的有:常数、寄存器、标号、变量和表达式 等。
第5章 汇编语言程序设计
LOOPER: MOV AL,DATA2[SI] ;取一个字节加数
DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数
第一条语句是指令语句,其中“LOOPER:”是名字,“MOV” 是指令助记符,“AL,DATA2[SI]”是操作数,“;”后面是注 释 部 分 ; 第 二 条 语 句 是 伪 指 令 语 句 , 其 中 “ DATA1” 是 名 字 , “DB”是伪指令定义符,“0F8H,60H,0ACH,74H,3BH”是 操作数,“;”后面是注释部分。
(1) 常数。常数就是指令中出现的那些固定值,可以分为数 值常数和字符串常数两类。例如,立即数寻址时所有的立即数、 直接寻址时所有的地址、ASCII字符串等都是常数。常数是除了 自身的值以外,没有其他属性的数值。在源程序中,数值常数按 其基数的不同,可有二进制数、八进制数、十进制数、十六进制 数等几种不同表示形式。汇编语言用不同的后缀加以区别。
很多情况下伪指令语句中的名字是变量名,变量名代表存储 器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变 量名。
第5章 汇编语言程序设计
变量也有三种属性:段、偏移量和类型。 ① 变量的段属性是变量所代表的数据区所在段的段地址。由
于数据区一般在存储器的数据段中,因此变量的段地址常常在 DS和ES寄存器中。
;存放结果的偏移地址送SI

MOV AX,DATA1
;取被加数

ADD AX,DATA2
;两数相加

MOV ES:[SI],AX
;和送附加段的SUM单元中

HLT
– CSEG ENDS
;代码段结束

END START
;源程序结束
第5章 汇编语言程序设计
DATA SEGMENT
DA1 DB 12H
第5章 汇编语言程序设计
伪指令语句中的名字可以是变量名、段名、过程名。与指令 语句中的标号不同,这些伪指令语句中的名字并不总是任选的, 有些伪指令规定前面必须有名字,有些则不允许有名字,也有一 些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不 同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号 的一个明显区别。
② 变量的偏移量属性是该变量所在段的起始地址与变量的地 址之间的字节数。
③ 变 量 的 类 型 属 性 有 BYTE ( 字 节 ) 、 WORD ( 字 ) 、 DWORD (双字)、 QWORD (四字)、TBYTE(十字)等, 表示数据区中存取操作对象的大小。
第5章 汇编语言程序设计
• 例 1编写一个两字相加的程序。
第5章 汇编语言程序设计
(3)宏指令语句是以一个宏名定义的一段指令序列,在汇编中 凡是出现宏指令语句的地方,都会有相应的指令语句序列的目标 代码插入。 2. 语句的格式
指令语句与伪指令语句的格式是类似的。一般情况下,汇编 语言的语句可以由1~4部分构成:
[名字] 助记符 [操作数] [;注释] 其中带方括号的部分表示任选项,既可以有,也可以没有。例 5.1中有如下语句:
第5章 汇编语言程序设计
(2) 寄存器
8086/8088CPU的寄存器可以作为指令的操作数。 (3) 标号 由于标号代表一条指令的符号地址,因此可以作为转移(无 条件转移或条件转移)、过程调用CALL以及循环控制LOOP指 令的操作数。 (4) 变量 因为变量是存储器中某个数据区的名字,因此在指令中可以 作为存储器操作数。 (5) 表达式 汇编语言语句中的表达式,按其性质可分为两种:数值表达 式和地址表达式。数值表达式产生一个数值结果,只有大小, 没有属性。地址表达式的结果不是一个单纯的数值,而是一个 表示存储器地址的变量或标号,它有三种属性:段、偏移量和 类型。
;定义代码段
– ;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址

ASSUME CS:CSEG,DS:DSEG,ES:ESEG
– START: MOV AX,DSEG
;START为程序开始执行的启动标号

MOV DS,AX
;初始ቤተ መጻሕፍቲ ባይዱDS

MOV AX,ESEG

MOV ES,AX
;初始化ES

LEA SI,SUM
;定义一个字节数据
DA2 DD 0FEDCBA90H ;定义一个双字数据
DA3 DW 5678H
;定义一个字数据
DATA ENDS
第5章 汇编语言程序设计
2) 助记符
汇编语言语句中的第二个组成部分是助记符(Memonic)。 在指令语句中的第二部分是CPU指令系统中指令的助记符, 例如:MOV ADC等等。助记符约有90多种,在第四章中已经 进行了详细的讨论。 在伪指令语句中的第二部分是伪指令的定义符,例如:DB、 SEGMENT、 ENDS 、 END等都是伪指令定义符。它们在程序 中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇 编等。
第5章 汇编语言程序设计 1) 名字
汇编语言语句的第一个组成部分是名字(Name)。在指令 语句中,这个名字是一个标号。指令语句中的标号实质上是指 “ :” 后 面 指 令 所 在 的 存 储 地 址 ( 逻 辑 地 址 ) 。 供 JMP 、 CALL 和 LOOP等指令作操作数使用,以寻找转移目标地址。并非每条 指令语句必须有标号,但如果一条指令前面有一标号,则程序 中 其 它 地 方 就 可 以 引 用 这 个 标 号 。 在 例 5.1 中 , START 、 LOOPER就是标号。标号后面有一个冒号。
– DSEG SEGMENT
;定义数据段
– DATA1 DW 1234H
;定义被加数
– DATA2 DW 5678H
;定义加数
– DSEG ENDS
;数据段结束
– ESEG SEGMENT
;定义附加段
– SUM DW 2 DUP(?) ;定义存放结果区
– ESEG ENDS
;附加段结束
– CSEG SEGMENT
标号有三种属性:段、偏移量和类型。 ① 标号的段属性是定义标号在程序段的段地址,当程序中引 用一个标号时,该标号的段值应在CS寄存器中。 ② 标号的偏移量属性表示标号所在段的起始地址到定义该标 号的地址之间的字节数。偏移量是一个16位无符号数。 ③ 标号的类型属性有两种:NEAR和FAR。前一种标号可以 在段内被引用;后一种标号可以在其它段被引用。如果定义一 个标号时后跟冒号,则汇编程序确认其类型为NEAR。
相关文档
最新文档