汇编语言知识点1.docx

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

汇编语言知识点1.docx

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

汇编语言知识点1.docx

汇编语言知识点1

第一章

十进制与二进制之间的转换(P2)

降幂法

除法

十进制与六进制之间的转换(P5)

降幂法

除法

补码表示:

正数:

采用符号—绝对值法

负数:

先写出对应的正数的补码表示,然后再将其按位数求反,最后末尾加1,就可以得到负数的补码表示

补吗运算:

二进制数按位求反后在末尾加1

第二章

一、存储容量

1K=1024=210(Kilo)1M=1024K=220(Mega)

1G=1024M=230(Giga)

1个二进制位:

bit(比特)8个二进制位:

Byte(字节)1Byte=8bit

2个字节:

1Word(字)1Word=2Byte=16bit

二、存储单元地址和内容

1.存储器以字节(8bit)为编程单位

2.每个字节单元都有唯一的地址编码

3.地址用无符号整数来表示(编程用十六进制表示)

4.一个字要占用相继的两个字节

5.低位字节存入低地址,高位字节存入高地址

6.字单元地址用它的低地址来表示

7.机器以偶地址访问(读/写)存储器

三、物理地址=16段地址+偏移地址

四、存储器的分段:

20根地址线:

地址范围00000H~FFFFFH(1MB)

机器字长16位:

仅能表示地址范围0000H~FFFFH(64KB)

小段:

每16个字节为一小段,共有64K个小段

段起始地址:

小段首地址

段的大小:

64K范围内的任意字节

五、存储器的逻辑分段优点:

允许程序在存储器内重定位;

允许实模式程序在保护模式下运行;

有利于程序和数据的分离。

六、中央处理器8086/8088寄存器组:

通用寄存器

数据寄存器:

AX,BX,CX,DX

变址寄存器:

SI、DI

指针寄存器:

SP、BP

控制寄存器:

IP、FLAGS

段寄存器:

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]

MOVAX,ES:

[BX]

可用的寄存器:

BXBPSIDI

不允许使用AX、CX、DX

存放偏移地址(EA)

SRC和DST的字长一致

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

其余都是DS

5.寄存器

相对寻址

存储器

段地址

+基址

/变址

+位移量

MOVAX,COU[SI]

MOVAX,ES:

[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执行操作:

(REG)(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乘积的高一半是低一半的符号扩展

11否则

例:

(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)为隐含的余数寄存器。

*SRC不能为立即数。

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

一十二、类型转换指令

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

0

0

*

*

*

无定义

逻辑与指令:

ANDDST,SRC执行操作:

(DST)(DST)(SRC)

逻辑或指令:

ORDST,SRC执行操作:

(DST)(DST)(SRC)

异或指令:

XORDST,SRC执行操作:

(DST)(DST)(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)±1

字操作:

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

MOVS串传送指令:

MOVSDST,SRC

MOVSB(字节)

MOVSW(字)

例:

MOVSES:

BYTEPTR[DI],DS:

[SI]

执行操作:

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

(2)字节操作:

(SI)←(SI)±1,(DI)←(DI)±1

字操作:

(SI)←(SI)±2,(DI)←(DI)±2

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

SCAS串扫描指令:

SCASDST

SCASB(字节)

SCASW(字)

执行操作:

字节操作:

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

字操作:

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

CMPS串比较指令:

CMPSSRC,DST

CMPSB(字节)

CMPSW(字)

执行操作:

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

相等ZF=1;不等ZF=0

(2)字节操作:

(SI)←(SI)±1,(DI)←(DI)±1

字操作:

(SI)←(SI)±2,(DI)←(DI)±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

(4)重复

(1)~(3)

例:

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

messdb‘COMPUTER’

leadi,mess

moval,‘T’

movcx,8

cld

repnescasb

例:

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

leasi,mess1

leadi,mess2

movcx,8

cld

repecmpsb

例:

反向传送

leasi,mess1+7

leadi,mess2+7

movcx,8

STd

repmovsb

第四章

二十一、标号和变量

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

标识符组成:

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

.@_$

标识符的组成规则:

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

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

不同:

标号:

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

变量:

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

相同:

都有三种属性:

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

二十二、伪操作

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

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

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

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

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

基数控制伪操作

二十三、段定义伪操作

datasegment;定义数据段

dataends

;----------------------------------------

extrasegment;定义附加段

extraends

;----------------------------------------

codesegment;定义代码段

assumecs:

code,ds:

data,es:

extra

start:

movax,data

movds,ax;段地址段寄存器

co

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

当前位置:首页 > 求职职场 > 简历

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

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