汇编语言复习提纲.docx
- 文档编号:30064842
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:16
- 大小:37.10KB
汇编语言复习提纲.docx
《汇编语言复习提纲.docx》由会员分享,可在线阅读,更多相关《汇编语言复习提纲.docx(16页珍藏版)》请在冰豆网上搜索。
汇编语言复习提纲
汇编语言复习提纲
§280×86计算机组织
一、基本概念
a)晶体管数:
指芯片中所包含的晶体管数,它说明硬件的集成度
b)主频:
指芯片所用的主时钟频率,它直接影响计算机的运行速度。
c)数据总线:
负责计算机中数据在各组成部分之间的传送。
d)数据总线宽度:
指在芯片内部数据传送的宽度
e)外部数据总线宽度:
指芯片内和芯片外交换数据的宽度。
f)地址总线宽度:
指专用于传送地址的总线宽度,根据这一数值可以确定处理机可以访问的存储器的最大范围(寻址空间)。
g)层次结构的存储器组织:
中间层次通常称为主存储器;比其速度更高、但容量较小的一层称为高速缓冲存储器(cache);比其速度慢、但容量很大的一层称为外存储器,如磁带、磁盘、光盘等。
h)系统总线把CPU、存储器和I/O设备连接起来,用来传送各部分之间的信息。
二、80×86寄存器组
a)通用寄存器
a)AX:
累加器,主要用于存放操作数。
所有I/O指令都使用这一寄存器与外部设备进行数据交换。
b)BX:
通用寄存器,通常作为基址寄存器。
c)CX:
通用寄存器,通常用于保存计数值,用做隐含计数器。
d)DX:
通用寄存器,在作双字长运算时通常把AX和DX组合在一起存放双字长数,DX用于存放高位字,或者存放I/O端口地址。
P.s.AX、BX、CX、DX为十六位寄存器。
每个都可以分为两个8位寄存器,分别为:
AH、AL、BH、BL、CH、CL、DH、DL。
e)SP:
堆栈指针寄存器,用于指示段顶偏移地址。
f)BP:
基址指针寄存器,作为堆栈区中的一个基地址以便访问堆栈中的信息。
P.s.BP、SP可以与堆栈段寄存器SS联用来确定堆栈段中的某一存储单元的地址。
g)SI:
源变址寄存器。
h)DI:
目的变址寄存器。
P.s.SI、DI一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。
b)专用寄存器
a)IP:
指令指针寄存器,用来存放代码段中的偏移地址,始终指向下一条指令的首地址。
b)SP:
堆栈指针寄存器,他与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。
c)FLAGS:
标志寄存器,又称程序状态寄存器(PSW)。
i)条件码标志:
用于记录程序中运行结果的状态信息,由CPU自动设置。
●OF(溢出标志):
运算过程中,操作数超出机器能表示的范围称为溢出。
此时OF置1,否则置0.
●SF(符号标志):
记录预算结果的符号,结果为负置1,否则置0。
●ZF(零标志):
运算结果为0时置1,否则置0.
●CF(进位标志):
运算时,最高有效位有进位时置1,否则置0。
●AF(辅助进位标志):
记录运算时第3位(半个字节)产生的进位值。
有进位则置1,否则置0。
●PF(奇偶标志):
当操作数中1的个数为偶数时置1,否则置0。
ii)控制标志位
●DF(方向标志):
在串处理指令中控制处理信息的方向。
DF为1时,每次操作后使变址寄存器SI和DI减小,反之亦然。
iii)系统标志位(非重点,可不看)
●TF(陷阱标志):
用于调试时的单步操作。
●IF(中断标志):
用于是否允许CPU响应可屏蔽中断请求。
●IOPL(I/O特权级):
在保护模式下,用于控制对I/O地址空间的访问。
c)段寄存器
可归于专用寄存器,专用于存储器寻址。
a)代码段寄存器:
CS
b)数据段寄存器:
DS
c)堆栈段寄存器:
SS
d)附加段寄存器:
ES
三、80×86段寄存器和相应存放偏移地址的寄存器之间的默认组合
段
偏移
CS
IP
SS
SP或BP
DS
BX、DI、SI或一个16位数
ES
DI(用于串指令)
§380×86的指令系统和寻址方式
一、基本概念
a)目的操作数、原操作数:
在指令moval,5中,al被称为“目的操作数”,5被称为“原操作数”。
b)有效地址(EA):
80×86里,把操作数的偏移地址称为有效地址。
EA由以下四种成分组成
●位移量
●基址
●变址
●比例因子
EA=基址+(变址×比例因子)+位移量
二、80×86的寻址方式
1.与数据有关的寻址方式
1.)立即寻址
操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。
原操作数长度应与目的操作数长度一致。
例如:
movAL,5
AL称为“目的操作数”,5称为原操作数。
该指令执行后(AL)=05H。
2.)寄存器寻址
操作数在寄存器中,指令指定寄存器号。
例如:
movAX,BX
若执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变。
3.)直接寻址方式
操作数的有效地址只包含位移量的一种成分。
其计算方法如下:
EA=(DS)×16d+[value]
例如:
movAX,[2000H]
若(DS)=3000H,则执行情况为EA=(DS)×16d+[value],EA=3050H,则AX=EA=3050H。
P.s.如果[value]在附加段寄存器中,则应该指定段跨越前缀如下
movAX,ES:
VALUE或movAX,ES:
[VALUE]
4.)寄存器间接寻址
操作数的有效地址只包含基址寄存器内容或变址寄存器内容的一部分。
因此,EA就在某个寄存器中,而操作数在存储器中。
寄存器搭配如下:
例如:
movAX,[BX]PA=16d×(DS)+(BX)
movAX,ES:
[BX]PA=16d×(ES)+(BX)
movAX,[BP]PA=16d×(SS)+(BP)
P.s.[value]中,value不允许使用AX,BX,DX
5.)寄存器相对寻址
操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两种成分组成。
它所允许的寄存器及其对应的默认段情况与“寄存器间接寻址”相同,不再赘述。
例如:
movAX,COUNT[SI]或movAX,[COUNT+SI]
其中COUNT为16位位移量的符号地址。
若(DS)=3000H,(SI)=2000H,COUNT=3000H
则物理地址(PA)=(DS)×16d+(SI)+COUNT=35000H。
P.s.此寻址方式也可以使用段跨越前缀。
MOVDL,ES:
String[SI]
另,这种寻址方式适用于表格处理,表格的首地址可设置为位移量,利用修改基址或变址寄存器的内容来取得表格中的值。
6.)基址变址寻址
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成。
例如:
movAX,[BX][DI]或movAX,[BX+DI]
若(DS)=2100H,(BX)=0158H,(DI)=10A5H,
则EA=0158+10A5=11FDH,物理地址(PA)=21000+11FD=221FDH
P.s.此寻址方式使用段跨越前缀的格式为:
movAX,ES:
[BX][DI]
7.)相对基址变址寻址
操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三种部分组成。
例如:
movAX,MASK[BX][SI]或movAX,MASK[BX+SI]或movAX,[MASK+BX+SI]、
若(DS)=3000H,(BX)=2000H,(SI)=1000H,MASK=0250H,
则PA=16d×(DS)+(BX)+(SI)+MASK=33250H
P.s.此寻址方式使用段跨越前缀的格式与“基址变址寻址”类似,不再赘述。
2.与转移地址有关的寻址方式
1.)段内直接寻址
转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。
这种寻址方式适用于条件转移及无条件转移指令,但是,当它用于条件转移指令时,位移量只允许8位。
无条件转移指令在位移量为8位时称为短跳转,位移量为16位时称为近跳转。
其格式为:
JMPNEARPTRPROGIA
JMPSHORTQUEST
其中,PROGIA和QUEST均为转向的符号地址,在机器指令中,用位移量来表示。
在汇编指令中,如果位移量为16位,则在符号地址前加操作符NEARPTR;若位移量为8位,则在符号地址前加操作符SHORT。
2.)段内间接寻址
转向有效地址是一个寄存器或是一个存储单元的内容。
这个寄存器或存储单元的内容可以用数据寻址方式除立即数以外任何一种寻址方式取得,所得到的转向的有效地址用来取代IP寄存器的内容。
其格式为:
JMPBX
JMPWORDPTR[BP+TABLE]等。
其中WORDPTR为操作符,用以指出其后寻址方式所取得的转向地址是一个字的有效地址,也就是说它是一种段内转移。
3.)段间直接寻址
在指令中直接提供了转向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容。
用指定的段地址取代CS寄存器的内容就完成转移操作。
其格式为:
JMPFARPTRNEXTROUTINT
其中,NEXTROUTINT为转向的符号地址,即“:
”前面的标号。
FARPTR则是表示段间转移的操作符。
4.)段间间接寻址
用存储器中相邻两个字的内容取代IP和CS的内容,达到段间转移的目的。
其格式为:
JMPDWORDPTR[INTERS+BX]
其中,[INTERS+BX]说明数据寻址方式为直接变址寻址方式,其形式参考前文。
DWORDPTR为双字操作符,说明为段间转移指令。
3.80×86的指令系统
1.)数据传送指令
a)通用数据传送指令
●MOV传送
格式:
MOVDST,SRC
执行操作:
(DST)<-(SRC),其中DST表示目的操作数,SRC表示源操作数。
其中DST不能为立即数和CS寄存器
●PUSH进栈
格式:
PUSHSRC
执行操作:
将(SRC)入栈
其中SRC不能为立即数
●POP出栈
格式:
POPSRC
执行操作:
将(SRC)出栈
其中SRC不能为立即数和CS寄存器
●XCHG交换
格式:
XCHGOPR1,OPR2
执行操作:
交换OPR1和OPR2中的内容
其中,两个操作数其中必有一个为寄存器。
不允许使用段寄存器,且OPR1和OPR2不能为立即数。
b)累加器专用传送指令
●IN输入
●OUT输出
此二种指令专用于与I/O端口进行数据交换所使用,在此不述。
c)地址传送指令
●LEA有效地址送寄存器
格式:
LEAREG,SRC
执行操作:
(REG)<-SRC。
将SRC的有效地址送到指定的寄存器中。
其中SRC不能为立即数和寄存器寻址方式。
P.s.LEABX,LIST和MOVBX,OFFSETLIST两命令等同。
2.)算术指令
a)加法指令
●ADD加法
格式:
ADDDST,SRC
执行操作:
(DST)<-(SRC)+(DST)
P.s.该指令影响条件标志位CF
●INC自增
格式:
INCOPR
执行操作:
(OPR)<-(OPR)+1
b)减法指令
●SUB减法
同ADD,不述。
●DEC自减
同INC,不述
●CMP比较
格式:
CMPOPR1,OPR2
执行操作:
(OPR1)-(OPR2)。
该指令同SUB指令一样执行减法操作,只根据结果设置条件标志位,常用于条件语句,以产生不同的分支结构。
c)乘法指令
●MUL无符号乘法
同ADD,不述。
d)除法指令
●DIV无符号除法
同ADD,不述。
3.)逻辑指令
a)逻辑运算
●AND逻辑与
格式:
ANDDST,SRC
执行操作:
(DST)<-(SRC)∧(DST)
●OR逻辑与
同AND,不述。
●NOT逻辑非
同AND,不述。
●XOR异或
同AND,不述。
●TEST测试指令
格式:
TESTOPR1,OPR2
执行操作:
(OPR1)∧(OPR2)
●注意:
以上五种指令中,NOT不允许使用立即数,其他4条除非源操作数是立即数,至少有一个操作数必须在寄存器中,另一个操作数可以使用任意寻址方式。
它们对标志位的影响是:
NOT不影响标志位,其他4种指令将使CF和OF位为0,AF无定义,而SF、ZF、PF根据运算结果设置。
b)移位指令
●SHL逻辑左移
格式:
SHLOPR,CNT
执行操作:
将OPR中的内容向左移动CNT位,空位以“0”填补,改变CF标志位。
其中OPR用除立即数外的任何寻址方式;若CNT=1则可以直接写,否则需先将移位数存入CL中,然后将CNT写为CL即可。
●SAL算术左移
同SHL,不述。
●SHR逻辑右移
格式:
SHROPR,CNT
执行操作:
将OPR中的内容向右移动CNT位,空位以“0”填补,改变CF标志位。
其中OPR用除立即数外的任何寻址方式;若CNT=1则可以直接写,否则需先将移位数存入CL中,然后将CNT写为CL即可。
●SAR算数右移
基本同SHR,最高有效位右移,同时再以它自身的值填入,即原来是0则仍是0,原来是1则仍为1。
●ROL循环左移
基本同SHL,只是在左移的时候最高位、CF标志位和最低位相连,即移动时空位不断以移走的最高位填补。
●ROR循环右移
同ROL,不述。
c)循环处理指令
●REP重复
格式:
REP
执行操作:
重复操作,直到CX中的内容为0为止。
●REPE/REPZ相等/为零则重复
同REP,不述。
●REPNE/REPNZ不相等/不为零重复
同REP,不述。
4.)控制转移指令
a)无条件转移指令JMP
●段内直接短转移
格式:
JMPSHORTOPR
执行操作:
(IP)<-(IP)+8位位移量。
其中8位位移量由OPR指定,直接使用符号地址,只允许在-128~+127字节范围内转移。
●段内直接近转移
格式:
JMPNEARPTROPR
执行操作:
基本同(段内直接短转移),但OPR为16位位移量。
●段内间接近转移
格式:
JMPWORDPTROPR
执行操作:
基本同前两种,但OPR可以使用除立即数外任何一种寻址方式。
●段内直接远转移
格式:
JMPFARPTROPR
执行操作:
基本同前,但OPR使用直接寻址,可用符号地址。
●段间间接远转移
格式:
JMPDWORDPTROPR
执行操作:
基本同前,但OPR可以使用除立即数和寄存器寻址外任何一种寻址方式。
b)条件转移指令
●JZ/JE结果为零则转移(ZF==1)
●JNZ/JNE结果不为零则转移(ZF==0)
●JS结果为负则转移(SF==1)
●JNS结果为正则转移(SF==0)
●JO溢出则转移(OF==1)
●JNO非溢出则转移(OF==0)
●JP/JPE奇偶位为1则转移(PF==1)
●JNP/JPO奇偶位为0则转移(PF==0)
●JB/JNAE/JC低于、不高于或等于,或进位为1则转移(CF==1)
●JNB/JAE/JC不低于、高于或等于,或进位为0则转移(CF==0)
●JBE/JNA低于、不高于或等于则转移(CF||ZF==1)
●JNBE/JA不低于、高于或等于则转移(CF||ZF==0)
c)循环指令
●LOOP
格式:
LOOPOPR
执行操作:
当CX!
=0时,循环。
OPR为符号地址。
●LOOPZ/LOOPE
基本同LOOP,测试条件为ZF=1&&CX!
=0。
不述。
●LOOPNZ/LOOPNE
基本同LOOP,测试条件为ZF=0&&CX!
=0。
不述。
d)子程序
●CALL调用
格式:
CALLDST
执行操作:
把子程序的返回地址,即CALL指令的下一条指令地址存入堆栈中。
不常用,不述。
●RET返回
格式:
RET
执行操作:
使子程序在功能完成之后返回调用程序继续执行。
常用,但简单,不述。
e)中断
●INT中断
格式:
INTTYPE
常用于DOS中断功能调用,以输入、输出等为目的。
5.)处理机控制与杂项操作指令
a)标志处理指令
●CLC进位位置0(CF=0)
●CMC进位位求反(CF=!
CF)
●STC进位位置1(CF=1)
●CLD方向位置0(DF=0)
●STD方向位置1(DF=1)
●CLI中断标志置0(IF=0)
●STI中断标志置0(IF=1)
其他:
1.完整的汇编语言代码格式
;**********************************************************************************
Datasegment
……
Dataends
;**********************************************************************************
Extrasegment
……
Extraends
;**********************************************************************************
Codesegment
assumecd:
code,ds:
data,ex:
extra
start:
;setDSregistertocurrentdatasegment
Movax,data
Movds,ax
;setESregistertocurrentextrasegment
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 复习 提纲