微机原理第四周笔记

4.2.2 指令寻址方式

  1. 段内直接寻址
    • 直接寻址:直接指明目标地址
    • 段间寻址:只改变IP寄存器的值而不改变CS寄存器的值
指令名 SHORT 目标地址号
指令名   转移目标地址标号
指令名   NEAR  PTR 转移目标地址标号
  1. 段间直接寻址
    • 直接寻址:指令中直接指明目标地址
    • 段间寻址:不仅改变IP寄存器的值而且改变CS寄存器的值,因此又叫段间寻址。
指令名    FAR  PTR  转移地址标号
指令名    段地址:段偏移地址
  1. 段内间接寻址
    • 间接寻址:转移的目标地址放在寄存器或存储器中
    • 段内寻址:这种指令只改变IP寄存器的值而不改变CS寄存器的值
指令名   16位寄存器名
指令名   WORD  PTR 存储器寻址方式
  1. 段间间接寻址
    • 间接寻址:转移的目标地址放在存储器中
    • 段间寻址:这种指令不仅改变IP寄存器的值而且改变CS寄存器的值
指令名   DWORD  PTR 存储器寻址方式

4.3 8086指令系统

拥有133条基本指令,按功能分成六类:
(1)数据传送指令
(2)算术运算指令
(3)逻辑运算指令
(4)串操作指令
(5)控制转移指令
(6)处理器控制指令

4.3.1 数据传送指令

4.3.2 算术运算指令

  1. 加法与减法指令
    (1)ADD DST, SRC
    源操作数:通用寄存器、存储器、立即数
    目的操作数:通用寄存器、存储器
    执行的操作:DST←DST + SRC
    (2) ADC DST, SRC
    源操作数:通用寄存器、存储器、立即数
    目的操作数:通用寄存器、存储器
    执行的操作:DST←DST + SRC + C
    (3) INC OPRD
    操作数:通用寄存器、存储器 (不能是段寄存器或立即数)
    执行的操作:OPRD←OPRD + 1
    (4) 减法指令
    SUB DST, SRC
    源操作数:通用寄存器、存储器、立即数
    目的操作数:通用寄存器、存储器
    执行的操作:DST←DST – SRC
    (5) SBB DST, SRC
    源操作数:通用寄存器、存储器、立即数
    目的操作数:通用寄存器、存储器
    执行的操作:DST←DST - SRC –C
    (6) DEC OPRD
    操作数:通用寄存器、存储器 (不能是段寄存器或立即数)
    执行的操作:OPRD←OPRD - 1
    功能: 用于在循环中修改地址指针及循环次数等。
    (7) NEG OPRD
    操作数:通用寄存器、存储器
    执行的操作:求补指令,将操作数按位取反后加1,再送回操作数。
    (8) CMP DST, SRC
    源操作数:通用寄存器、存储器、立即数
    目的操作数:通用寄存器、存储器
    执行的操作: DST – SRC
  2. 乘法指令与除法指令
    (1) MUL SRC —— 无符号数乘法
    源操作数:通用寄存器、存储器(不能是立即数)
    目的操作数:DX, AX (隐含)
    执行的操作:字节操作 (AH,AL)←(AL)(SRC)
    字操作 (DX,AX)←(A X )
    (SRC)
    IMUL SRC —— 带符号数乘法
    源操作数:通用寄存器、存储器(不能是立即数)
    目的操作数:DX, AX (隐含)
    执行的操作:字节操作 (AH,AL)←(AL)(SRC)
    字操作 (DX,AX)←(AX)
    (SRC)
    (2) 除法指令
    无符号数除法指令: DIV SRC
    带符号数除法指令: IDIV SRC
    执行操作: 字节操作 (AL) ←(AX) / (SRC)的商
    (AH) ←(AX) / (SRC)的余数
    字操作 (AX) ←(DX,AX) / (SRC)的商
    (DX) ←(DX,AX) / (SRC)的余数
  3. 符号扩展指令
    字节扩展成字指令 CBW
    格式:CBW ;
    功能:将 AL 中的符号位扩展到 AH 中, AX 为一个带符号的16为数。
    字扩展成双字指令CWD
    格式:CWD ;
    功能:将 AX 中的有符号数的符号位扩展到 DX 中, DX,AX 中的数成为一个带符号双字。
  4. 十进制算术运算指令(BCD 码调整指令)
    压缩BCD码调整指令
    ① 压缩BCD 码加法调整指令(不影响OF的状态)
    ② 压缩 BCD 码减法调整指令(不影响OF的状态)
    非压缩BCD码调整指令
    ① 非压缩BCD码加法调整指令(只影响AF和CF的状态)
    ②非压缩BCD码减法调整指令(只影响AF 和 CF )
    ③非压缩BCD 码乘法调整指令(影响 SF,ZF,PF)
    ④非压缩 BCD 码除法调整指令(影响 SF,ZF,PF)

4.3.3 逻辑运算指令:

① 逻辑非: NOT dst ; dst-> dst
② 逻辑与: AND dst,src; dst∧src-> dst
③ 逻辑或: OR dst,src; dst∨src ->dst
④ 逻辑异或: XOR dst,src; dst⊕src-> dst
⑤ 测试指令:TEST dst,src; dst∧src 只影响标志

4.3.4 移位指令

  1. 非循环移位指令:
    (1)算术左移: SAL dst, CNT;
    (2)逻辑左移: SHL dst, CNT;
    (3)算术右移: SAR dst, CNT;
    (4)逻辑右移: SHR dst, CNT;
  2. 循环移位指令:
    (1)循环左移: ROL dst, CNT;
    (2)循环右移: ROR dst, CNT;
    (3)带CF循环左移:RCL dst, CNT;
    (4)带CF循环右移:RCR dst, CNT;

4.3.5 串操作指令:

1.基本串操作指令 (1) 串传送指令: 不影响FR src:MEM; dst:MEM
① 字节串传送指令:
格式: MOVSB ; DS×16+SI] B->ES×16+DI]
自动修改指针 : SI±1 ->SI DI±1->DI
② 字串传送指令:
格式: MOVSW ; [DS×16+SI]- W> [ES×16+DI]
自动修改指针 : SI±2 ->SI DI±2-> DI
(2) 串比较指令: 影响FR
① 字节串比较指令:
格式: CMPSB ; [DS×16+SI]-[ES×16+DI]
自动修改指针 : SI±1-> SI DI±1-> DI
② 字串比较指令:
格式: CMPSW ; [DS×16+SI]-[ES×16+DI]
自动修改指针 : SI±2 ->SI DI±2-> DI
(3) 串扫描指令: 影响 FR src:AL/AX ; dst:MEM
① 字节串扫描:
格式: SCASB ; AL-[ES×16+DI]且 DI ± 1 ->DI
② 字串扫描:
格式: SCASW; AX-[ES×16+DI]且 DI ±2 ->DI
(4) 串装入指令: 不影响 FR src:MEM ; dst:AL/AX
① 字节装入
格式: LODSB ; [DS×16+SI]-> AL 且 SI±1-> SI
② 字串装入:
格式: LODSW; [DS×16+SI]->AX 且 DI±2 ->DI
(5) 串贮存指令: 不影响 FR src:AL/AX ; dst:MEM
① 字节存储:
格式: STOSB; AL->[ES×16+DI]且 DI ± 1-> DI
② 字串存储:
格式: STOSW; AX->[ES×16+DI]且 DI ±2-> DI

  1. 串操作重复前缀指令
    (1) 无条件重复前缀: 用在MOVS,STOS,LODS指令前
    格式:REP
    功能:对跟在REP后面的串操作指令重复执行
    CX ≠ 0 时,重复执行串操作。每执行一次串操作,CX-1-> CX, 当 CX=0时,停止执行串操作,转向执行下一条指令; 用于存储器中数据块的搬家。
    (2) 相等重复前缀: 用在CMPS,SCAS指令前
    格式:REPE
    功能:对跟在REPE后面的串操作指令重复执行
    条件为:CX ≠ 0 且 ZF =1。
    每执行一次串的比较或扫描的操作,CX-1-> CX,当满足上述条件, 重复执行串操作 。当 ZF = 0 或 CX = 0 时,停止串操作的执行 。
    ③不相等重复前缀:
    用在CMPS,SCAS指令前
    格式:REPNE (或REPNZ)
    功能:对跟在REPNZ后的串操作指令重复执行
    条件为:CX ≠ 0 且 ZF = 0。
    每执行一次串的比较或扫描的操作,CX-1-> CX,当满足上述条件, 重复执行串操作。直至 CX = 0 或 ZF =1 时,停止串操作的执行。
    用于比较两个串中的元素都不相等或在串中扫描某个元素。
    (5)控制转移指令:
    (1) 无条件转移指令JMP
    ① 段内直接短转移:(相对转移)
    格式:JMP short target; short: 属性操作符,“短”
    功能:把当前的IP 值与 target代表的8位偏移量之和送入(IP), 即:(IP+target) ->IP; CPU从 IP新指出的地址开始取指令并执行,程序的运行发生转移。
    ② 段内直接近转移:(相对转移)
    格式:JMP NEAR PTR target;
    功能:(IP+target) IP;使程序的运行发生转移,以本指令为中心在: -32768 ~ +32767字节范围内转移,可转到段内任一地址。
    ③ 段内间接转移
    格式:JMP REG / MEM ; 通过REG/MEM间接给出转移的目标地址。
    功能:(REG / MEM)->IP;即将寄存器中的值或存贮器中的一个字送到 IP中, 使程序的运行发生转移。
    ④ 段间直接转移:
    格式:JMP FAR PTR target ; target:符号地址或32位的立即数构成
    功能:将符号地址的前面一个字送 IP,后一个字送 CS;这样同时 修改了CS和 IP中的值,程序的执行跳转到另一代码段开始执行。
    ⑤ 段间间接转移
    格式:JMP DWORD PTR[MEM]; [MEM]:操作数的寻址方式
    功能:由指令中的存储器操作数寻址方式提供 MEM 的有效地址EA,此EA指定的双字中, 第一个字送 IP,第二个字送 CS,从而得到转移的目标地址; CPU从另一代码段取指并开始执行。
    (2) 条件转移指令
    I. 单个标志位的条件转移指令:
    ① 测试ZF: JZ / JE target ; ZF= 1 结果为零(两数比较相等),则转移 JNZ / JNE target ; ZF= 0 结果不为零(比较不相等),则转移
    ② 测试CF: JC target ; CF= 1 结果有进位/借位,则转移 JNC target ; CF= 0 结果无进位/借位,则转移
    ③ 测试SF: JS target ; SF= 1 结果为负时,则转移 JNS target ; SF= 0 结果为正时,则转移
    ④ 测试OF: JO target ; OF= 1 结果有溢出,则转移 JNO target ; OF= 0 结果无溢出,则转移
    ⑤ 测试PF: JP target ; PF= 1 结果中1的个数为偶数,则转移 JNP target ; PF= 0 结果中1的个数为奇数,则转移
    II. 两个无符号数比较转移指令:一般跟在CMP指令后
    ①格式: JA / JNBE target ;dst > src 则转移;
    ②格式: JAE / JNB target ;dst ≥ src则转移;
    ③格式: JB / JNAE target ;dst < src则转移;
    ④格式: JBE / JNA target ;dst ≤ src则转移;
    III. 两个有符号数比较转移指令:也应紧跟在CMP指令后
    ①格式: JG / JNLE target ;dst > src 则转移;
    ②格式: JGE / JNL target ;dst ≥ src则转移;
    ③格式: JL / JNGE target ;dst < RC 则转移;
    ④格式: JLE / JNG target ;dst ≤ src则转移
    IV. 测试CX:
    格式: JCXZ target ;CX=0,则转移
    (3) 循环控制指令
    ① 计数循环指令:
    格式:LOOP disp8 ; CX ≠ 0,(IP + disp8)-> IP
    功能:CX 为循环次数计数器,循环次数置入CX中, 每执行一次 LOOP 指令,CX-1 ->CX, 如果 CX ≠ 0,则 IP+disp8 ->IP,即发生转移; 如果 CX = 0,顺序执行。
    ②结果为零或相等时循环指令: 一般用在CMP指令后
    格式:LOOPZ disp8 ; CX≠0 且 ZF=1时,(IP+disp8)->IP
    LOOPE disp8
    功能:每执行一次该指令,CX-1-> CX,判 CX≠0 且 ZF=1时, 则产生转移,即:(IP+disp8)->IP
    ③结果不为零或不相等时循环指令:一般用在CMP指令
    格式:LOOPNZ disp8;CX≠0 且 ZF=0时,(IP+disp8)->IP
    LOOPNE disp8
    功能:每执行一次该指令,CX-1 ->CX,判 CX≠0 且 ZF=0 时, 则产生转移,即:(IP+disp8)->IP
  2. 子程序调用和返回
    (1) 段内直接调用:(相对调用)
    格式:CALL disp16;16位相对偏移地址disp16
    功能:① IP ->堆栈;即将IP的内容压栈,保存返回地址,即断点。 其内容为CALL指令下一条指令的有效地址EA。
    ② IP+disp16 ->IP;将指令中的disp16和IP相加后送 IP, 使程序的执行发生转移。
    ③ disp16可以使用标号地址。(过程名)
    (2) 段内间接调用:(绝对调用)
    格式:CALL REG / MEM
    功能:① IP->堆栈;即将IP的内容压栈,保存返回地址,即断点。
    ② (EA) ->IP; EA是由REG / MEM操作数指出的子程序在 本代码段内的有效地址。从而使程序的运行发生转移。
    ③ EA由寄存器或存贮器提供。
    (3) 段间直接调用:(子程序不在当前代码段)
    格式:CALL addr32 ; (addr32:或远过程名)
    功能:① CS->堆栈;IP->堆栈;保存返回地址,即断点。
    ② addr32:32位地址中第一个字->IP;第二个字->CS; 程序的运行转移到另一个代码段中,开始执行子程序。
    (4) 段间间接调用:(子程序不在当前代码)
    格式:CALL MEM ;
    功能:① CS->堆栈;IP->堆栈;保存返回地址,即断点。
    ②指令提供了四个字节(双字)MEM 操作数的寻址方式
    ③存贮器中的第一个字->IP;第二个字->CS;程序运行发生转移。
    (5) 子程序返回指令:(该指令写在子程序最后)
    格式:RET/RETF ;将栈顶原保护的断点出栈
    功能:① 段内返回:(SP)->IP ;SP+2 ->SP :修改栈指针
    ②段间返回:(SP)->IP ;SP+2-> SP :修改栈指针 (SP)->CS ; SP+2 ->SP :修改栈指针
  3. 中断和中断返回指令
    (1) 软中断指令:
    格式:INT n ; n 为中断类型号,八位二进制数0-255。
    功能:①置 IF = 0;关闭中断,不允许外部中断的干扰;
    ② FR->栈区;保护现场,即中断服务前FR的状态;
    ③ CS->栈区; IP->栈区;保护断点:即返回地址;
    ④ 0 ->CS;[CS×16+n×4]->IP;修改IP指针 [CS×16+n×4+2]->CS;修改段基地址
    ⑤ CPU 转去执行相应的中断服务服务程序。
    (2) 中断返回指令:(该指令写在中断服务程序结尾处)
    格式:IRET ;其作用类似子程序返回指令
    功能:①(SP)->IP,SP+2-> SP;弹出断点:即返回地址
    (SP)->CS,SP+2-> SP;
    (SP)->FR,SP+2-> SP;恢复现场
    ② 置 IF = 1;开放中断允许。
    ③由于出栈修改了 IP 和 CS,即恢复断点的地址,使CPU返回 原断点处,继续执行主程序。
    (6)处理器控制指令:
  4. 标志位设置指令:
    ① 格式:CLC ;功能:使 CF=0,即进位标志清零。
    ② 格式:STC ;功能:使 CF=1,即进位标志置1。
    ③ 格式:CMC ;功能:使 CF-> CF,即进位标志取反。
    ④ 格式:CLD ;功能:使 DF=0;即方向标志位清零。
    ⑤ 格式:STD ;功能:使 DF=1;即方向标志位置1。
    ⑥格式:CLI ;功能:使 IF=0;中断标志清零(关中断)
    ⑦格式:STI ;功能:使 IF=1;中断标志置1(开中断)
  5. 同步指令
    ① 处理器交权指令ESC
    格式:ESC ext-op , mem
    功能:使外部处理器能从8086指令流中取得它们的操作指令,同时 指示8086CPU取出内存操作数,放到数据总线上,一供使用。
    ② 等待指令WAIT
    格式:WAIT
    功能:该指令与ESC指令配合使用,在WAIT指令期间,CPU测试 TEST 引脚状态;当TEST有效时,退出等待状态执行后续指令, 否则继续等待。TEST 信号由协处理器发出。
    ③ 总线封锁前缀指令LOCK:是一个前缀,应放在其它操作指令前
    格式:LOCK ;
    功能:封锁总线。在执行指令期间,不允许其它设备对总线进行访问
    ④ 暂时指令HLT
    格式:HLT
    功能: CPU处理暂停状态,等待外设的中断请求。
    ⑤ 空操作指令NOP
    格式:NOP
    功能:不产生任何结果,用于延时3个T周期
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353