pentium指令系统.ppt

上传人:sh****n 文档编号:6399171 上传时间:2020-02-24 格式:PPT 页数:84 大小:785.31KB
返回 下载 相关 举报
pentium指令系统.ppt_第1页
第1页 / 共84页
pentium指令系统.ppt_第2页
第2页 / 共84页
pentium指令系统.ppt_第3页
第3页 / 共84页
点击查看更多>>
资源描述
第3章Pentium的指令系统 本章要点 Pentium寻址方式和指令系统 汇编语言的寻址方式传送指令 算术运算指令 逻辑运算指令和移位指令的用法 串操作指令 控制转移指令汇编语言源程序的规范格式伪指令及其使用 第3章Pentium的指令系统 3 1Pentium的寻址方式3 2Pentium的指令系统3 3汇编语言中的标记 表达式和伪指令 3 1Pentium的寻址方式 汇编语言指令要解决的两个问题 要指出进行什么操作 操作符 要指出操作数和操作结果放在何处 寻址方式 3 1Pentium的寻址方式 立即数寻址寄存器寻址存储器寻址输入 输出端口寻址 1 立即数寻址 操作数就在指令中提供 叫立即数寻址方式 比如 MOVAL 80HMOVAX 1090H 2 寄存器寻址 操作数放在寄存器中 指令中给出寄存器名 寄存器寻址方式 比如 INCCXROLAH 1MOVECX EAX 3 存储器寻址 数据在存储器中 偏移地址 有效地址EA 由指令给出 存储器寻址 EA 基址 变址x比例因子 位移量 寻址计算方法 存储器寻址 1 直接寻址方式如 INCWORDPTR 500H 2 寄存器间接寻址方式如 MOV ECX EDX任何32位通用寄存器 BX BP SI DI SP ESP BP EBP BP 默认段为SS 其他寄存器默认段为DS 3 寄存器相对寻址方式如 MOVECX EAX 24 存储器寻址 4 基址变址寻址方式如 MOVEAX ESI EBX 5 相对基址变址寻址方式如 ADDEDX ESI EBP 100H 存储器寻址 6 相对的带比例因子的变址寻址方式如 IMULEBX ESI 4 7 7 基址加带比例因子的变址寻址方式如 MOVECX EDI 8 EAX 8 相对的基址加带比例因子的变址寻址方式如 MOVEAX EDI 4 EBP 80 4 输入 输出端口寻址 I O直接寻址I O端口地址直接在指令中提供例 INAL 82HOUT80H AXI O间接寻址在DX寄存器中设置好I O端口地址例 INAL DXOUTDX AX 3 2Pentium的指令系统 传送指令算术运算指令逻辑运算和移位指令串操作指令调用 转移 循环控制 中断指令标志操作和处理器控制指令条件测试和字节设置指令位处理指令系统管理指令支持高级语言指令 1 传送指令 通用传送指令 MOVMOVZXMOVSX堆栈操作指令 PUSHPOPPUSHAPOPAPUSHADPOPAD交换指令 XCHGBSWAP输入 输出指令 INOUT换码指令 XLATXLATB地址传送指令 LEALDSLESLSSLFSLGS标志传送指令 LAHFSAHFPUSHFPOPFPUSHFDPOPFD 1 传送指令 输入指令IN长格式 INAL PORT 字节 INAX PORT 字 执行的操作 AL PORT 字节 AX PORT 1 PORT 字 短格式 INAL DX 字节 INAX DX 字 执行的操作 AL DX 字节 AX DX 1 DX 字 输入 输出指令IN OUT 8086支持64K个I O端口 地址范围0000 FFFFH 前256个端口 0 FFH 可以直接在指令中指定 即长格式 直接寻址 当端口号 256时 只能使用短格式 间接寻址 1 传送指令 MOVCX 1000H MOVWORDPTR SI 6070HPUSHAXPUSH BX DI XCHGBX CXXCHG 2530H AXINAL 60HOUT61H AXINAL DXOUTDX AX 1 传送指令 XLATLEAAX 3820H LDSDI 2530H LESDX 1000H 举例 堆栈存放了字符串的首地址 SUB子程序中在调用显示字符串子程序DISP之前 应取出字符串首地址 SUBPROCPUSHBPMOVBP SPPUSHESPUSHDILESDI BP 04 CALLDISP POPDIPOPESPOPBPRETSUBENDP SP 2 算术运算指令 加法指令 ADDADCINCXADD减法指令 SUBSBBDECNEGCMPCMPXCHGCMPXCHG8B乘法指令 MULIMUL除法指令 DIVIDIV类型转换指令 CBWCWDCWDECDQBCD码指令 AAADAAAASDASAAMAAD 算术运算指令举例 设W X Y Z均为16位带符号数 编写程序计算表达式 W X Y Z 220 X 将表达式的商和余数存入数据区RESULT单元开始的区域中 DATASEGMENTWDW 304XDW1000YDW 12ZDW20RESULTDW2DUP DATAENDS CODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVAX XIMULYMOVCX AXMOVBX DXMOVAX ZCWDADDCX AXADCBX DXSUBCX 220SBBBX 0MOVAX WCWDSUBAX CXSBBDX BXIDIVX MOVRESULT AXMOVRESULT 2 DXMOVAH 4CHINT21HCODEENDSENDSTART W X Y Z 220 X 3 逻辑运算和移位指令 逻辑运算指令 ANDORNOTXORTEST移位指令 SHLSHRSALSARROLRORRCLRCRSHLDSHRD 逻辑运算指令举例 编写程序计算S A B 2 AANDB x2 DATASEGMENTADB12BDB51SDB DATAENDS CODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVAL AADDAL BSHRAL 1MOVAH AANDAH BSHLAH 1SUBAL AHMOVS AL MOVAH 4CHINT21HCODEENDSENDSTRAT 移位指令举例 已知 BX 84F0H 把 BX 中的16位数每4位压入堆栈 MOVCH 4MOVCL 4NEXT ROLBX CLMOVAX BXANDAX 0FHPUSHAXDECCHJNZNEXT 4 串操作指令 字符串传送指令 MOVSBMOVSWMOVSD字符串比较指令 CMPSBCMPSWCMPSD字符串检索指令 SCASBSCASWSCASD取字符串指令 LODSBLODSWLODSD存字符串指令 STOSBSTOSWSTOSDI O串操作指令 INSBINSWINSDOUTSBOUTSWOUTSD 串操作指令举例 MOVSI 1000H 源地址为1000HMOVDI 2000H 目的地址为2000HMOVCX 100 字符串长100个字节CLD 方向标志清0 使指针按增量方向修改REPMOVSB 将源地址开始的100个字节传送到目的地址 假设AL中为键盘命令字节 0EEDH开始的4个单元中存放了 4个符号对应的ASCII码 如果键盘命令字节与上面4个符号中的某一个相等 则在440H开始的对应单元加1 MOVDI 0EEDHCLDMOVCX 4MOVDX CXREPNZSCASBJNZAAASUBDX CXDECDXMOVDI DXINCBYTEPTR DI 440H AAA 将0700H单元开始的5个字节的内容取出放在累加器中处理 处理以后再送到0700H的内存区域 CLDMOVSI 0700HMOVDI SIMOVCX 5LI LODSBPUSHCX MOV DI ALINCDIPOPCXDECCXJNZLI 5 调用 转移 循环控制 中断指令 子程序调用和返回指令 CALLRET无条件转移和条件转移指令 JMPJC循环控制指令 LOOPLOOPZ LOOPELOOPNZ LOOPNE中断和中断返回指令 INTIRETIRETD 设2000H开始的存储区中 存放着14H个数据 要求找出其中最大的一个数 并存放在2000H单元中 GETMAX MOVBX 2000HMOVAL BX MOVCX 13HP1 INCBXCMPAL BX JAEP2MOVAL BX P2 DECCXJNZP1MOVBX 2000HMOV BX AL 转移指令举例 循环控制指令举例 例子 MOVCX 28HMOVSI 0FFHNEXT INCSICMPBYTEPTR SI 0LOOPZNEXTJNZOKKCALLDISPLAY1RETOKK CALLDISPLAY2RET 中断指令举例 例1 显示一个字符串和接收一个字符串 KEYBUFDB10 10DUP MEDB INPUTYOURPASSWORD DAI MOVDX OFFSETMEMOVAH 9INT21HKEYIN MOVDX OFFSETKEYBUFMOVAH 0AHINT21H 显示字符串DS DX 串地址字符串以 结尾 键盘输入到缓冲区DS DX 缓冲区首址 DS DX 缓冲区最大字符数 DS DX 1 实际输入的字符数 INT指令举例 例2 将中断处理程序进行装配INTERSET CLIMOVDX OFFSETMYPROGMOVAL 50HMOVAH 25HINT21H例3 把键盘输入的字符读到AL寄存器中MOVAH 01INT21H 设置中断向量DS DX 中断向量AL 中断类型号 键盘输入并回显AL 输入字符 INT指令举例 例4 把DL中的字符显示在屏幕上 MOVDL A MOVAH 02INT21H 显示输出DL 输出字符 INT指令举例 例5 清除屏幕CLEAR MOVAH 6MOVAL 0MOVCH 0MOVCL 0MOVDH 24MOVDL 79MOVBH 7INT10H 屏幕初始化或上卷AL 0初始化窗口AL 上卷行数BH 卷入行属性CH CL 左上角行 列号DH DL 右上角行 列 INT指令举例 例6 使光标定位在窗口的左下角POS CURSE MOVAH 2MOVDH 16MOVDL 30MOVBH 0INT10H 置光标位置BH 页号DH DL 行 列 6标志操作和处理器控制指令 标志操作指令暂停指令和无操作指令交权指令和等待指令总线封锁指令 标志操作指令 CLC STC CMC CLD STD CLI STI 暂停指令和无操作指令 HLT功能 CS和EIP IP 指向HLT后面的一条指令的地址 而CPU暂停工作 硬件中断 复位操作可使CPU退出暂停状态 NOP功能 CPU不进行任何操作 交权指令和等待指令 交权指令ESC CPU调用协处理器工作 等待指令WAIT 放在ESC之后 使主处理器等待协处理器的处理结果 CPU测试TEST 引脚上的信号 直到有停止信号为止 总线封锁指令 LOCK功能 对总线实行封锁 放在其它指令之前 指令前缀 如 LOCKXCHGAL 2000H 不允许用在重复串操作指令之前 以防串操作要访问的页面不在内存时 由LOCK前缀长期封锁总线而妨碍操作系统将所需页面调入内存 而引起故障 7条件测试和字节设置指令 1 基于某个标志测试的字节设置指令SETZ SETE SETNZ SETNE SETO SETNO SETC SETNC SETS SETNS SETP SETNP如 SETZAL 2 基于无符号数比较的字节设置指令SETB SETNAE SETC SETNB SETAE SETNC SETBE SETNA SETNBE SETA如 CMPVAR 10000SETBEWITHIN 3 基于有符号数比较的字节设置指令SETL SETNGE SETNL SETGE SETLE SETNG SETNLE SETG 8位处理指令 1位测试和设置指令BT BTS BTR BTC386将选中的位装入CF 再对此位操作 如 BTAX 2BTSEAX 12位扫描指令BSF BSR386对一个字或双字扫描 并将第一个为1的序号找出来 如 BSFCX AXBSRECX EAX 位扫描指令BSF BSR 磁盘操作系统中 经常用位图来表示扇区使用情况 位图是一个布尔阵列 若第N个扇区为空 则第N位为1 否则为零 设位图地址从MAP开始 整个位图由N个双字组成 SSS CLDMOVEDI MAPMOVECX NSUBEAX EAXREPZSCASDJZFAILBSFEAX EDI 4 FAIL 9系统管理指令 主要用于对系统的设置和测试 1 系统测试和管理指令RDTSC CPUID RSMpentium INVLPG486RDTSC读时钟周期数指令读取记录时钟周期数的64位计数器的值送EDX EAX CPUID读取CPU的标识等有关信息获得Pentium处理器的类型等有关信息 RSM复位到系统管理模式INVLPGmTLB项清除指令使转换检测缓冲器TLB的32个表项中用m指出的当前项清除 9系统管理指令 2 状态字操作指令LMSW SMSW CLTS386LMSW 装入机器状态字指令如 LMSW SP SMSW 存储机器状态字指令CLTS功能 清除机器状态字中的任务切换标志TS 9系统管理指令 3 描述符表指令SGDT SLDT SIDTLGDT LLDT LIDT386LGDT LLDT LIDT 装入全局 局部 中断描述符表寄存器指令如 LGDTMEM1SGDT SLDT SIDT功能 分别将全局描述符表寄存器 局部描述符表寄存器 中断描述符表寄存器的内容送到存储器中 9系统管理指令 4 任务寄存器指令LTR STR386LTR 装入任务寄存器指令STR 存储任务寄存器指令如 STR EBX 9系统管理指令 5 段选择子操作指令VERR VERWLSLLARARPL386VERR VERW 检测段类型指令VERR检测一个选择子所对应的段是否可读VERW检测一个选择子所对应的段是否可写 如 VERRSELE1LAR 装入请求特权级指令如 LARAX SELECTLSL 装入段界限值指令如 LSLBX SELECTARPL 调整请求特权级指令如 ARPLMEM WORD BX 9系统管理指令 6 测试寄存器指令RDMSRWRMSRpentiumRDMSR读取测试寄存器的指令ECX中设置寄存器号 可为0 14H 读取内容在EDX EAX中WRMSR写入测试专用寄存器的指令将EDX EAX中64位数写入测试专用寄存器 9系统管理指令 7 Cache操作指令INVDWBINVD486INVDCache清除指令将片内Cache中的内容清除 并使外部电路清除外部Cache中的内容 WBINVDCache清除和回写指令将片内Cache中的内容清除 并外部电路将外部Cache中的数据回写到主存 再清除外部Cache中的内容 10支持高级语言指令 常常嵌入高级语言编写的程序中 BOUND386 功能 检查16位寄存器或32位寄存器中给定的值是否符合给定的界限 如 BOUNDEBX MEM DWORD 10支持高级语言指令 ENTER386 功能 进入过程时 建立一个堆栈空间 第一个操作数指出局部变量所需要的存储字节数 第二个操作数指出过程嵌套的级别0 31 如 ENTER48 3LEAVE386 功能 消除所有局部变量 释放过程所占的堆栈空间 不带参数 ENTER指令 3 3汇编语言中的标记 表达式和伪指令 汇编语言中的标记表达式语句伪指令 汇编语言中的标记 一个完整的汇编语言的语句组成 标识符保留字分界符常数注释 汇编语言中的标记 1 标识符不能以数字开头 可以由数字 字母和下划线组合而成 2 保留字汇编语言中预先保留的具有特殊含义的符号 3 分界符作为两个部分的分隔符号用 汇编语言中的标记 4 常数后面字母B来表示二进制数后面字母D 可不加 表示十进制数后面字母H来表示十六进制数后面字母O或Q来表示八进制数带单引号的字符串如 ABC 5 注释注释要用分号 打头 表达式 由操作数和运算符组成 1 操作数可以是 常数 标识符 代表一个数据 或一个地址 2 运算符算术运算符加 减 乘 除 取模运算符MOD逻辑运算符与 AND 或 OR 非 NOT 和异或 XOR 运算 表达式 关系运算符相等EQ 不等NE 小于LT 大于GT 小于或等于LE 大于或等于GE 关系不成立 数值为0 成立 数值为0ffffh或0ffffffffh分析运算符和综合运算符分析运算符 OFFSET SEG TYPE LENGTH SIZE如 KEYBUFDW100DUP 综合运算符 PTR如 MOVBYTEPTR 1000H 0MOVWORDPTR 1000H 0 语句 宏汇编语言中的两种语句 指令性语句如 ADDAL BLMOVAX 1000指示性语句指示性语句即伪指令如 DBSEG 伪指令 最常用的伪指令有 确定CPU的伪指令 586 586P标号赋值伪指令EQU如 ABCEQU220定义存储单元伪指令DB DW DD DQ DT如 TABLEDB00 01 02定义存储单元类型伪指令BYTE WORD DWORD如 INCBYTEPTR DI 段定义伪指令SEGMENT ENDS ASSUME和ORG简约段定义伪指令 DATA STACK CODE MODEL定义过程伪指令PROC ENDP NEAR FAR源程序结束伪指令END sta1segment stack sta1endsda1segmentword public use16 data da1endscodesegmentassumecs code ds da1 ss sta1start movax da1movds axmovax sta1movss ax movax 4c00hint21hcodeendsendstart 完整段定义格式 modelsmall 586 stack100h data codestart movax datamovds ax movax 4c00hint21hendstart 简化段定义格式 汇编语言源程序规范格式 DATASEGMENTDAIDB0DB PROGRAMASM DB40DUP BUFDMADB80HDUP DATAENDSSTACKSEGMENTME1DB80HDUP STACKENDS CODESEGMENTASSUMECS CODE DS DATA SS STACK ES DATAORG100HSTART MOVAX DATAMOVDS AXMOVAX STACKMOVSS AXMOVDX OFFSETDAIMOVAH 13HINT21HMOVDX OFFSETDAIMOVAH 16HINT21H MOVDX OFFSETBUFDMAMOVAH 1AHINT21HMOVAX OFFSETDAI 12MOVBX AXMOV BX 0MOVAX OFFSETDAI 32MOVBX AXMOV BX 0MOVSI 2000H MOVE MOVDI OFFSETBUFDMAMOVCX 80HCLDPUSHCSPOPESREPMOVSBMOVCX 80HMOVAL 1AHMOVDI OFFSETBUFDMAPUSHCSPOPESREPNZSCASBJZCLOSEPUSHSI MOVDX OFFSETDAIMOVAH 15HINT21HPOPSIJMPMOVECLOSE MOVDX OFFSETDAIMOVAH 15HINT21HMOVDX OFFSETDAIMOVAH 10HINT21HCODEENDSEND DDATASEGMENTMESDB TheHEXcodeofDECcodeare BUFDB30H 30H 30H 31H 32HDB10HDUP 0 DDATAENDSCODESEGMENTASSUMECS CODE DS DDATASTART MOVAX DDATAMOVDS AXMOVSI OFFSETBUFMOVBX 000AHMOVCX 0004HMOVAH 00HMOVAL SI SUBAL 30H A1 IMULBXADDAL SI 01 SUBAL 30HINCSILOOPA1MOV SI 1 AXMOVDX OFFSETMESMOVAH 09HINT21HINCSIINCSICALLSHOWDECSICALLSHOWMOVAX 4C00HINT21H 综合举例 分析程序输出 分析程序输出 SHOWPROCNEARMOVAL DS SI ANDAL 0F0H 取高4位SHRAL 4CMPAL 0AH 是否是A以上的数JBC2ADDAL 07HC2 ADDAL 30HMOVDL AL showcharacterMOVAH 02HINT21HMOVAL DS SI ANDAL 0FH 取低4位CMPAL 0AHJBC3 ADDAL 07HC3 ADDAL 30HMOVDL ALMOVAH 02HINT21HRETSHOWENDPCODEENDSENDSTART TD调试环境说明 见tdshili exe 思考 给定 BX 1234H SI 5678H 位移量D 3344H 是确定以下各种寻址方式的有效地址EA是什么 立即寻址 直接寻址 使用BX的寄存器寻址 使用BX的寄存器间接寻址 使用BX的寄存器相对寻址 基址变址寻址 相对基址变址寻址 思考 如果数据段符号地址DBUF为3100H 并从它开始存放1234H 请问执行以下指令后寄存器AX的内容是什么 LEAAX DBUFMOVAX DBUF 思考 已知程序段如下 请说明完成什么操作 MOVCL 3MOVAL 0F0HSARAL CL已知AH 0FDH AL 03 请说明执行下列程序段后 程序将转向哪一个符号地址W1 W2或W3 ADDAH ALJNOW1JNCW2JZW3 思考 根据以下描述写出数据段的定义 已知数据段中的VAR1的偏移地址为0010H 占3个字节 初始化数据为20H 30H 40H VAR2占1个字 初始化数据为5678H VAR1和VAR2之间有13个字节的距离 VAR1有字类型的名字VAR1 WORD VAR2有字节类型的名字VAR2 BYTE 思考 已知从数据段DATA单元开始存放字节型的带符号数X和Y 请设计计算Y 6X 8的程序 已知X Y是字节型的无符号数 请设计程序计算 已知从数据段BUF单元开始存放15个字节型数据 请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元 要求从键盘输入一个以 为起始符 以空格为结束符的字符串 并在屏幕上显示 显示格式为X ABC 其中X是输入字符串的个数 不包括起始符 和空格符 ABC 是输入的字符 补充 保护模式下编程 程序功能 将数据段1中的内容传送到数据段2中 程序分析 实现程序功能会用到三个段 代码段 源数据段 目的数据段 每个段必须由描述符来定义 把它们放在GDT或LDT中 对段操作时 需要使用与段对应的选择子 段描述符对应的数据结构 DSECSTRUCLimitLdw0BaseLdw0BaseMdb0Attributesdb0LimitHdb0BaseHdb0DSECENDS 保护模式下编程 代码段描述符 ATCE 98H 只执行代码段属性SCODEDSEC数据段描述符 ATDR 90H 只读数据段属性ATDW 92H 可读 写数据段属性DATASDSECDATADDSEC 保护模式下编程 描述符表及选择子 DSEGSEGMENTUSE16GDTLABELBYTEID1DESCSCODEDESCDATASDESCDATADDESCGDTLEN GDTSCODE SEL SCODE GDTDATAS SEL DATAS GDTDATAD SEL DATAD GDTID2DESCID3DESCDSEGENDS 参考程序 386PDESCSTRUCLIMITLDW0BASELDW0BASEMDB0ATTRDB0LIMITHDB0BASEHDB0DESCENDSATCE 98HATDR 90HATDW 92H 参考程序 DSEGSEGMENTUSE16GDTLABELBYTEID1DESCSCODEDESCDATASDESCDATADDESCGDTLEN GDTSCODE SEL SCODE GDTDATAS SEL DATAS GDTDATAD SEL DATAD GDTID2DESCID3DESCDSEGENDS 参考程序 DSEG1SEGMENTUSE16HELLODB Hello everybody DB ThisismyfirstPMprogram DB256HDUP 0 D1LEN HELLO 1DSEG1ENDSDSEG2SEGMENTUSE16BUFLEN 256BUFFERDBBUFLENDUP 0 DSEG2ENDS CSEGSEGMENTUSE16ASSUMECS CSEG DS DSEG1 ES DSEG2STARTPROCMOVAX DATAS SELMOVDS AXMOVAX DATAD SELMOVES AXCLDXORSI SIXORDI DIMOVCX BUFLENM1 MOVSBLOOPM1INT0FFHSTARTENDPCLEN START 1CSEGENDSENDSTART
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!