第三章 汇编语言及程序设计1_第1页
第三章 汇编语言及程序设计1_第2页
第三章 汇编语言及程序设计1_第3页
第三章 汇编语言及程序设计1_第4页
第三章 汇编语言及程序设计1_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章汇编语言及程序设计 3 18086 8088的指令系统 指令是控制计算机进行各种操作的命令 指令系统是CPU所能执行指令的集合 8086指令系统是其他微处理器指令的基础 3 1 1指令的构成和操作数的类型 1 指令的构成指令格式 指令由操作码字段和操作数字段组成 操作码 指计算机所要执行的操作 或称为指出操作类型 是一种助记符 操作数 指在指令执行操作的过程中所需要的操作数 该字段除可以是操作数本身外 也可以是操作数地址或是地址的一部分 还可以是指向操作数地址的指针或其它有关操作数的信息 双操作数分为源操作数 SRC 和目标操作数 DST 并由目标操作数存放运算结果 2 操作数的类型立即数操作数 数值直接存放在指令中 立即数可以是8位的 也可以是16位的有符号数或无符号数 寄存器操作数 数值存放寄存器中 指令中带有寄存器的号码 存储器操作数 数值存放内部存储器中 指令中带有存储器的地址 3 1 2寻址方式 寻址方式就是指令中用于说明操作数所在地址的方法 或者说是寻找操作数有效地址的方法 1 立即寻址所提供的操作数直接包含在指令中 它紧跟在操作码的后面 与操作码一起放在代码段区域中 例如 MOVAX 0A7FH立即数可以是8位的 也可以是16位的 若是16位的 则存储时低位在前 高位在后 用来给寄存器或存储器赋初值 2 寄存器寻址 操作数包含在CPU的内部寄存器中 如寄存器AX BX CX DX等 例如 MOVDS AXMOVAL BH 3 直接寻址 操作数地址的16位偏移量直接包含在指令中 它与操作码 起存放在代码段区域 操作数一般在数据段区域中 它的地址为数据段寄存器DS加上这16位地址偏移量 MOVAX 2000H 4 寄存器间接寻址 操作数是在存储器中 但是 操作数地址的16位偏移量包含在以下四个寄存器SI DI BP BX之一中 以SI DI BX间接寻址 则通常操作数在现行数据段区域中 即数据段寄存器 DS 16加上SI DI BX中的16位偏移量 为操作数的地址 例如 MOVAX SI 操作数地址是 DS 16 SI 以寄存器BP间接寻址 则操作数在堆栈段区域中 即堆栈段寄存器 SS 16与BP的内容相加作为操作数的地址 例如 MOVAX BP 操作数地址是 SS 16 BP 5 寄存器相对寻址 由指定的寄存器内容 加上指令中给出的8位或16位偏移量作为操作数的偏移地址 可以作为寄存器变址寻址的四个寄存器是SI DI BX BP 若用SI DI和BX作为变址 则与数据段寄存器相加 若用BP变址 则与堆栈段寄存器相加 形成操作数的地址即默认在堆栈段 例如 MOVAX COUNT SI 操作数地址是 DS 16 SI COUNT 6 基址变址寻址 操作数在存贮器中 其偏移地址由 基址寄存器 变址寄存器 形成 把BX和BP看成是基址寄存器 把SI DI看着是变址寄存器 例如 MOVAX BX SI 或MOVAX BX SI 7 相对基址变址寻址 操作数在存贮器中 其偏移地址由 基址寄存器 变址寄存器 相对偏移量形成 把BX和BP看成是基址寄存器 把SI DI看着是变址寄存器 再加上指令中指定的8位或16位偏移量作为操作数的偏移地址 例如 MOVAX 0318H BX SI 3 1 38086 8088指令系统 1 数据传送 DataTranster 2 算术运算 Arithmetic 3 逻辑运算 Logic 4 串操作 Stringmenipulation 5 程序控制 ProgramControl 6 处理器控制 ProcessorControl 一 数据传送指令 1 数据传送MOV指令一般格式 MOVDST SRCMOV是操作码 DST和SRC分别是目的操作数和源操作数 功能 完成数据传送 将源操作数的内容传到目的操作数 但源操作数的内容不变 具体来说 一条数据传送指令能实现 CPU内部寄存器之间数据的任意传送 除了代码段寄存器CS和指令指针IP以外 MOVAL BL 字节传送MOVCX BX 字传送MOVDS BX 立即数传送至CPU内部的通用寄存器组 即AX BX CX DX BP SP SI DI MOVCL 4MOVAX 03FFHMOVSI 057BH 能实现用立即数给存储单元赋值例如 MOV 2000H 25HMOV SI 35H CPU内部寄存器 除了CS和IP以外 与存储器 所有寻址方式 之间的数据传送 MOVAL BUFFERMOVAX SI MOV DI CXMOVSI BLOCK BP MOVDS DATA SI BX MOVDEST BP DI ES MOV指令应注意几个问题 可进行8位 16位的数据操作 源操作数与目的操作数的数据类型要一致 存储器间不能直接传送 两个段寄存器之间不能直接传送信息 立即数不能作为目标操作数 也不能直接传送到段寄存器 CS和IP不能作为目标操作数 2 堆栈指令 堆栈是一种数据存取的方式 与队列比较 特点为先进后出 包括入栈 PUSH 和出栈 POP 指令两类 仅能进行字运算 操作数不能是立即数 堆栈区存数据时总是从高位开始向低位方向增长 堆栈在内存的地址由SS指明 堆栈指针SP指向堆栈区的栈顶 存放栈顶的偏移地址 入栈指令PUSH一般格式 PUSHSRC源操作数可以是CPU内部的16位通用寄存器 段寄存器和内存操作数 所有寻址方式 入栈操作对象必须是16位数 功能 将数据压入堆栈执行步骤为 SP SP 2 SP 操作数低8位 SP 1 操作数高8位例如 PUSHBX执行过程为 SP SP 1 SP BH SP SP 1 SP BL 出栈指令POP一般格式 POPDST功能 将数据弹出堆栈 对指令执行的要求同入栈指令 CS IP除外 执行步骤为 操作数低8位 SP 操作数高8位 SP 1 SP SP 2例如 POPAXPOP BX POPDS 3 交换指令XCHG 一般格式 XCHGDST SRC功能 完成数据交换交换指令 把一个字节或一个字的源操作数与目的操作数相交换 交换能在通用寄存器之间 通用寄存器与存储器之间进行 但段寄存器和立即数不能作为操作数 例如 XCHGAL CLXCHGAX DIXCHGBX SIXCHGAX BUFFERXCHGDATA SI DH 4 累加器专用传送指令 IN指令一般格式 INAL n BAL n INAX n WAX n 1 n INAL DX BAL DX INAX DX WAX DX 1 DX 功能 从I O端口输入数据至AL或AX 输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中 若端口地址超过255时 则必须用DX保存端口地址 这样用DX作端口寻址最多可寻找64K个端口 例 INAL 78H MOVDX 347H INAL DX OUT指令一般格式 OUTn AL BAL n OUTn AX WAX n 1 n OUTDX AL BAL DX OUTDX AX WAX DX 1 DX 功能 将AL或AX的内容输出至I O端口 该指令将AL或AX中的内容传送到一个输出端口 端口寻址方式与IN指令相同 例 OUT79H AL MOVDX 347H OUTDX AL XLAT指令一般格式 XLAT AL DS 16 BX AL 功能 完成一个字节的查表转换 要求 寄存器AL的内容作为一个256字节的表的下标 表的基地址在BX中 转换后的结果存放在AL中 例如 MOVBX OFFSETTABLEMOVAL 1XLAT 查表OUT1 AL AL AAH本指令可用在数制转换 函数表查表 代码转换等场合 5 地址传送指令 有三条地址传送指令 LEA一般格式 LEADST SRC功能 把源操作数SRC的地址偏移量传送至目的操作数DST 要求 源操作数必须是一个内存操作数 目的操作数必须是一个16位的通用寄存器 这条指令通常用来建立串操作指令所须的寄存器指针 例 LEABX BUFR 把变量BUFR的地址偏移量部分送到BX MOVBX BUFR 把变量BUFR的内容送到BX MOVBX OFFSETBUFR 把变量BUFR的地址偏移量部分送到BX LDS一般格式 LDSDST SRC功能 完成一个地址指针的传送 地址指针包括段地址部分和偏移量部分 指令将段地址送入DS 偏移量部分送入一个16位的指针寄存器或变址寄存器 要求 源操作数是一个内存操作数 目的操作数是一个通用寄存器 变址寄存器 例如 LDSSI BX 将把BX所指的32位地址指针的段地址部分送入DS 偏移量部分送入SI LES LoadpointerintoES 一般格式 LESDST SRC这条指令除将地址指针的段地址部分送入ES外 与LDS类似 例如 LESDI BX COUNT 6 标志寄存器传送 LAHF将标志寄存器中的SF ZF AF PF和CF 即低8位 传送至AH寄存器的指定位 空位没有定义 SAHF将寄存器AH的指定位 送至标志寄存器的SF ZF AF PF和CF位 即低8位 根据AH的内容 影响上述标志位 对OF DF和IF无影响 PUSHF将标志寄存器压入堆栈顶部 同时修改堆栈指针 不影响标志位 POPF堆栈顶部的一个字 传送到标志寄存器 同时修改堆栈指针 影响标志位 二 算术运算指令 8086 8088提供加 减 乘 除四种基本算术操作 这些操作都可用于字节或字的运算 也可以用于带符号数与无符号数的运算 带符号数用补码表示 同时8086 8088也提供了各种校正操作 故可以进行十进制算术运算算术运算操作会影响标志寄存器 加 减运算会影响大部分的标志位 但加 减 指令不影响 位 1 加法指令 Addition 一般形式 ADDDST SRC功能 DST DST SRC 完成两个操作数相加 结果送至目的操作数DST 目的操作数可以是累加器 任一通用寄存器以及存储器操作数 例如 ADDAL 30 累加器与立即数相加ADDBX 3000H 通用寄存器与存储单元内容相加ADDDI CX 通用寄存器之间 ADDDX DATA BX SI 通用寄存器与存储单元内容相加ADDBETA SI DX 存储器操作数与寄存器相加这些指令对标志位CF DF PF SF ZF和AF有影响 一般形式 ADCDST SRC 带进位的加法功能 DST DST SRC CF这条指令与上 条指令类似 只是在两个操作数相加时 要把进位标志CF的现行值加上去 结果送至目的操作数 例如 ADCAL 30 累加器与立即数相加ADCBX 3000H 通用寄存器与存储单元内容相加 例 若有两个四字节的数 已分别放在自FIRST和SECOND开始的存储区中 每个数占四个存储单元 存放时 最低字节在地址最低处 用以下程序段实现相加 MOVAX FIRSTADDAX SECOND ADDAX FIRST 4 MOVSECOND AX MOVFIRST 4 AX MOVAX FIRST 2ADDAX SECOND 2 ADCAX FIRST 6 MOVSECOND 2 AX MOVFIRST 6 AXMOVAX 0HADCAX 0MOVFIRST 8 AX 一般形式 INCDST 功能 DST DST 1完成对指定的操作数DST加1 然后返回此操作数 此指令主要用于在循环程序中修改地址指针和循环次数等 这条指令执行的结果影响标志位AF OF PF SF和ZF 而对进位标志没有影响 如 INCALINC BX 2 减法指令 Subtraction 一般形式 SUBDST SRC 功能 DST DST SRC 完成两个操作数相减 也即从DST中减去SRC 结果放在DST例如 SUBCX BXSUB BP CL 一般形式 SBBDST SRC 功能 DST DST SRC CF这条指令与SUB类似 只是在两个操作数相减时 还要减去借位标志CF的现行值 本指令对标志位AF CF OF PF SF和ZF都有影响 同ADC指令一样 本指令主要用于多字节操作数相减 一般形式 DECDST 功能 DST DST 1对指令的操作数减1 然后送回此操作数 在相减时 把操作数作为一个无符号二进制数来对待 指令执行的结果 影响标志AF OF PF SF和ZF 但对CF标志不影响 即保持此指令以前的值 例如 DEC SI DECCL 例 将存放在内存中 和 中的两个 字节长度的数相加 结果放在 中 一般形式 NEGDST功能 取补 对操作数取补 即用零减去操作数 再把结果送回操作数 例如 NEGALNEGMULRE AL 00111100 则取补后为11000100即00000000 00111100 11000100若在字节操作时对 128 或在字操作时对 32768取补 则操作数没变化 但标志OF置位 此指令影响标志AF CF OF PF SF和ZF 此指令的结果一般总是使标志CF 1 除非在操作数为零时 才使CF 0 一般形式 CMPDST SRC 功能 DST SRC 比较指令完成两个操作数相减 使结果反映在标志位上 但并不送回结果 即不带回送的减法 例如 CMPAL 100CMPDX DICMPCX COUHT BP CMPCOUNT SI AX比较指令主要用于比较两个数之间的关系 在比较指令之后 根据ZF标志即可判断两者是否相等 相等的比较 若两者相等 相减以后结果为零 ZF标志为1 否则为0 若两者不相等 则可在比较指令之后利用其它标志位的状态来确定两者的大小 大小的比较 如果是两个无符号数 如CMPAX BX 进行比较 则可以根据CF标志的状态判断两数大小 若结果没有产生借位 CF 0 显然AX BX 若产生了借位 即CF 1 则AX BX 3 乘法指令 分为无符号乘法指令和带符号乘法指令两类 1 无符号乘法指令MUL一般格式 MULSRC完成字节与字节相乘 字与字相乘 且默认的操作数放在AL或AX中 而源操作数由指令给出 8位数相乘 结果为16位数 放在AX中 16位数相乘结果为32位数 高16位放在DX 低16位放在AX中 注意 源操作数不能为立即数 例如 MOVAL FIRST MULSECOND 结果为AX FIRST SECONDMOVAX THIRD MULAX 结果DX AX THIRD THIRDMOVAL 30HCBW 字扩展AX 30HMOVBX 2000HMULBX 2 带符号数乘法指令IMUL一般格式 IMULSRC SRC为源操作数这是一条带符号数的乘法指令 同MUL一样可以进行字节与字节 字和字的乘法运算 结果放在AX或DX AX中 当结果的高半部分不是结果的低半部分的符号扩展时 标志位CF和OF将置位 4 除法指令 1 无符号数除法指令DIV一般格式 DIVSRC 2 带符号数除法IDIV一般格式 IDIVSRC该指令执行过程同DIV指令 但IDIV指令认为操作数的最高位为符号位 除法运算的结果商的最高位也为符号位 例如 AX 2000H DX 200H BX 1000H 则DIVBX执行后 AX 2002H DX 0000 除法运算中 源操作数可为除立即寻址方式之外的任何一种寻址方式 且指令执行对所有的标志位都无定义 由于除法指令中的字节运算要求被除数为16位数 而字运算要求被除数是32位数 在8086 8088系统中往往需要用符号扩展的方法取得被除数所要的格式 因此指令系统中包括两条符号扩展指令 3 字节扩展指令CBW一般格式 CBW该指令执行时将AL寄存器的最高位扩展到AH 4 字扩展指令CWD一般格式 CWD该指令执行时将AX寄存器的最高位扩展到DX CBW CWD指令不影响标志位 5 十进制调整指令 针对十进制算术运算有一类十进制调整指令 压缩BCD码的十进制加法调整DAA 压缩BCD码的十进制减法调整DAS 非压缩BCD码的十进制加法调整AAA BCD码进行乘除法运算时 一律使用费压缩无符号数形式 因而AAM和AAD应固定地出现在MUL之前和DIV之后 三 逻辑运算和移位指令 1 逻辑运算指令 1 一般格式 NOTSRC功能 对操作数求反 然后送回原处 操作数可以是寄存器或存储器内容 此指令对标志无影响 例如 NOTAL 2 一般格式 ANDDST SRC功能 对两个操作数进行按位的逻辑 与 运算 结果送回目的操作数 其中目的操作数DST可以是累加器 任一通用寄存器 或内存操作数 所有寻址方式 源操作数SRC可以是立即数 寄存器 也可以是内存操作数 所有寻址方式 指令可以进行字节操作 也可以进行字操作 例如 ANDAL 0FH 可完成拆字的动作ANDSI 0H 将SI清0 3 一般格式 TESTDST SRC功能 完成与AND指令相同的操作 结果反映在标志位上 但并不送回 通常使用它进行测试 例如若要检测AL中的最低位是否为1 为1则转移 可用以下指令 TESTAL 01HJNZTHERE THERE 若要检测CX中的内容是否为0 为0则转移 该如何做呢 4 一般格式 ORDST SRC功能 对指定的两个操作数进行逻辑 或 运算 结果送回目的操作数 其中 目的操作数DST 可以是累加器 可以是任 通用寄存器 也可以是一个内存操作数 所有寻址方式 源操作数SRC 可以是立即数 寄存器 也可以是内存操作数 所有寻址方式 ANDAL 0FHANDAH 0F0HORAL AH 完成拼字的动作ORAX 0FFFH 将AX低12位置1ORBX BX 清相应标志 5 一般格式 XORDST SRC功能 对两个指定的操作数进行 异或 运算 结果送回目的操作数 其中 目的操作数DST可以是累加器 可以是任一个通用寄存器 也可以是一个内存操作数 全部寻址方式 源操作数可以是立即数 寄存器 也可以是内存操作数 所有寻址方式 例如 XORAL AL 使AL清0XORSI SI 使SI清0XORCL 0FH 使低4位取反 高4位不变 逻辑运算类指令中 单操作数指令NOT的操作数不能为立即数 双操作数逻辑指令中 必须有一个操作数为寄存器寻址方式 且目的操作数不能为立即数 它们对标志位的影响情况如下 NOT不影响标志位 其它四种指令将使CF OF 0 AF无定义 而SF ZF和PF则根据运算结果而定 2 移位指令 算术左移或逻辑左移指令SAL SHLOPR M M是移位次数 可以是1或寄存器CL这些指令可以对寄存器操作数或内存操作数进行指定的移位 可以进行字节或字操作 可以一次只移1位 也可以移位由寄存器CL中的内容规定的次数 算术右移指令SAROPR M 逻辑右移指令SHROPR M 2 循环移位指令 ROLOPR M 左循环移位ROROPR M 右循环移位未把标志位CF包含在循环的环中 RCLOPR M 带进位左循环移位RCROPR M 带进位右循环移位把标志位CF包含在循环中 作为整个循环一部分 四 串操作类指令 串操作类指令可以用来实现内存区域的数据串操作 这些数据串可以是字节串 也可以是字串 1 重复指令前缀串操作类指令可以与重复指令前缀配合使用 从而可以使操作得以重复进行 及时停止 重复指令前缀的几种形式见表所示 举例说明 2 串指令 对串指令要注意以下几个问题 各指令所使用的默认寄存器是 SI 源串地址 DI 目的地址 CX 字串长度 AL 存取或搜索的默认值 源串在数据段 目的串在附加段 方向标志与地址指针的修改 DF 1 则修改地址指针时用减法 DF 0时 则修改地址指针时用加法 MOVS STOS LODS指令不影响标志位 MOVS指令的功能MOVSDST SCRMOVSB 字节传送MOVSW 字传送把数据段中由SI间接寻址的一个字节 或一个字 传送到附加段中由DI间接寻址的一个字节单元 或一个字单元 中去 然后 根据方向标志DF及所传送数据的类型 字节或字 对SI及DI进行修改 在指令重复前缀REP的控制下 可将数据段中的整串数据传送到附加段中去 例在数据段中有一字符串 其长度为100 要求把它们传送到附加段中的一个缓冲区中 其中源串存放在数据段中从符号地址1000H开始的存储区域内 每个字符占一个字节 2000H为附加段中用以存放字符串区域的首地址 MOVSI 1000H 置源串偏移地址MOVDI 2000H 置目的串偏移地址MOVCX 100 置串长度CLD 方向标志复位REPMOVSB 字符串传送 CMPS指令的功能 把数据段中由SI间接寻址的一个字节 或一个字 与附加段中由DI间接寻址的一个字节 或一个字 进行比较操作 使比较的结果影响标志位 然后根据方向标志DF及所进行比较的操作数类型 字节或字 对SI及DI进行修改 在指令重复前缀REPE REPZ或者REPNE REPNZ的控制下 可在两个数据串中寻找第一个不相等的字节 或字 或者第一个相等的字节 或字 例在数据段中有一字符串 其长度为17 存放在数据段中从符号地址MESS1开始的区域中 同样在附加段中有一长度相等的字符串 存放在附加段中从符号地址MESS2开始的区域中 现要求找出它们之间不相匹配的位置 实现上述功能的程序段如下 LEASI MESS1 装入源串偏移地址LEADI MESS2 装入目的串偏移地址MOVCX 17 装入字符串长度CLD 方向标志复位REPECMPSB上述程序段执行之后 SI或DI的内容即为两字符串中第一个不匹配字符的下一个字符的位置 若两字符串中没有不匹配的字符 则当比较完毕后 CX 0 退出重复操作状态 SCAS指令的功能 用由指令指定的关键字节或关键字 分别存放在AL及AX寄存器中 与附加段中由DI间接寻址的字节串 或字串 中的一个字节 或字 进行比较操作 使比较的结果影响标志位 然后根据方向标志DF及所进行操作的数据类型 字节或字 对DI进行修改 在指令重复前缀REPE REPZ或REPNE REPNZ的控制下 可在指定的数据串中搜索第一个与关键字节 或字 匹配的字节 或字 或者搜索第一个与关键字节 或字 不匹配的字节 或字 例在附加段中有一个字符串 存放在以符号地址MESS2开始的区域中 长度为17 要求在该字符串中搜索空格符 ASCII码为20H 实现上述功能的程序段如下 LEADI MESS2 装入目的串偏移地址MOVAL 20H 装入关键字节MOVCX 17 装入字符串长度REPNESCASB上述程序段执行之后 DI的内容即为相匹配字符的下一个字符的地址 CX中是剩下还未比较的字符个数 若字符串中没有所要搜索的关键字节 或字 则当查完之后 CX 0退出重复操作状态 STOS指令的功能 把指令中指定的一个字节或一个字 分别存放在AL及AX寄存器中 传送到附加段中由DI间接寻址的字节内存单元 或字内存单元 中去 然后 根据方向标志DF及所进行操作的数据类型 字节或字 对DI进行修改操作 在指令重复前缀的控制下 可连续将AL AX 的内容存入到附加段中的一段内存区域中去 该指令不影标志位 例要对附加段中从MESS2开始的5个连续的内存字节单元进行清0操作 可用下列程序段实现 LEADI MESS2 装入目的区域偏移地址MOVAL 00H 为清零操作准备MOVCX 5 设置区域长度REPSTOSB LODS指令的功能 从串中取指令实现从指定的字节串 或字串 中读出信息的操作 例比较DEST和SOURCE中的500个字节 找出第一个不相同的字节 如果找到 则将SOURCE中的这个数送AL中 CLDLEADI DESTLEASI SOURCEMOVCX 500REPECMPSBJCXZNEXTMATCH DECSIMOVAL BYTEPTR SI NEXT 五 程序控制指令 转移类指令可改变CS与IP的值或仅改变IP的值 以改变指令执行的顺序 1 无条件转移 调用和返回指令 1 无条件转移指令JMP分直接转移和间接转移两种 一般格式 JMPDST DST是转移的目的地址 直接转移的3种形式为 短程转移JMPSHORTDST IP IP 8位位移量目的地址与JMP指令所处地址的距离应在 128 127范围之内 近程转移JMPNEARPTRDST IP IP 16位位移量或JMPDST NEAR可省略目的地址与JMP指令应处于同一地址段范围之内 远程转移JMPFARPTRDST IP DST的段内位移量 CS DST所在段地址 远程转移是段间的转移 目的地址与JMP指令所在地址不在同一段内 要修改CS和IP的内容 间接转移指令的目的地址可以由存储器或寄存器给出 段内间接转移JMPWORDPTRDST IP EA 由DST的寻址方式确定 JMPWORDPTR BX IP DS 16 BX JMPWORDPTRBXIP BX 段间间接转移JMPDOWRDPTRDST IP EA CS EA 2 该指令指定的双字节指针的第一个字单元内容送IP 第二个字单元内容送CS JMPDWORDPTR BX SI 2 调用和返回指令CALL指令用来调用一个过程或子程序 由于过程或子程序有段间 即远程FAR 和段内调用 即近程NEAR 之分 所以CALL也有FAR和NEAR之分 因此RET也分段间与段内返回两种 调用指令一般格式为 段内直接调用 CALLNEARPTRDST 操作 SP SP 2 SP 1 SP IP IP IP 16位位移量CALL指令首先将当前IP内容压入堆栈 执行RET指令而返回时 从堆栈中取出一个字放入IP中 段间直接调用 CALLFARPTRDST 操作 SP SP 2 SP 1 SP CS SP SP 2 SP 1 SP IP IP DST偏移地址 CS DST段地址CALL指令先把CS压入堆栈 再把IP压入堆栈 当执行RET指令而返回时 从堆栈中取出一个字放入IP中 然后从堆栈中再取出第二个字放入CS中 作为段间返回地址 段内间接调用 CA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论