汇编指令系统Word下载.docx

上传人:b****6 文档编号:21722248 上传时间:2023-01-31 格式:DOCX 页数:98 大小:49.69KB
下载 相关 举报
汇编指令系统Word下载.docx_第1页
第1页 / 共98页
汇编指令系统Word下载.docx_第2页
第2页 / 共98页
汇编指令系统Word下载.docx_第3页
第3页 / 共98页
汇编指令系统Word下载.docx_第4页
第4页 / 共98页
汇编指令系统Word下载.docx_第5页
第5页 / 共98页
点击查看更多>>
下载资源
资源描述

汇编指令系统Word下载.docx

《汇编指令系统Word下载.docx》由会员分享,可在线阅读,更多相关《汇编指令系统Word下载.docx(98页珍藏版)》请在冰豆网上搜索。

汇编指令系统Word下载.docx

MOVAX,ES

MOVDS,AX

imm→r→seg

MOVAX,2000H

MOVDS,ES

seg←×

→seg

MOVDS,2000H

imm×

→seg

m→r→m

MOVAX,[20H]

MOV[BX],AX

MOV[BX],[20H]

m←×

→m

思考:

MOV[BX],20H?

堆栈操作指令

�入栈指令PUSH

PUSHsrc;

SP←SP-2

(SP+1)←src(H)

(SP)←src(L)src

reg16

mem16

seg

�出栈指令POP

POPdst;

dst(L)←(SP)

dst(H)←(SP+1)

SP←SP+2

dst

Seg(除CS)

PUSHAX

PUSHWORDPTR[BP]

POPES

POPWORDPTR[BP][SI]

入栈操作示例

设有SS=3200H,SP=0800H,AX=105CH。

SP=0800H→32800H

……

Stack

PUSHAX

SP=SP-1→327FFH

SP=SP-1→327FEH

SP=07FEH

5CH

AL

10H

AH

出栈操作示例

设有SS=3200H,SP=07FEH

POPAX

SP=SP+1→32800H

SP=SP+1→327FFH

SP=07FEH→327FEH

SP=0800H

AX=105CH

AL5CH

�一定是16位操作,即压入和弹出的一定是字单元,且高

字节总是在高地址单元;

�不允许使用立即数作为操作数

�不能以CS、IP作为目的操作数

�因为8086系统的堆栈是向下(低地址端)生成的,并且

是实栈顶,所以入栈时总是SP先减2再压入字,而出栈时

总是先弹出字再将SP加2;

�堆栈中的数据总是先进后出;

�不影响标志位

堆栈操作注意

交换指令XCHG

�可使用的操作数类型组合:

XCHGCL,DH;

通用寄存器↔通用寄存器

XCHGAX,[BP];

通用寄存器↔存储器

将源、目操作数的内容互相交换,指令执行后源、

目操作数同时被改变

�指令形式:

XCHGop1,op2;

(op1)↔(op2)

�op1:

R,M;

op2:

R,M

立即数为什么

不能做操作

数?

寄存器

交换指令XCHG注意

�不能直接交换两个存储单元的值;

�任一个操作数都不能是段寄存器或立即数;

《例》用MOV、PUSH,POP、XCHG指令

完成两寄存器AX、BX中数据的交换

(讨论所用机器码数量)

•用MOV指令

•用PUSH指令

POP

•用XCHG指令

MOVCX,AX

MOVAX,BX

MOVBX,CX6字节机器码

PUSHBX

POPBX4字节机器码

XCHGAX,BX1字节机器码

数据查表指令——XLAT

•指令格式

•指令功能

XLAT;

(AL)←[(BX)+(AL)]

�使用XLAT指令前

(BX)←表的首地址,(AL)←表的索引值

�使用XLAT指令

�使用XLAT指令后

(BX)+(AL)地址单元中的字节数据送(AL)

查表求平方

TABLEDB0,1,4,9,16,25,……,225

MOVAX,SEGTABLE

MOVBX,OFFSETTABLE;

DS:

BX指向表TABLE

MOVAL,4;

AL中为查表索引值

XLATTABLE;

取表中数据16到AL中

最多只能查到15的平方(=225)

LED七段显示码与显示数字的关系

77H9

7FH8

67H3

6DH2

03H1

3FH0

显示码显示数字

77H

7FH

67H

6DH

03H

3FH

用AL代表显示数字,用XLAT指令查出对应显示码。

(BX)

(AL)=0~9

有效地址传送指令——LEA

•指令格式

•指令功能

•指令应用

LEAreg,src;

(reg)←src的EA

将src的有效地址(16位段内偏移地址)

传送给通用寄存器reg

MOVBX,2130H

立即数2130H赋给通用寄存器BX

LEABX,[2130H]

地址值2130H赋给通用寄存器BX

符号地址的获得

将符号地址BUFF的地址值赋给通用寄存器BX

•LEABX,BUFF

指令LEA传送BUFF的地址值给BX

•MOVBX,OFFSETBUFF

运算符OFFSET返回BUFF的地址值后赋给BX

�MOVBX,BUFF

注:

将BUFF地址单元中的字数据传送给BX

注意

LEA指令和OFFSET运算符可以完成相同的功能,只是执行时

间不同;

LEABX,label;

程序运行时,取lable的EA到BX中

MOVBX,OFFSETlabel

汇编时取lable的EA,运行时放入BX中

《例》查表求数字0~9的格雷码

•格雷码表

14H

12H

11H

0CH

0AH

09H

06H

05H

34H

18HTABLE

DS段

0~9的格雷码从符号地

址TABLE开始顺序存入。

•编程序段

LEABX,TABLE;

表首地址赋BX

MOVAL,7;

表偏为7

查表

注:

AL中有7的格雷码11H

全地址指针传送指令——LDS、LES

LDSreg,src;

(reg)←src的(EA)

(DS)←src的(EA+2)

LESreg,src;

(ES)←src的(EA+2)

LDS,32位目标地址送段寄存器DS和通用寄存器reg

LES,32位目标地址送段寄存器ES和通用寄存器reg

指令LEA与LDS,LES的区别

•LEAreg,src

src表示存储器单元地址本身

•LDSreg,src

LESreg,src

src表示存储器单元地址中的地址值

指令LEA与LDS,LES的比较

已知:

DS=09A0H,BX=0048H

LEADI,[BX]

LDSDI,[BX]

LESDI,[BX]

→执行后:

DI=0048H

DI=003EH

DS=0816H

ES=0816H

DS=09A0

08H

3EH

00H

16H

0048H

0049H

004AH

004BH

标志传送指令——LAHF、SAHF

•LAHF;

(AH)←(F)低8

读标志寄存器的低8位到寄存器AH的指令

•SAHF;

(F)低8←(AH)

将AH的值写入标志寄存器的低8位的指令

注:

字节传送方式

16位标志寄存器中的低8位数据传送

即状态标志位CF、AF、ZF、SF、PF的传送

标志传送指令——PUSHF、POPF

•PUSHF

标志寄存器的入栈指令

•POPF

标志寄存器的出栈指令

字传送方式

16位标志寄存器中的16位数据传送

即状态标志位OF、CF、AF、ZF、SF、PF的传送

及控制标志位IF、DF、TF的传送

注意

�操作数全部隐含

�PUSHF和POPF指令一般用于保护FR内容;

�LAHF和SAHF指令一般用于修改FR内容:

LAHF;

将FR的低8位送入AH

……;

修改AH的值

SAHF;

将修改后的值重新送回FR

�上述方法显然只能处理FR的低8位,如需处

理FR中的任一位,可用以下方法:

PUSHF;

将FR的值压入堆栈

POPAX;

将刚压入的FR值弹出到AX中

修改AX的值

PUSHAX;

将修改后的值压入堆栈

POPF;

将修改后的值弹出到FR中

数据传送类指令总结

�源、目操作数长度必须一致。

�源、目操作数不能同时是存储器操作数。

�源、目操作数不能同时是段寄存器。

�立即数和代码段寄存器CS不能作目操作数。

�当目操作数是段寄存器时,源操作数不能是立即数。

�可以使用段寄存器的指令:

MOV、PUSH、POP。

�除XCHG指令外,其它数传指令仅改变目操作数,源操

作数保持不变。

�除SAHF、POPF指令外,其它数传指令的执行不影响标

志位。

对所有指

令都适

用!

微机系统原理与接口技术微机系统原理与接口技术

算术运算类指令

�加法指令

�减法指令

�乘法指令

�除法指令

ADD,ADC指令、INC指令、DAA,AAA指令

SUB,SBB指令、DEC指令、DAS,AAS指令

NEG指令、CMP指令

MUL,IMUL指令、AAM指令

DIV,IDIV指令、AAD指令

�计算机中运算指令的特点

•对十进制加、减、乘、除的应用是小学问题

•对二进制加、减、乘、除的应用是大学问题

•对有限位二进制加、减、乘、除的应用是

计算机中必须解决的问题

�除了除法指令及符号扩展指令外,其它算术运算指令

都将影响各状态标志,不同的指令对各状态标志的影响

也不同;

�加、减法运算时所有数据长度相等,乘法运算时结果

长度加倍,除法运算时被除数长度加倍;

乘除法运算时

使用隐含操作数;

�可以使用BCD码进行算术运算,并可用相应的调整指

令对结果进行调整以保证结果仍为BCD码;

�运算指令对状态标志位的影响

•无符号数运算影响状态标志位CF

•有符号数运算影响状态标志位OF

•有符号数运算结果的正负值影响状态标志位SF

•两数运算结果是否为0影响状态标志位ZF

•两数低4位运算影响状态标志位AF

•两数运算结果中1的量影响状态标志位PF

�计算机中两数运算后的溢出检测

•对无符号数测状态标志位CF

对有符号数测状态标志位OF

•CF的特点

两数运算后CF=0,表示运算结果未超界,无溢出

两数运算后CF=1,表示运算结果己超界,有溢出

•OF的特点

两数运算后OF=0,表示运算结果未超界,无溢出

两数运算后OF=1,表示运算结果己超界,有溢出

溢出即加法有进位,减法有借位

溢出即运算出现错误

�二进制数的表值范围与标志

•8位无符号数

和在数0~255内CF=0

和在数0~255外CF=1

•8位有符号数

和在数-128~+127内OF=0

和在数-128~+127外OF=1

两个8位二进制数的加法运算及和的溢出

分析

•表示无符号数时——无溢出

•表示有符号数时——无溢出

+15<

+12715<

25500001111B

+3

++12

3

+12

00000011B

+00001100B

认为有符号数相加认为无符号数相加机内二进制数相加

CF=0,无溢出OF=0,无溢出

•表示无符号数时——有溢出

+2<

+127258>

2551←00000010B

+6

+-4

6

+252

00000110B

+11111100B

CF=1,有溢出OF=0,无溢出

•表示有符号数时——有溢出

+131>

+127131<

25510000011B

+8

++123

8

+123

00001000B

+01111011B

CF=0,无溢出OF=1,有溢出

-132<

-128380>

2551←01111100B

-121

+-11

135

+245

10000111B

+11110101B

CF=1,有溢出OF=1,有溢出

算术运算——加法类指令

�加法指令——ADD

•指令特点

不带进位的加法指令

ADDdst,src;

dst←dst+src

用于低字(字节)相加

无符号数、有符号数的加法用相同的指令

最常用

的加法

�加法指令——ADC

带进位的加法指令

ADCdst,src;

dst←dst+src+CF

用于高字(字节)相加

�ADD、ADC指令的操作数及类型

OPreg,reg

OPreg,memOPmem,reg

OPreg,immOPmem,imm

•操作数

•数据类型

字节数据类型

字数据类型

�ADD与ADC分析

•影响所有标志位

•ADC指令的另一个默认操作数为进位位CF;

•若进位标志CF=0,则ADD=ADC

•无符号数、有符号数用相同的加法指令

�对无符号数加法时,判断标志位CF

�对有符号数加法时,判断标志位OF

�INC——加1指令

•影响的标志(不影响的标志)

•允许的操作数

INCoprd;

oprd←oprd+1

多用于循环程序中的地址指针加1

OF、SF、ZF、PF、AF(CF)

reg、mem

将存放在20000H和21000H地址处的两个32位

数相加,结果放在21000H地址处。

MOVDS,AX;

设置默认段基址DS=2000H

MOVSI,0;

使SI指向20000H单元

MOVDI,1000H;

使DI指向21000H单元

MOVAX,[SI];

将20000H、20001H单元的16位数送到AX中

ADD[DI],AX;

将两个32位数的低16位相加,结果放21000H处

MOVAX,[SI+2];

将20002H、20003H单元的16位数送到AX中

ADC[DI+2],AX;

将32位的高16位相加,结果放21002H处

MOV[DI+4],0

ADC[DI+4],0;

处理高16位的进位

《例》两双倍精度字1234FEDCH和11228765H相加

22H

87H

65H

FEH

DCH

DS段1000H

2000H

•编程•存储图

LEASI,[1000H]

LEADI,[2000H]

MOVAX,[SI]

ADDAX,[DI]

MOV[SI],AX

MOVAX,[SI+2]

ADCAX,[DI+2]

MOV[SI+2],AX

•结果

23H

57H

86H

41H

�十进制数的BCD编码

用4位二进制数对1位十进制数进行编码

�8-4-2-1BCD编码

0000——0、...1001——9

�组合十进制数

1字节含2个BCD编码的十进制数

�非组合十进制数

1字节含1个BCD编码的十进制数

BCDBCD

BCD0000

�十进制数的BCD编码表示

•4位二进制数的表值范围

0000B~1111B、0~15、0H~FH

•4位二进制数的BCD编码表示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1