微型计算机技术与应用第3章 Pentium的指令系统
第3章 Pentium的 指令系统 博学 审问 慎思 明辨 笃行 操作数直接存放在指令中,紧跟在操作码之后, MOVAL,80H MOVAX,1090H MOVEAX I/O直接寻址:地址在指令中直接提供(0~255) INAL,82H OUT80H,AX INEAX,80H I/O间接寻址:利用DX设置端口地址 (0~65535) MOV DX,80H INAL,DX OUTDX,AX OUTDX,EAX 3.1.4 存储器寻址 2 . 寄存器间接寻址(Register indirect addressing) 操作数的有效地址存放在寄存器中 (寄存器内容=偏移地址) MOVAX,[BX] MOV EAX,[EBX] 3.2 Pentium的指令系统 Pentium的指令分为如下几类: 传送指令; 串操作指令; 算术运算指令; 逻辑运算和移位指令; 转移和调用指令; 标志操作和处理器指令; 控制指令; 条件测试和字节设置指令; 系统管理指令; 支持高级语言的指令。 3.2.1 传送指令 IMUL DX,BX,300 IMULCX,23 IMULEBP,200 IMULECX,EDX,2000 mov al,80h;al=80h cbw;ax=ff80h mov ax,0BA45H;ax=0BA45H cwd;dx=0ffffh, ax=0ba45h 逻辑运算指令 位传送 ;把AL最低位送BL最低位,保持AL不变 ROR BL,1 ROR AL,1 RCL BL,1 ROL AL,1 BCD码合并 ;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL AND AX,0F0FH;保证高4位为0 MOV CL,4 ROL AH,CL;也可以用SHL AH,CL ADD AL,AH;也可以用OR AL,AH 博学 审问 慎思 明辨 笃行 例:设两个以ASC?码表示的十进制数代码‘7’ ‘5’, 求出其相加后的分离式BCD码, 存入AX中。 0011 0111 37H + 0011 0101 35H 0110 1100 + 0000 0110 加06调整 ( AL ) = 0111 0010 进位送AH ( AL ) = 0111 0010 + 0000 0001 0000 0000 ( AH ) = 0000 0001 0000 1111 (AL) ^0FH ^ 0000 0001 0000 0010 AH AL 1 2 MOV AL, 37H ADD AL, 35H AAA ?3)乘除法的分离BCD*调整指令: ;AX←将AX乘积调整为分离BCD码 ;AX←将AX中分离BCD码扩展成二进制数 注意: * AAM指令跟在字节乘MUL之后,将乘积调整为分离BCD码 * AAD指令跟在字节除DIV之前,先将分离BCD码的被除数调整为二进制数 * AAM和AAD指令根据结果设置SF、ZF和PF,但对OF、CF和AF无定义 第3章 Pentium的指令系统 (MUL r8/m8) AAM AAD (DIV r8/m8) 乘法: (AL)除以0AH,商? (AH),余数? (AL) 除法: DIV指令之前,先调整被除数, (BCD) ?二进制 将0AH ×(AH)+(AL) ? (AL); 0 ?(AH) 例:(AX)=0504H (BL)=03H