汇编语言——基础知识

目标

1、了解机器语言、汇编语言、汇编源程序、汇编程序、汇编、宏汇编程序等基本概念,正确认识学习汇编语言的重要性。

2、掌握8086处理器中各寄存器的符号表示形式、大小及主要用途。

3、理解主存的编址方式以及存储器物理地址形成的方式。

4、理解8086处理器关于使用堆栈的有关规定,掌握堆栈操作指令的功能以及使用格式。

5、掌握数值数据及字符数据在机内的表示形式、压缩BCD码和非压缩BCD码在机内的表示形式。

6、掌握标志寄存器中各标志位的置位方式。

 

三种语言的层次关系

机器语言

汇编语言

高级语言

 

机器指令

指挥计算机完成某一基本操作的命令。

格式:

操作码 地址码1 地址码2

例:将偏移地址为100的字存储单元中的内容加2,在回送到原存储单元中去的机器指令如下:

8306640002

其中8306H为 操作码

6400H 为 目的操作数

02H 为源操作数

 

指令系统

机器指令面向机器,每台计算机都规定了自己所特有的一定数量的基本指令,这批指令的全体即为该计算机的指令系统

 

汇编语言

用助记符表示机器指令的操作码;

用变量代替操作数的存放地址;

在指令前冠以标号,用来代表指令的存放地址

汇编语言的特点:

① 所占空间、执行速度与机器语言相仿

② 直接、简捷,能充分控制计算机的硬件功能

 

Intel 8086 微处理器简介

通用寄存器:

AX(累加器)

BX(基址寄存器)

CX(计数器)

DX(数据寄存器)  ;可以分8位使用。

指针及变址寄存器:

SP(堆栈指针寄存器)

BP(基址指针寄存器)

SI(源变址寄存器)

DI(目的变址寄存器)

IP(指令指针寄存器):用来存放下一条要执行指令在内存中代码段中的偏移地址。

 

主存储器

- 主存的基本存储单位是位(bit),它能容纳一个二进制数的0或1

- 字节编址:以字节为最小寻址单位。

- 8086的最大寻址空间1M

- 字的存放形式“低位在前,高位在后”

- “对准字”和“不对准字”

 

堆栈

在内存中开辟出一片存储区,采用一端固定,另一端活动的方式存取数据

 

进栈指令 PUSH

格式:  PUSH OPS

功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈。

(SP)-2 -> SP

例:假设(SP)=1000H (AX)= 1234H

PUSH AX

执行后:(SP)=0FFEH

注:PUSH AL ;错误

PUSH 0003H ;错误

 

出栈指令  POP

格式:  POP OPD

功能:将栈顶元素(字)弹出送至寄存器、段寄存器(CS除外)或存储器中。

(SP)+2 -> SP

例:设 (BX)=2004H

POP BX

执行后: (BX)=1234H (SP)=1000H

注:PUSH CS ;正确

POP CS ;错误

 

存储器的分段管理

- 地址表示的一对矛盾:

直接寻址能力为1M (字节);

而寄存器是16位结构的。

- 解决方法:

引入了存储器“分段”的概念,即把1M字节内存空间分成若干段。每段最大可达64K字节--可由16位寄存器进行寻址。

段的起始地址成为“段基址”,要访问的单元距段基址的距离(字节数)为“偏移量”(Offset)。

 

程序设计时,使用的是逻辑地址。逻辑地址由“段基址”和“偏移量”构成(均为16位)。

“段基址”由段寄存器CS、DS、SS和ES提供;

“偏移量”由BX、BP、IP、SP、SI、DI或根据寻址方式计算出的有效地址EA(Effective Address)提供。

- 注意:

①每个存储单元有唯一的物理地址,但它却可由不同的“段基址”和“偏移量”组成。例如:

1200H:0345 -> 12345H 1100H:1345 -> 12345H

② 除非专门指定,一般情况下,段在存储器中的分配是由操作系统负责的。

例1:设(CS)=8000H (IP)=0100H

问下一条要执行的指令的物理地址PA?

(CS)内容左移4位+(IP)

PA = 80000H+0100H=80100H

例2:设(DS)=1000H 该数据段中偏移量为0200H处的物理地址PA?

(DS)内容左移4位+偏移量

PA = 10000H +0200H =10200H

例3:设(SS)=1000H (SP)=2000H 问该堆栈段栈顶的的物理地址PA?

(SS)内容左移4位+(SP)

PA = 10000H +2000H =12000H

 

数值数据在机器内的表示形式

8086的两个规定:

- 数值数据均指无符号定点数

- 有符号数则一律采用n位二进制补码表示。

 

- 8086中,16位补码的表示范围:

7FFFH ~~ 8000H

注:机器在进行算术运算时,总是把参加运算的用补码表示的操作数作为无符号数处理。

 

字符数据在机器内的表示形式

ASCII码 (美国信息标准交换码)

- 字符数据是以ASCII码形式存放在内存中的。

例如 “1” 就是 31H

“A” 就是 41H

BCD码

定义:利用二进制形式来表示十进制数。

利用4位二进制数(0000B~1001B)来表示十进制数(0~9)

例如: 19 = 00011001BCD

= 000010011B

 

标志寄存器

1、状态标志:表示前面的操作执行后,算术逻辑部件处于怎样一种状态。

例如,是否产生了进位,是否发生了溢出等等。程序中,可以通过对某个状态标志的测决

定后面的走向及操作。

零标志ZF(Zero Flag):若运算结果为0,则ZF=1;否则ZF=0。

例1:MOV AL, 4

SUB AL, 4

例2:XOR AX, AX

执行后,ZF也一定为1。

进位标志CF(Carry Flag):

它反映:

加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。

减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。

例如:

MOV AL, 3;

SUB AL, 4;

执行后,CF=1。

 

奇偶标志PF(Parity Flag):

若运算结果低8位中“1”的个数为偶数,则PF=1;否则PF=0。

例:MOV AL, 2

ADD AL, 1

执行后,PF位为1。

 

辅助进位标志AF(Auxiliary carrry Flag):

也称“半进位标志”,它反映:

加法时,第3位向第4位有进位;

减法时,第3位向第4位有借位。

 

溢出标志OF(Overflow Flag):

若运算过程中发生了“溢出”,则OF=1。

定义:运算结果超出计算装置所能表示的范围,称为溢出。

判断方法之一【逻辑】:

溢出=最高位进位 ⊕ 次高位进位

 

符号标志SF (Sign Flag):

当运算结果的最高位为1时SF=1,否则SF=0。

例:分析执行下述两条指令后,以上六个标志位的变化。

MOV BL,58H

ADD BL,4AH

解: 0101 1000B

+ 0100 1010B

1010 0010B

CF=0 SF=1 OF=1 PF=0 ZF=0 AF=1

 

2、控制标志(3位):

每一位控制标志都对一种特定的功能起控制作用。可以通过专门的指令对其进行“置位”(Set)或“复位”(Reset)。

中断标志IF(Interrupt Enable Flag):

如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。

指令系统中有两条专门的指令可以置“1”或置“0” IF标志位:

STI 使IF置“1”,即开放中断。

CLI 使IF清“0”,即关闭中断

 

方向标志DF(Direction Flag):

用于串操作指令中的地址增量修改(DF=0)还是减量修改(DF=1)。

STD

CLD

跟踪标志TF(Trap Flag):

若TF=1,则CPU按跟踪方式(单步方式)执行程序。

3、标志位寄存器的操作

- 传送

LAHF

功能:将标志位寄存器的低8位送入AH中,即:

(FLAGS)7~0 -> AH

例:执行前 (FLAGS)=0485H (AX)=0FFFFH

执行后 (FLAGS)=0485H (AX)=85FFH

 

SAHF

功能:将AH的内容送入标志位寄存器的低8位中,即:

AH ->(FLAGS)7~0

- 栈操作

PUSHF

POPF

例: MOV AX,0FFFFH

PUSH AX

POPF

结果:(FLAGS)=0FFFFH

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值