汇编语言知识点Word格式.docx

上传人:b****6 文档编号:20994364 上传时间:2023-01-26 格式:DOCX 页数:24 大小:78.08KB
下载 相关 举报
汇编语言知识点Word格式.docx_第1页
第1页 / 共24页
汇编语言知识点Word格式.docx_第2页
第2页 / 共24页
汇编语言知识点Word格式.docx_第3页
第3页 / 共24页
汇编语言知识点Word格式.docx_第4页
第4页 / 共24页
汇编语言知识点Word格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

汇编语言知识点Word格式.docx

《汇编语言知识点Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言知识点Word格式.docx(24页珍藏版)》请在冰豆网上搜索。

汇编语言知识点Word格式.docx

CS、DS、SS、ES

七、标志寄存器(FLAGS/PSW)

条件标志位:

OF溢出标志SF符号标志ZF零标志

CF进位标志AF辅助进位标志PF奇偶标志

控制标志位:

DF方向标志IF中断标志TF陷阱标志

八、寄存器与存储器的比较:

寄存器:

在CPU内部;

访问速度快;

容量小,成本高;

用名字表示;

没用地址

存储器:

在CPU外部;

访问速度慢;

容量大,成本低;

用地址表示;

地址可用各种方式形成

第三章

寻址方式

操作数

所在位置

物理地址

(PA)

格式

注意

1.立即寻址

存储器的代码段

MOVAL,5

只能用源操作数

操作数和源操作数的长度一致

2.寄存器寻址

寄存器

(唯一)

无 

MOVAX,BX

字节寄存器只有

AHALBHBLCHCLDHDL

CS不能用MOV指令改变,

源操作数和目的操作数的字长一致

3.直接寻址

存储器

 

段地址

+位移量

  

MOVAX,ES:

[2000H]

MOVAX,VALUE

MOVAX,[2000H]

默认的段地址存储在DS中

遇到BP的段地址存储在SS

可以使用段跨越前缀

4.寄存器

间接寻址

+基址

/变址

MOVAX,[BX]

[BX]

可用的寄存器:

BXBPSIDI

不允许使用AX、CX、DX

存放偏移地址(EA)

SRC和DST的字长一致

使用BP时,默认的数据段是SS,

其余都是DS

5.寄存器

相对寻址

MOVAX,COU[SI]

[COU+SI]

MOVAX,[COU+SI]

6.基址变址寻址

+变址

MOVAX,[BX+SI]

MOVAX,[BX][SI]

7.相对

基址变址

MOVAX,MASK[BX][SI]

MOVAX.MASK[BX+SI]

可以使用段跨越前缀 

九、数据传送指令

传送指令MOVCPU内部寄存器之间的数据传送

指令格式:

MOVDST,SRC执行操作:

(DST)(SRC)

注意:

*DST、SRC不能同时为段寄存器MOVDS,ES

*DST、SRC不能同时为存储单元

*立即数不能直接送段寄存器MOVDS,2000H

*DST不能是立即数和CS

*不影响标志位

交换指令XCHG

XCHGOPR1,OPR2执行操作:

(OPR1)(OPR2)

例:

XCHGBX,[BP+SI]XCHGAL,BH

*两个操作数字长一致

*两个操作数都不能是段寄存器

*两个操作数都不能是立即数

*两个操作数不能同时是存储单元

*可以采用除立即寻址方式外的任何一种寻址方式。

*不影响标志位

地址传送指令LEA、LDS、LES

1.有效地址送寄存器指令:

LEAREG,SRC执行操作:

(REG)SRC

2.指针送寄存器和DS指令:

LDSREG,SRC执行操作:

(REG)(SRC)

(DS)(SRC+2)相继二字寄存器、DS

3.指针送寄存器和ES指令:

LESREG,SRC执行操作:

(ES)(SRC+2)相继二字寄存器、ES

注意:

*源操作数必须为存储器操作数

*目的操作数必须是一个16位通用寄存器,不能是段寄存器

*源操作数可以是除立即寻址和寄存器寻址以外的任意一种寻址方式

堆栈操作指令PUSH、POP

1.进栈指令:

PUSHSRC

执行操作:

(SP)(SP)–2((SP)+1,(SP))(SRC)

出栈指令:

POPDST

(DST)((SP)+1,(SP))(SP)(SP)+2

堆栈:

‘先进后出’的存储区,段地址存放在SS中,SP在任何时候都指向栈顶,进出栈后自动修改SP。

*堆栈操作必须以字为单位。

*不能用立即寻址方式PUSH1234H

*DST不能是CSPOPCS

堆栈的用途:

临时保存寄存器的内容。

PUSHAX

PUSHBX

PUSHCX

……;

其间用到AX、BX、CX

POPCX;

后进先出

POPBX

POPAX

标志操作指令

LAHF、SAHF、PUSHF、POPF、CLC、STC、CMC、CLD、STD、LI、STI

标志传送指令:

1.标志送AH指令:

LAHF执行操作:

(AH)(FLAGS的低字节)

2.AH送标志寄存器指令:

SAHF执行操作:

(FLAGS的低字节)(AH)

*LAHF不影响标志位*SAHF影响CF、PF、AF、ZF、SF

标志进栈指令:

PUSHF

(SP)(SP)-2((SP)+1,(SP))(FLAGS)

标志出栈指令:

POPF

(FLAGS)((SP)+1,(SP))(SP)(SP)+2

PUSHF和POPF经常一起联用,完成保护、维护标志寄存器的内容或改变标志位的值。

标志位操作指令:

清进位标志指令CLCCF←0

置进位标志指令STCCF←1

进位标志取反指令CMCCF←CF

清方向标志指令CLDDF←0

置方向标志指令STDDF←1

清中断允许标志指令CLIIF←0

置中断允许标志指令STIIF←1

*只影响本指令指定的标志

十、加减法指令:

加法指令:

ADDDST,SRC执行操作:

(DST)(SRC)+(DST)

带进位加法指令:

ADCDST,SRC执行操作:

(DST)(SRC)+(DST)+CF

加1指令:

INCOPR执行操作:

(OPR)(OPR)+1

*除INC指令不影响CF标志外,均对状态标志位有影响。

各加法指令对条件标志位的影响:

SF=1,结果为负ZF=1,结果为0CF=1,和的最高有效位有向高位的进位

OF=1,两个操作数符号相同,而结果符号与之相反

CF位表示无符号数相加的溢出。

OF位表示带符号数相加的溢出。

减法指令:

SUBDST,SRC执行操作:

(DST)(DST)-(SRC)

带借位减法指令:

SBBDST,SRC执行操作:

(DST)(DST)-(SRC)-CF

减1指令:

DECOPR执行操作:

(OPR)(OPR)-1

求补指令:

NEGOPR执行操作:

(OPR)-(OPR)

比较指令:

CMPOPR1,OPR2执行操作:

(OPR1)-(OPR2)

各减法指令对条件标志位(CF/OF/ZF/SF)的影响:

CF=1,被减数的最高有效位有向高位的借位或CF=1减数转换为加法运算时无进位

OF=1两个操作数符号相反,而结果的符号与减数相同

CF位表示无符号数减法的溢出。

OF位表示带符号数减法的溢出。

NEG指令对CF/OF的影响

CF=0,操作数为0OF=1,操作数为-128(字节运算)或-32727(字运算

十一、乘除运算指令

无符号数乘法指令:

MULSRC带符号数乘法指令:

IMULSRC

字节操作数(AX)(AL)*(SRC)

字操作数(DX,AX)(AX)*(SRC)

*目的操作数必须是累加器

*AL(AX)为隐含的乘数寄存器。

*AX(DX,AX)为隐含的乘积寄存器。

*SRC不能为立即数。

*除CF和OF外,对条件标志位无

乘法指令对CF/OF的影响:

MUL指令:

CF,OF=00乘积的高一半为零

11否则

IMUL指令:

CF,OF=00乘积的高一半是低一半的符号扩展

(AX)=16A5H,(BX)=0611H

(1)MULBX;

(DX,AX)(AX)*(BX)

;

16A5*0611=00895EF5

(DX)=0089H(AX)=5EF5HCF=OF=1

(2)IMULBL;

(AX)(AL)*(BL)

A5*115B*11=060BF9F5

(AX)=0F9F5HCF=OF=1

无符号数除法指令:

DIVSRC

带符号数除法指令:

IDIVSRC

字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数

字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数

*AX(DX,AX)为隐含的被除数寄存器。

*AL(AX)为隐含的商寄存器。

*AH(DX)为隐含的余数寄存器。

*对所有条件标志位均无定义。

十二、类型转换指令

CBWALAX

若(AL)的最高有效位为0,则(AH)=00H,若(AL)的最高有效位为1,则(AH)=FFH

CWDAX(DX,AX)

若(AX)的最高有效位为0,则(DX)=0000H,若(AX)的最高有效位为1,则(DX)=FFFFH

(AX)=0BA45H

CBW;

(AX)=0045HCWD;

(DX)=0FFFFH(AX)=0BA45H

*无操作数指令*隐含对AL或AX进行符号扩展*不影响条件标志位

十三、逻辑运算指令

逻辑非指令:

NOTOPR*OPR不能为立即数

(OPR)(OPR)*不影响标志位

CF

OF

SF

ZF

PF

AF

*

无定义

逻辑与指令:

ANDDST,SRC执行操作:

(DST)(DST)(SRC)

逻辑或指令:

ORDST,SRC执行操作:

异或指令:

XORDST,SRC执行操作:

测试指令:

TESTOPR1,OPR2执行操作:

(OPR1)(OPR2)

十四、移位指令

逻辑左移SHLOPR,CNT

逻辑右移SHROPR,CNT

算术左移SALOPR,CNT(同逻辑左移)

算术右移SAROPR,CNT

循环左移ROLOPR,CNT

循环右移ROROPR,CNT

带进位循环左移RCLOPR,CNT

带进位循环右移RCROPR,CNT

*OPR可用除立即数以外的任何寻址方式

*CNT=1,SHLOPR,1

CNT>

1,MOVCL,CNTSHLOPR,CL;

以SHL为例

*条件标志位:

CF=移入的数值1CNT=1时,最高有效位的值发生变化

0CNT=1时,最高有效位的值不变

移位指令:

SF、ZF、PF根据移位结果设置,AF无定义

循环移位指令:

不影响SF、ZF、PF、AF

十五、控制转移指令:

无条件转移指令JMP

条件转移指令

JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、

JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、

JLE/JNLE、JCXZ

循环指令LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

子程序调用和返回指令CALL、RET

中断与中断返回指令INT、INTO、IRET

十六、与转移地址有关的寻址方式:

用来确定转移指令及转子指令的转向地址

段内寻址段内直接寻址JMPNEARPTRNEXT

段内间接寻址JMPTABLE[BX]

段间寻址段间直接寻址JMPFARPTRNEXT

段间间接寻址JMPDWORDPTR[BX]

无条件转移指令:

段内直接短转移:

JMPSHORTOPR

执行操作:

(IP)←(IP)+8位位移量

段内直接近转移:

JMPNEARPTROPR

执行操作:

(IP)←(IP)+16位位移量

段内间接转移:

JMPWORDPTROPR

(IP)←(EA)

段间直接远转移:

JMPFARPTROPR

(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址

段间间接转移:

JMPDWORDPTROPR

(IP)←(EA)(CS)←(EA+2)

十七、条件转移指令

*只能使用段内直接寻址的8位位移量*不影响标志位

(1)根据单个条件标志的设置情况转移  

格式测试条件

JZ(JE)OPRZF=1

JNZ(JNE)OPRZF=0

JSOPRSF=1

JNSOPRSF=0

JOOPROF=1

JNOOPROF=0

JPOPRPF=1

JNPOPRPF=0

JCOPRCF=1

JNCOPRCF=0

(2)比较两个无符号数,并根据比较结果转移

格式测试条件

<JB(JNAE,JC)OPRCF=1

≥JNB(JAE,JNC)OPRCF=0

≤JBE(JNA)OPRCF∨ZF=1

>JNBE(JA)OPRCF∨ZF=0

*适用于地址或双精度数低位字的比较

(3)比较两个带符号数,并根据比较结果转移*适用于带符号数的比较

<JL(JNGE)OPRSFOF=1

≥JNL(JGE)OPRSFOF=0

≤JLE(JNG)OPR(SFOF)∨ZF=1

>JNLE(JG)OPR(SFOF)∨ZF=0

(4)测试CX的值为0则转移

格式测试条件

JCXZOPR(CX)=0

十八、循环指令

*CX中存放循环次数

*只能使用段内直接寻址的8位位移量*不影响标志位

LOOP

LOOPZ/LOOPE

LOOPNZ/LOOPNE

执行步骤:

(1)(CX)←(CX)–1

(2)检查是否满足测试条件,如满足则(IP)←(IP)+8位位移量,实行循环;

不满足则IP不变,退出循环

循环指令:

LOOPOPR

测试条件:

(CX)0

为零或相等时循环指令:

LOOPZ(LOOPE)OPR

ZF=1且(CX)0

不为零或不相等时循环指令:

LOOPNZ(LOOPNE)OPR

ZF=0且(CX)0

十九、例:

求首地址为ARRAY的M个字之和,结果存入TOTAL

MOVCX,M

MOVAX,0

MOVSI,AX

AGAIN:

ADDAX,ARRAY[SI]

ADDSI,2

LOOPAGAIN

MOVTOTAL,AX

二十、串处理指令

串处理指令串重复前缀

LODSB/LODSWREP

STOSB/STOSWREPE/REPZ

MOVSB/MOVSWREPNE/REPNZ

SCASB/SCASW

CMPSB/CMPSW

LODS从串取指令:

LODSSRC

LODSB(字节)

LODSW(字)

字节操作:

(AL)←((SI)),(SI)←(SI)±

1

字操作:

(AX)←((SI)),(SI)←(SI)±

2

*LODS指令一般不与REP联用

*源串一般在数据段中(允许使用段跨越前缀来修改),

目的串必须在附加段中

*不影响条件标志位

STOS存入串指令:

STOSDST

STOSB(字节)

STOSW(字)

字节操作:

((DI))←(AL),(DI)←(DI)±

((DI))←(AX),(DI)←(DI)±

MOVS串传送指令:

MOVSDST,SRC

MOVSB(字节)

MOVSW(字)

MOVSES:

BYTEPTR[DI],DS:

[SI]

(1)((DI))←((SI))

(2)字节操作:

(SI)←(SI)±

1,(DI)←(DI)±

字操作:

(SI)←(SI)±

2,(DI)←(DI)±

方向标志DF=0时用+,DF=1时用-。

SCAS串扫描指令:

SCASDST

SCASB(字节)

SCASW(字)

(AL)-((DI)),(DI)←(DI)±

(AX)-((DI)),(DI)←(DI)±

CMPS串比较指令:

CMPSSRC,DST

CMPSB(字节)

CMPSW(字)

(1)((SI))-((DI))根据比较结果置条件标志位:

相等ZF=1;

不等ZF=0

(2)字节操作:

REP(与MOVS/STOS配合工作)

(1)如(CX)=0则退出REP,否则转

(2)

(2)(CX)(CX)-1

(3)执行MOVS/STOS/LODS

(4)重复

(1)~(3)

REPMOVS:

将数据段中的整串数据传送到附加段中。

源串(数据段)→目的串(附加段)

执行REPMOVS之前,应先做好:

(1)源串首地址(末地址)→SI

(2)目的串首地址(末地址)→DI

(3)串长度→CX

(4)建立方向标志(CLD使DF=0,STD使DF=1)

REPE/REPZ

REPNE/REPNZ(与CMPS和SCAS配合工作)

(1)如(CX)=0或ZF=0(ZF=1)则退出串操作,否则转

(2)

(2)(CX)←(CX)-1

(3)执行CMPS/SCAS

从一个字符串中查找一个指定的字符

messdb‘COMPUTER’

leadi,mess

moval,‘T’

movcx,8

cld

repnescasb

比较两个字符串,找出它们不相匹配的位置

leasi,mess1

leadi,mess2

movcx,8

cld

repecmpsb

反向传送

leasi,mess1+7

leadi,mess2+7

STd

repmovsb

第四章

二十一、标号和变量

(1)标号和变量都是标识符。

标识符组成:

字母a~z,数字0~9,专用字符?

.@_$

标识符的组成规则:

最大长度为31,第一个字符不能是数字,不区分字母的大小写,不能是汇编语言的保留字

(2)标号和变量的异同:

不同:

标号:

用于汇编指令语句中,以冒号结束,在代码段中定义,经常在转移指令或call指令

变量:

用于伪指令语句中,不允许有冒号,在数据段或附加段中定义,经常在操作数字段出现

相同:

都有三种属性:

段属性、偏移属性、类型属性

二十二、伪操作

是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、

存储器分配、指示程序开始结束等功能。

处理器选择伪操作段定义伪操作

程序开始和结束伪操作数据定义及存储器分配伪操作

表达式赋值伪操作地址计数器与对准伪操作

基数控制伪操作

二十三、段定义伪操作

datasegment;

定义数据段

dataends

;

----------------------------------------

extrasegment;

定义附加段

extraends

codesegment;

定义代码段

assumecs:

code,ds:

data,es:

extra

start:

movax,data

movd

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

当前位置:首页 > 外语学习 > 法语学习

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

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