指令系统

指令分类:

(1) 传送类指令
(2)算术运算类指令
(3)位操作指令
(4)串操作指令
(5)程序转移类指令
(6)处理器控制指令

指令规则

规则1:段寄存器不允许作为操作数(除MOV、PUSH、 POP指令)。

规则2:段寄存器不能直接用立即数赋值。
规则3: CS和立即数不能作目的操作数。
规则4:两个操作数不能同时为段寄存器。
规则5:两个操作数不能同时为存储器操作数(串指令除外)。
规则6:两个操作数的类型(字节类型或字类型等)必须一致。
规则7:指令中至少要有一-个操作数的类型是明确的,否则需用操作符PTR

一:传送类指令

1.mov传送指令

mov OPD,OPS

image.png

image.png

下面的指令是非法

(参见指令规则)
1.MOV AH,BX
;违反规则6 (操作数类型不匹配)
2.MOV DS, 2000H ; 违反规则2 (段寄存器不能直接用立即数赋值)
3.MOV DA_ BYTE,[BX]; 违反规则5 (两操作数不能同时为存储器操作数)
4.MOV CS, AX
;违反规则7 (操作数类型不明确)
5.MOV [DI], 50H
;违反规则4 (两操作数不能同时为段寄存器)
6.MOV DS, ES

2.XCHG 交换指令

xchg dest,src

功能:源操作数和目的操作数的内容相互交换。
说明:该指令与MOV指令相似,但在功能上有两点区别:
①该指令不允许使用立即数和段寄存器作为操作数;
②该指令改变源操作数的内容。
XCHG可以实现字节交换,也可以实现字交换。但不能在两个
存储单元之间执行数据交换过程。

XLAT查表指令

image.png

功能:将(BX) 为首址(AL)为位移量的字节存储单元中的数据
传送到AL。即: AL←([BX + AL])字节
在执行该指令之前,必须建立好一张翻译表,该表的最大容量为256字节。

3地址传送指令

地址传送指令主要用于将存储器操作数地址(偏移
地址、段地址)传送给指定的寄存器。
它包括3条指令:
LEA (取有效地址指令)
LDS (地址指针装入DS指令)
LES (地址指针装入ES指令)

3.1 LEA DEST,SRC

功能:将源操作数的有效地址EA传送给目的操作数指定的16位寄存器。
说明:①源操作数必须是存储器操作数,目的操作数必须是一个1 6位通用寄存器
②本指令对标志位无影响。
③该指令通常用来建立内存储器的寄存器指针。
例: LEA AX,[2728H];
将2728H单元的偏移量送AX,
; AX中为2728H

3.2LES/LDS

  • LDS DEST,SRC
    LES DEST, SRC
    功能:将双字长SRC的低字内容(一般为偏移地址)送入DEST中,
    高字内容(一般为16位段基址)送入DS (LDS)或ES (LES)。


    image.png

说明:①源操作数必须是双字存储器操作数,低字单元中存放偏
移地址,高字单元中存放段基值;
目的操作数必须是一个1 6位通用寄存器,通常特定为SI。
②本指令不影响标志位。

4标志传送指令

标志位传送指令有4条指令:
LAHF(取标志指令)
SAHF(置标志指令)
PUSHF(标志进栈指令)
POPF(标志出栈指令)

4.1取标志指令LAHF

格式: LAHF
功能:将标志寄存器低8位的内容送入AH寄存器。
即: AH←(FLAGS)7-0 该指令的执行不影响标志位。

4.2置标志指令SAHF

格式: SAHF
功能:将AH的内容送入标志寄存器低8位,高8位保持不变。

说明: 用于设置或恢复SF、ZF、 AF、PF、 CF五个标志位。
只影响标志寄存器的低8位。

image.png

4.3标志进栈PUSHF

格式: PUSHF
功能:将标志寄存器的内容压入堆栈。

4.4标志出栈POPF

格式: POPF
功能:将栈顶字单元内容弹出到标志寄存器中,该指令的执行影响标志位。
说明:
1.PUSHF和POPF指令- -般用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。
2.PUSHF和POPF互为逆过程。
3.标志位传送指令中SAHF和POPF指令将直接影响标志寄存器的内容。利用这一特性,可以方便地改变标志寄存器中指定位的状态。

总结

1用BX、SI、 DI来间接寻址时,默认的段寄存器为DS;用
BP来间接寻址时,默认的段寄存器为SS。
2CS寄存器的值可以压入堆栈,但反之则不允许。
3查表指令(XLAT)的操作数是- -种特殊的基址变址寻址方式,
基址寄存器为BX,变址寄存器为AL。

二:算数运算指令(二进制)

1加法

image.png

说明:

1:两操作数不能同时为存储器操作数;
操作数可以是字节或字,且两操作数的类型明确并一致。
2:?代表受影响; U代表不确定;代表不受影响

例如:

MOV AX, 4652H; (AX) =4652H
ADD AX,0F0F0H ; (AX) =3742H, CF=1 .
MOV DX, 0234H; (DX) =0234H
ADC DX,0F0F0H ; (DX) =0F325H, CF=0(加上进位CF)

2减法

image.png

说明:

  • SBB(borrow):用于大于1 6位的多精度数的减法。
  • DEC(decrease):用于计数和修改地址指针,不影响进位标志CF。
    - NEG(negative):用于求操作数的负数,即:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。NEG对标志位影响有特殊规定,如果被取补的操作数非0,NEG操作后,CF置1,否则CF= 0。(0-dest只要dest不为零必然产生进位)

例如

MOV AX,0FF64H
NEG AL ; (AX) =0FF9CH
SUB AL,9DH;(AX) =OFFH
NEG AX; (AX) =0001 H
DEC AL; (AX) =0000H
NEG AX; (AX) =0000H

CMP OPD,OPS

CMP:目的操作数减去源操作数,结果只影响标志位,不送入目的地址。

若两无符号数比较时:
当ZF = 0时,则OPD= OPS;
否则:当CF = 0时,则OPD> OPS;

当CF= 1时,则OPD< OPS。

若两有符号数比较时:
当ZF = 0时,则OPD= OPS;
否则:当OF= SF时,则OPD> OPS;

当OF≠SF时,则OPD < OPS。
CMP指令后面常跟着条件转移指令,根据比较结果产生不同的分支。

3乘法

image.png

说明:

  • 乘法指令格式中只出现源操作数,根据这个操作数的类型(字节类型或字类型)决定是8位乘还是1 6位乘。
  • src不能是立即数,目的操作数(被乘数)隐含约定为累加器AL (8位乘)或AX (16位乘),运算的结果约定在AX中(8位乘法的积)或DX:AX中(1 6位乘法的积)。
  • MUL:若(结果中)AH或DX不等于零则必定产生进位与溢出即:CF=OF=1;
  • IMUL:若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则为一。

例如:

MOV AL,0A3H; (AL) =0A3H
MOV BL,11H; (BL) =11H
MUL BL;(AX) =0AD3H

4除法

image.png

image.png

说明:

除法指令q P的操作数src为除数,它不能是立即数。
注意:
1)除法指令对标志位的影响无意义
2)除数必须足够大,使得商值小于等于8位或1 6位数表示的
范围;否则,将产生除法错误。

符号位扩展(CBW、CWD):

若除数8位,则被除数应为16;若除数16位,则被除数应为32位。若被除数位数不够,则在除法前,应将被除数扩展到所需要的位数。
对于带符号数,这种扩展应该保持被扩展数的值(包括符号位)不变,因此应该是带符号位的扩展。
例如,0111 0000B应扩展成0000 0000 0111 0000B,
1111 0000B应扩展成1111 1111 111 1 0000B。(源码-1取反加上8个0再按位取反+1大小不变)

[例]将字节数据扩展成字数据。

MOV AL,0A5H; (AL)=0A5H———>转为二进制0000 1010 0101最高符号位为1为负数
CBW ; (AX)=0FFA5H——>扩展符号位
ADD AL ,70H; (AL)=25H——>转为二进制0111 0000最高位符号位为零为正数
CBW; (AX)=0025H

[例]将字数据扩展成双字数据。

MOV DX,0;(DX) =0
MOV AX,0FFABH ; (AX)=OFFABH——>二进制1111 1111 1010 1011最高位符号位为1是负数,符号位扩展1
CWD;(DX) =0FFFFH;(AX) =0FFABH

三:位操作指令

1逻辑运算指令

image.png

说明:

  1. NOT指令不影响标志。
    2)其他逻辑指令:使OF=CF= 0,并影响ZF、SF和PF。
  2. TEST相当于AND运算,但是不保存结果,仅影响标志。主要
    用于测试一个操作数(目的操作数)某- -位或几位的状态。
    4)逻辑指令主要用于字节或字中某些位的组合、分离或位设置等。

AND

格式: AND dst, src
功能:将目的操作数与源操作数按位相与,结果送目的操作数。
AND指令常用于:
(a)使一个操作数中的若干位保持不变,而若干位清为0的场合。
(b)某一操作数,自己和自己相“与”,操作数不变,但可以使进位标志CF清0
例] 将AL中第3位和第7位清零。
AND AL, 77H——>77H=0111 0111B

OR

格式: OR det, src
功能:将目的操作数与源操作数按位相或,结果送目的操作数。
OR指令常用于:
(a)若干位保持不变,而若干位置1的场合。保持不变的位与“0”
相或;置1的位与“1"相或。
(b)某一操作数,自己和自己相“或”,操作数不变,但可以
使进位标志CF清0。
[例]将AL寄存器中第3位和第7位置1。
OR AL, 88H——>88H=1000 1000

XOR

格式: XOR OPD, OPS
功能:将目的操作数与源操作数按位置异或,结果送目的操作数。
说明:
XOR指令常用于:
(a)若千位保持不变,而另外若干位取反的场合。
保持不变的与 "O”相异或;取反的与“1”相异或。
(b)使某一-操作数清0。如: XOR AX, AX ;AX清0。
(c)测试某一操作数是否与另一确定的操作数相等。

TEST

格式: TEST OPD, OPS
功能:目的操作数与源操作数按位相与,结果反映在标志位上,但不送回目的操作数。
即: (OPD) ^ (OPS)。
说明:
①完成与操作,但不改变目的操作数的值。
②常用于不改变原操作数的情况下,检测某几位的条件是否满足。编程时常与条件转移指令一起使用。

[例]测试AX中的第12位是

TEST AX,1000H
否为0,不为0则转L。
JNE L

NOT

格式: NOT OPD
功能:将目的操作数各位取反,结果送目的操作数。
即: OPD←(OPD)。
说明:若将整个操作数取反:则应使用NOT指令,若只需将操作数的一部分
位取反 :则应使用XOR指令

例如:逻辑非运算

MOV AX,878AH;(AX) =878AH
NOT AX; (AX) :7875H

总结

①屏蔽若干位。(常用指令)
AND AL, 01H ; 屏蔽AL的D7~D1,保留D0
AND AL, OFH;屏蔽AL高4位,保留低4位
②使若干位置1 (常用指令)
OR BL, 0FOH ; 使BL高4位置1,低4位不变
③清除CF、OF或设置标志
AND AL,AL (AND AL,OFFH; OR BL,BL; ..
......;类似指令没有改变目的操作数,但使CF=OF=0,也可能纯粹以设置其他
标志(ZF)为目的。
④求反
NOT AL / NOT WORD PTR[BX+ DI]
⑤对指定位求反
XOR AL,0FH ; AL高4位不变,低4位求反
XOR CL, 55H ; CL偶数位求反,奇数位不变
⑥清除寄存器及CF (常用指令)
XOR AX,AX / XOR BX,BX
⑦不改变操作数,测试操作数或操作数的指定位
TEST AL, 0FFH ;由ZF标志判断AL是否为零;
也可以用CMP指令。
TEST AL, 01;由乙F标志判断AL的D0是否为零
; ZF=1,则AL D0=0;
ZF=0,则AL D0=1
AND AL,01
;也可完成.上述功能,但是改变了目
;的操作数

四.移位指令

image.png

1逻辑左移SHL

[指令格式] SHL d1, d2
功能:把操作数d1的各个二进制位依次向左移动d2位,移动造成右边的空位填0,结果放回操作d1中。
[说明]
(1)操作数d1必须是通用寄存器或内存型寻址方式,必须有确定的类型,可以是字节型,也可以是字型,并且对内存型寻址方式可以使用段跨越。
(2)操作数d2表示移动的位数,只能是立即数1或者寄存器CL,当移动位数超过1位时,必须把移动位数放在CL中,以CL作为d,操作数。
(3)操作数d1各位移动从最高位起,将有d2位移到操作数d1之外,除了最后移出的一位放到标志位CF中之外,其余各位均被丢弃,移动造成右边的空位用0填充。
(4)该指令对具余标志位的影呵情况是:移动后的结果为0则ZF置1,否则ZF清0;移动后d1,最高位的值会复制到SF上;如果移动前后d1的最高位不同则OF置1,否则OF清0。

例如

AX=8D56H,CL=3
SHL AL,1;AL= 0ACH,CF= 0,AH不变
SHL AX,1;AX = 1AACH,CF= 1
SHL AH,CL;AH= 68H, CF=0,AL不变
SHL AX,CL;AX=6AD0H,CF=0

2算术左移

[指令格式] SAL d1,d2
[说明]这是一条与SHL完全相同的指令,该指令与SHL指令是同一条机器指令的两种不同写法。

3逻辑右移

[指令格式] SHR d,d,
[功能] 把操作数d1的各 个二进制位依次向右移动d2 位,
移动造成左边的空位填0,结果放回操作数d中。
(1)向右移出的最后一位放到CF中,右移造成左边的空位以0填充。

4算术右移

[指令格式] SAR d1,d2
[功能]把操作数d1的各个二进制位依次向右移动d2位,移动造成左边的空位填的原值的最高位,结果放回操作d1中。
[说明] SAR指令的功能基本上与SHR的一样,
仅仅是移动造成的空位填充方式不同,如果操作数d1移动前最高位是1,则移动造成的空位以1填充,否则以0填充
SAR指令执行的结果是把d1中的原值作为带符号数,除以并把除法的商放回d1中。

5循环左移

[指令格式] ROL d1,d2
[功能]把操作数d的各个二进制位向左移动d2位,
从d1左端移出的每一位再依次移到右端空出的位上,最后移出的一位还要送到CF中。可以把d1的各位看作是首尾相接的一个环状,如图7.4所示,把各位的值按逆时针方向旋转d2格,再从环原先的连接部断开,可以得到ROL指令执行后的结果。


image.png

6循环右移

与循环左移相似只是移动方向相反

7带进位的循环左移

[指令格式] RCL d1,d2
[功能]把操作数d1的各位与CF联合在一起,构成9个或者
17个二进制位,向左移动d2位,从左端移出的各位再依次移
到右端空出的位上。从功能上说,可以把d1的各位与CF一起,看作首尾相接
的一个环状,如图7.5所示,把各位按逆时针方向旋转d2格,再从环原先的连接部断开,可以得到ROL指令执行后的结果,包括CF的设置情况。


image.png

8带进位的循环右移

与带进位的循环左移相似只是移动方向相反

说明

逻辑移位与算术移位指令除了功能本身描述的二进制位的移动之外,还用于把一个字节型或字型数据乘以/除以2的n次。乘除法指令是所有8088指令中最耗时的,所花费的时间是加减法的20~ 30倍,是移位指令的35~50倍,因此如果能用移位指令和加减法指令代替乘除法指令,将大大提高程序的执行速度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • 计算机通过执行指令序列来使机器得以工作,所以对于每一系列的计算机都有指定的一组指令集供计算机使用,这组指令...
    未来科技工作室阅读 7,959评论 1 10
  • 1.地址总线,数据总线,控制总线在哪里,它们有什么作用?答:它们都是cpu连接外部组件的线路。地址总线:地址总线A...
    MagicalGuy阅读 1,439评论 0 1
  • 这学期有了汇编课,但个人感觉这部分难度还是有一些的,所以写了这篇简书当做自己对于知识的复习,同时也是希望能够再次加...
    kl_w阅读 6,619评论 0 7
  • 指令是使计算机执行某种特定操作的二进制编码。8086 CPU指令系统有133条指令,通常分为数据寻址方式和程序寻址...
    刀月水阅读 1,626评论 0 1
  • 10点起床,工作 天冷了,手指不听使唤了 下午发生了一件很大的事情,得去广州处理一下 晚上和爸妈一起聊天 晚上12...
    书恒被从名了阅读 197评论 0 0