Microsoft PowerPoint - 微原-第3章3.ppt [兼容模式]

Similar documents
Microsoft PowerPoint - Ch3-8086CPUæ„⁄令系ç»�(3)-æŁ°æ“®ä¼€é•†æ„⁄令

数据库系统概论

幻灯片 1

微机第02章1(指令寻址)

指令系统 可分成如下 6 类 : 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令 2015 年 3 月 26 日星期四 8 时 41 分 27 秒 2

Microsoft PowerPoint - 微原-第3章2.ppt [兼容模式]

数据库系统概论

untitled

Microsoft PowerPoint - Ch3-8086CPU指令系统(2)-寻址.pptx

Microsoft PowerPoint - 05-第五讲-寻址方式.pptx

主要内容 指令系统的一般概念 指令操作方式操作码的含义指令对操作数的要求指令执行的结果 寻址方式 指令说明 2015 年 3 月 16 日星期一 8 时 2 分 37 秒 2

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

Microsoft PowerPoint - CH2_1.ppt [兼容模式]

Microsoft PowerPoint - CH2_1.ppt [兼容模式]

幻灯片 1

D/A DAC ( 1us) (10~20 ) DAC0832 1

数据库系统概论

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

第4章 80X86指令系统

<4D F736F F F696E74202D D D6B8C1EECFB5CDB DC6E4CBFBD6B8C1EE2E BBCE6C8DDC4A3CABD5D>

(Microsoft Word - \246D\252k\267\247\255n_\275\306\277\357_.docx)

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt

(2) Function 0BH: Function 0CH: (pixel, picture element) Function 0DH: Function 0FH: Function 13H:

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ]

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

浙江省2004年1月高等教育自学考试

66 微型计算机原理与接口技术 ( 第二版 ) 2. 指令格式计算机中的汇编指令由操作码字段和操作数字段两部分组成 (1) 操作码字段 操作码表示计算机要执行的某种指令功能, 由它来规定指令的操作类型, 说明计算机要执行的具体操作, 例如传送 运算 移位 跳转等操作 同时还指出操作数的类型 操作数的

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt

2006年国家公务员招录考试行测真题(A)

习 题 一

数据库系统概论

li 侉 2. 在 下 列 加 点 字 的 正 确 读 音 旁 打 : (1) 我 看 见 路 边 有 一 条 蛇 A.sh 佴 B.sh 佶 C.sh 侑 D.sh 侉 (2) 外 面 的 泥 土 冻 得 很 硬 A.y 侏 n 倮 B.y 侃 n 倮 C.y 佾 n 倮 D.y 佻 n 倮 (3

第5章:汇编语言程序设计

PowerPoint Presentation

1


微机第02章1(指令寻址)

第四章 8086汇编语言程序设计

CH559指令周期.doc

本次习题课中提到的 课本, 均指机械工业出版社的 Intel 微处理器 ( 原书第八版 ) 中文版, 使用其他版本课本的同学需要自己对应

共同构成 16 位数据存储单元的地址 当 CPL=1 时, 将堆栈指针 SP 的 16 位地址 与指令中的 7 位地址相加, 形成 16 位的数据存储器地址 (2) 当 SP=0100h, 偏移地址为 50h 时, 寻址 0150h 单元 ; 当 DP=2, 偏移地址为 50h 时, 寻址 0150

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode]

Microsoft PowerPoint - 第01章 基础知识.pptx


26 头 孢 他 啶 注 射 剂 27 头 孢 他 美 酯 口 服 常 释 剂 型 28 头 孢 吡 肟 注 射 剂 29 头 孢 硫 脒 注 射 剂 30 头 孢 唑 肟 注 射 剂 31 头 孢 替 安 注 射 剂 32 头 孢 哌 酮 注 射 剂 33 头 孢 哌 酮 舒 巴 坦 注 射 剂

Microsoft PowerPoint - C15_LECTURE_NOTE_06

Microsoft PowerPoint - C15_LECTURE_NOTE_06

提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, / 11

3.3.2 算术运算指令 数据类型 : 无符号和有符号整数 无符号数又分成 : 无符号二进制数 ; 无符号压缩十进制 :1 字节表示 2 个十进制数 ; 无符号非压缩十进制 :1 字节表示 1 个十进制数 有符号数 : 有符号二进制数 用补码表示 2015 年 3 月 26 日星期四 11 时 3

微机原理--汇编、连接和调试

. v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20

微机原理(计算机原理与接口技术)

DPJJX1.DOC

<4D F736F F D C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63>

第一次段考 二年級社會領域試題 郭玉華 (A)(B) (C)(D)

第十章 数模转换与模数转换接口及其应用

一、填空题

主要内容 : 汇编语言源程序的结构汇编语言语句格式伪指令语句功能调用汇编语言程序设计方法宏汇编和条件汇编 2015 年 3 月 30 日星期一 7 时 58 分 57 秒 2

B. (B) (C) C (D) (E). (Y) (M) (C) (T) (A) (B) (C) (D) (E) Y ( / ) M ( / ) C T ( / ) ( / ) LR=Y(m c) Ytd d 0 : LR=Y(m

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

4 / ( / / 5 / / ( / 6 ( / / / 3 ( 4 ( ( 2

本科生毕业设计(论文)打印格式的要求

<4D F736F F D C4EAB9FABCD2B9ABCEF1D4B1D0D0D5FEC4DCC1A6B2E2D1E9A3A841C0E0A3A92E646F63>

Microsoft Word - 作业2008.doc

中 公 金 融 人 简 介... 2 一 中 国 农 业 银 行 风 貌 介 绍... 3 二 中 国 农 业 银 行 秋 季 招 聘 政 策 解 读 三 2014 农 业 银 行 秋 季 校 园 招 聘 笔 试 备 考 策 略 中 公 金 融 人 精 品 课 程 介 绍..

C 语言第一章选择 ACACC ACBBA BAADA CBDBC CCCBD C 填空 a/(b*c) 8 28 第二章 选择 DBADB BABAD BA 第三章选择 BCDBB BACDA C 写结果

,,,,,,,,,,,,, :,, ;,,,,, ( ),,,, : ( ) ; ( ) ; ( ) ( ) ; ( ) ( A ) ; ( ) ( ),,,,,,, 80

Ps22Pdf

第4章

微机系统与接口--第2章 ppt

PowerPoint 演示文稿

7688使用手冊V10.doc


bingdian001.com

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

A. 城 市 化 是 我 国 发 展 的 必 由 之 路 B. 单 纯 发 展 大 城 市 不 利 于 城 市 化 的 推 进 C: 要 实 现 城 市 化, 就 必 须 让 城 市 充 分 吸 纳 农 村 人 口 D: 大 城 市 对 外 地 农 村 人 口 的 吸 引 力 明 显 低 于 中 小



Microsoft PowerPoint - os_4.ppt

鲜 榴 莲 仅 限 网 购 保 鲜 蕃 荔 枝 仅 限 网 购 保 其 他 鲜 果 仅 限 网 购 保 其 他 未 磨 的 肉 桂 及 肉 桂 花 已 磨 肉 桂 及 肉 桂 花

Microsoft PowerPoint - C15_LAB_MTS86_INTRO

第4章

Microsoft PowerPoint - CH3_3.ppt [只读] [兼容模式]

微型计算机原理

2011国家司法考试试题(试卷一)

一、单选题(本大题共15小题,每小题1分,共15分)

L15 MIPS Assembly

<4D F736F F F696E74202D DB5DAB0CBBDB22DBBE3B1E0D3EFD1D4B3CCD0F22E >

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

《微型计算机原理》

1 CPU

计算机组成原理 第二章 指令系统 中科大 11 系 李曦

<4D F736F F D20A4A4A6A1C4D1ADB9A55BA475A4FEAFC5A7DEB34EA468A7DEAFE0C0CBA977B34EACECB4FAB8D5B0D1A6D2B8EAAEC62DB2C4A447B3A1A4C E646F63>

本科生毕业设计(论文)打印格式的要求

(譯本)

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客

Microsoft Word - 新1-3.doc

Computer Architecture & Organization

微處理機期末專題

Are You suprised ?

Transcription:

本教案内容 第 3 章 8086CPU 指令系统 1. 汇编语言指令 9. 转移指令 10. 2. 8086 指令分类循环控制指令 11. 子程序调用返回 3. 数据与转移地址的指令寻址方式 12. 中断调用返回指 4. 数据传送类指令令 5. 算术运算类指令 13. 字符串操作指令 6. 逻辑运算类指令 14. I/O 输入输出指令 7. 移位类指令 15. 其它指令 8. 标志位操作指令 16. 宏指令

3 4 数据传送类指令 这些指令可以分成七个子类 : LEA MOV 获取有效地址指令通用传送类指令 SAHF LAHF LES LDS LEA 标志传送指令, 获取地址指针指令获取有效地址指令传送类指令 XLAT XCHG SAHF LAHF 字节转换指令数据交换指令, 标志传送指令传送类指令 POPF PUSHF POP PUSH XLAT,,, 堆栈操作指令字节转换指令

数据传送类指令可以完成数据在寄存器 存储单元存储单元之间的传递 这一类的指令的共同点有 : 1 除指令 SAHF POPF 之外, 其它指令不影响 PSW ( 微处理器状态字 ) 中的各标志位 ; 2 当指令中有两个操作数时, 第一个操作数为目的操作数, 第二个为源操作数 ; 3 目的操作数的寻址方式一定不能为立即数和段寄存器 CS

1. 通用传送指令 (MOV) 格式 : MOV DST, SRC ;(DST) (SRC) 说明 : 将 SRC( 源操作数 ) 中的一个字节或一个字传送到 DST( 目的操作数 ) 所指定的位置 MOV 指令可以在立即数 存储单元 寄存器和段寄存器之间传送数据, 其传送路径如图 3.33 所示

立即数 存储单元 寄存器 AX AX BX BX CX CX DX DX SI SI DI DI SP SP BP BP 段寄存器 DS,ES,SS SS CS

1 立即数 通用寄存器或存储单元 例 1: MOV AX,1234H ; 将 1234H 传送到 AX 中 AX???? 1234 1234H

1 立即数 通用寄存器或存储单元 例 2: MOV var1,1234h 1234H ; 将 1234H 传送到变量 var1 中 DS:var1 34H???? 12H 1234H

2 通用寄存器 存储单元 例 3: MOV var1,dx ; 将 DX 的内容传送到变量 var1 中 DS:var1 AAH???? 55H DX 55AAH

3 存储单元 通用寄存器 例 4: MOV DX,var2 ; 将变量 var2 的内容传送到 DX 中 DS:var2 34H???? 12H DX 1234H

4 通用寄存器 通用寄存器 例 5 MOV AX,BX ; 将 BX 的内容传送到 AX 中 AX 78AD???? BX 78AD

5 通用寄存器 段寄存器 例 6 MOV DS,AX MOV BX,ES DS???? AX 1234 1234 BX AA55???? ES AA55

5 通用寄存器 段寄存器 例 7 MOV DX,CS DX 1234???? CS 1234

6 段寄存器 存储单元 例 8 MOV DS,var1 DS 1234???? 34 DS:var1 12

6 段寄存器 存储单元 例 9 MOV var2,es DS:var2 AAH?? 55H?? ES 55AA

6 段寄存器 存储单元 例 10 MOV var2,cs DS:var2 AAH?? 55H?? CS 55AA

从图 3.3 中, 还应该特别注意 MOV 指令不能直达的路径 : 立即数 段寄存器 存储单元 存储单元 段寄存器 段寄存器

如果要完成数据在这些路径上的传送, 则应该分两步操作 1 立即数 段寄存器一般可以通过立即数 通用寄存器 段寄存器来完成, 例如 : MOV AX,3A01H MOV DS,AX ;(DS) 3A01H

2 存储单元 存储单元一般可以通过存储单元 通用寄存器 存储单元来完成, 例如 : MOV AX,VAR1 MOV [DI+10],AX ;((DI)+10) VAR1

3 段寄存器 段寄存器一般可以通过段寄存器 通用寄存器 段寄存器来完成, 例如 : MOV AX,CS MOV DS,AX ;(DS) (CS) 应该注意 :CS 不能作为目的寄存器

例如, 下面指令书写是正确的 MOV AX,BX ; 将 BX 中的一个字传送到 AX 中 MOV AL,DL ; 将 DL 中的一个字节传送到 AL 中 MOV AX,02 ; 将立即数 02 传送到 ;AX 中 MOV SI,[BX] ;(SI) ((BX))

MOV AL,4[DI] ; 将 (DI)+4 作为偏移地址, ; 将该单元内容送入 AL MOV AX,[BX+2] ; 将寄存器 BX 中的内容加 ;2 后的值作为偏移地址, ; 将该单元中的一个字节 ; 送入 AL 中, 下一单元中 ; 的一个字节送 AH 中

MOV [BX][DI],DX ;((BX)+(DI)) (DL) ;((BX)+(DI)+1) (DH)

当程序中采用伪指令定义了一组变量后, 那么, 传送指令也可以有下面的形式 :

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : DATA1 34H MOV AX, DATA1 12H ; AX (DATA1) 78H 56H 指令执行后,(AX)= 1234H AL AH

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV BX,1122H MOV DATA3,BX ; (DATA3) (BX) 指令执行后,(DATA3)= 1122H

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV DI,2 MOV AL,DATA2[DI] ;AL (DS:OFFSET DATA2+(DI)) 指令执行后,(AL)= 40H

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) DATA3 则传送指令可以有 : +1 MOV SI,2 +2 0BBH MOV DX,0AABBH MOV DATA3[SI],DX 0AAH (DS:OFFSET DATA3+(SI)) (DX) (DS:OFFSET DATA3+(SI))=0AABBH 指令执行后, DL DH

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV BP, 2 MOV AL, DATA2[BP] ;AL (DS : OFFSET DATA2+(BP)) 指令执行后,(AL)= 40H

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV CX, LENGTH DATA3 ;CX LENGTH DATA3 指令执行后,(CX)=10 (0AH)

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV BX, SIZE DATA3 ;(BX) SIZE DATA3 指令执行后,(BX)=20 (14H)

设在数据段 (DS 段 ) 有下面的变量定义 : DATA1 DW 1234H, 5678H DATA2 DB 20H, 30H, 40H DATA3 DW 10 DUP(?) 则传送指令可以有 : MOV SI, OFFSET DATA2 ;(SI) OFFSET DATA2 指令执行后,(SI)= 0004H

对于双操作数指令, 两个操作数的类型必须匹配 : 1. 两者都指定了类型, 则必须一致, 否则指令出错 ( 类型不一致 ); 2. 两者之一指定了类型, 一般指令无错 ; 3. 两者都无类型, 则指令出错 ( 类型不定 )

对于操作数的类型, 还应该注意 : 1. 立即数是无类型的 ; 2. 不含变量名的直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 基址变址且相对寻址的操作数也是无类型的的 ; 3. 利用 PTR 操作符可指定或暂时改变存储单元的类型

应该搞清楚什么样的操作数为立即数 从形式上看, 立即数有 : 由常数等组成的表达式 所有由属性操作符得到的标号或变量的属性

例如, 下面指令书写是错误的 (DATA1 为字变量 ) MOV 10H,AL ㄨ DST 不能为立即数寻址 MOV AL,CX ㄨ 类型不一致 MOV [BX][SI],78H ㄨ类型不明确

MOV DATA1,AH ㄨ 类型不一致 MOV [DI]+02H,DATA1 DATA1 ㄨ MOV CS,AX ㄨ ㄨ两单元之间不能直接传送数据 CS 不能做 DST MOV DS,0100H ㄨ当 DS 作 DST 时,SRC 不能为立即数

2. 取有效地址指令 (LEA) Load Effective Address 格式 :LEA REG, MEM 功能 : 指令的功能是将源操作数 MEM ( 存储单元 ) 的有效地址 ( 偏移地址 ) 传送到寄存器 REG 这是一条特殊指令, 它传送的不是操作数本身, 而是操作数的有效地址 注 :DST REG 为通用 REG, 一般用 BX BP SI DI

例如 : LEA DI, VAR1 ;(DI) VAR1 的偏移地址等效于 : MOV DI, OFFSET VAR1 LEA BX,VAR1+15 ;(BX) VAR1 的偏移地址 +15 等效于 : MOV BX, OFFSET VAR1+15

3. 取地址指针指令 (LDS,LES) Load Data/Extra Segment Register 格式 : LDS REG16,MEM ;(DS) (MEM+2), (REG16) (MEM) LES REG16,MEM ;(ES) (MEM+2), (MEM (REG16) (MEM)(MEM)

功能 : 取地址指针指令 LDS 可以将双字变量 MEM 内容中的高 16 位送入 DS, 低 16 位送入指定的 REG16 中 ; 而取地址指针指令 LES 可以将双字变量 MEM 内容中的高 16 位送入 ES, 低 16 位送入指定的 REG16 中

例如定义变量 : TABLE DB 10H, 20H, POINT1 DD 02001000H POINT2 DD TABLE 则可以有指令 LDS DI,POINT1 ;(DS) 0200H,(DI) 1000H LES SI,POINT2 ; (ES) TABLE 的段地址, ; (SI) TABLE 的偏移地址

4. 标志传送指令 (LAHF,SAHF) Load AH register from flags Store AH register in flags 格式 : LAHF ;(AH) PSW 寄存器的低 8 位 SAHF ;PSW 寄存器的低 8 位 (AH)

说明 : 指令 LAHF(Load AH register from flags) 可以将 PSW 寄存器中的低 8 位传送到寄存器 AH 中, 而指令 SAHF(Store AH register in flags) 可以将 AH 中的内容传送到 PSW 寄存器中的低 8 位中 源操作数和目的操作数的寻址方式均为隐含寻址方式

5. 数据交换指令 (XCHG) 格式 :XCHG DST, SRC ;DST SRC 功能 : 该指令是完成寄存器与寄存器或寄存器与存储单元之间内容交换的 该指令要求两个操作数之一必须是寄存器, 允许两个操作数都是寄存器, 但不允许是段寄存器 注 : 段 REG 和立即数不能参加交换

例 1 合法指令有 : XCHG AX, BX ;(AX) (BX) XCHG CX, [DI] ;(CX) ((DI)) XCHG DX, VAR1 ;(DX) (VAR1)

例 2. 下面指令书写格式是错误的 XCHG AX,1234H ㄨ立即数不能参加交换 XCHG BX,ES ㄨ ES 段寄存不能参加交换 XCHG AL,CX ㄨ ㄨ类型不一致 XCHG DAT1,DAT2 DAT2 ㄨ两存储器单元不能直接交换

例 3. 若 (CX)=9A8BH, 试将 CX 的高 8 位与低 8 位互相交换 XCHG CH, CL 指令执行后,(CX)= 8B9AH

6. 字节交换指令 (XLAT) Translate byte 格式 :XLAT ;(AL) ((BX)+(AL)) 功能 : 该指令的寻址方式是隐含的, 其有效地址 EA=(BX)+(AL) 指令的功能是将 EA 为偏移地址所对应的内存单元中的一个字节的内容送入 AL

指令 XLAT 非常适合于两个代码之间的转换指令 XLAT 非常适合于两个代码之间的转换例如现要将 Code1 转换成 Code2

分三步完成从 Code1 转换成 Code2: 1. 在 TABLE 变量中按 Code1 的顺序存储 Code2 的内容, 如图 3.4 所示 ; 2. 将 BX 指向变量 TABLE 的首地址, 即 LEA BX,TABLE ; 3. 在 AL 中给出 Code1 的值后, 执行 XLAT 指令, 这时 AL 的内容即为相应的 Code2 值

例如, (AL) ((BX)+(AL)) 当 AL=0 时, 则执行 XLAT 指令后得到 AL=15; 当 AL=1 时, 则执行 XLAT 指令后得到 AL=8

7. 堆栈操作指令 1 堆栈 堆栈是以后进先出 (LIFO) 的原则存取信息的一种存储机构 在微型计算机中, 堆栈通常是存储器的一部分部分 为了保证堆栈区的存储器能按后进先出的规则存取信息, 该存储区的存取地址由一个专门的地址寄存器来管理, 这个地址寄存器称为堆栈指示器或称堆栈指针 SP

在 8088/8086 系统中, 堆栈段的段地址由 SS 提供, 堆栈操作的偏移地址由 SP 提供 压入堆栈操作 : 将信息送入堆栈的过程 ; 弹出堆栈操作 : 从堆栈中取出信息的过程

1. 压入堆栈指令 (PUSH) 格式 : PUSH SRC ; 将 SRC 压入堆栈, 即 (SP) (SP)-2,(SP) (SRC) PUSHF ; 将 PSW 压入堆栈, 即 (SP) (SP)-2,(SP) (PSW) 说明 : 压入堆栈指令 PUSH(Push word onto stack) 将先修正堆栈指针 SP 的内容, 然后再将 SRC 或 PSW 的内容送入堆栈 SRC 必须是字型的, 它可以是通用寄存器和段寄存器, 也可以是某种寻 址方式所指定的存储单元, 但不能是立即数

例如 : PUSH AX ; 将 (AX) 压入堆栈 PUSH DS ; 将 (DS) 压入堆栈 PUSH [SI] ; 将 ((SI)) 压入堆栈 PUSHF ; 将 (PSW) 压入堆栈

2. 弹出堆栈指令 (POP) 格式 : POP DST ; 从堆栈弹出 DST, 即 (DST) (SP),(SP) (SP)+2 POPF ; 从堆栈弹出 PSW, 即 (PSW) (SP),(SP) (SP)+2 说明 : 弹出堆栈指令 POP(Pop word off stack) 可以取出堆栈的内容送入 DST 所指定的寄存器 存储单元或 PSW, 然后修正 SP 的内容 DST 也必须是字型的, 它可以是通用寄存器 段寄存器 (CS 除外 ), 也可以是存储单元, 但不能是立即数

例如 : POP BX ; 从堆栈弹出一个字, 送给 (BX) POP ES ; 从堆栈弹出一个字, 送给 (ES) POP [SI] ; 从堆栈弹出一个字, 送给 ((SI)) POPF ; 从堆栈弹出一个字, 送给 (PSW)

例 3: 下列指令书写格式语法是错的 PUSH AL 〤堆栈只能按字操作 PUSH 5678H 〤不能为立即数寻址 POP CS 〤 CS 不能作 DST

( 三 ) 堆栈结构 当开辟一块存储区域用作为堆栈时, 必须将其段 地址置入 SS, 将 SP 指向栈底 ( 最后单元的下一个 单元地址 ), 如图 3.5(a) 所示, 每个小格表示 2 个字节单元 当执行四条压入堆栈指令 PUSH AX PUSH BX PUSH CX 和 PUSH DX 后, 得到如图 3.5 (b) 所示的堆栈结构, 这时 SP 所指的位置称为栈 顶 接着执行两条弹出指令 POP DX 和 POP CX, 则得到如图 3.5(c) 所示的堆栈结构

...... SP DX DX CX CX BX SP BX AX AX SP 栈底栈底栈底 (a) (b) (c)

( 四 ) 应用举例 利用堆栈操作指令可以方便地完成某些复 杂操作, 例如当需要交换 DS 和 ES 的内容时, 可以采用 : PUSH DS PUSH ES POP DS POP ES

另外, 在子程序设计时, 需要从子程序返回时尽量保持通用寄存器不变, 例如为保持 AX BX CX DX 的内容不变, 则在子程序入口处排入指令 : PUSH AX PUSH BX PUSH CX PUSH DX 然后在子程序返回指令之前, 排入指令 : POP DX POP CX POP BX POP AX

例 3.1 设 (SP)=00A0H, 执行下列指令 PUSH AX PUSH VAR1 后,(SP)= 009CH

应该注意 : 在程序设计时,PUSH POP 必须配对使用, 尤其是在分支中 应该确保 PUSH 与 POP 成对出现, 以保 证堆栈操作的正常次序, 这也是子程 序能够正常返回的前提条件

作业 : 4 5(1)(2)(3) ) 7 10