8088[8086]指令格式(有用)
- 格式:doc
- 大小:67.50 KB
- 文档页数:2
3. 乘法指令MUL,IMUL,AAM乘法指令包括无符号数乘法指令MUL、有符号数乘法指令IMUL和乘法的十进制调正指令AAM。
8088/8086CPU乘法指令能实现字节乘法和字的乘法。
字节乘法的乘积为16位存放在AX中,字的乘法的乘积为32位存放在DX:AX。
指令的目的操作数采用隐含寻址方式。
(1)无符号数乘法指令MUL指令格式:MUL src功能:如果src为字节类型,累加器AL与src相乘,结果存在AX中;如果src为字类型累加器AX与src相乘,结果存在DX:AX中。
说明:两个乘数的数据类型要相同,指令影响标志位CF,OF位。
例如:MUL AH ;AL×AH 结果保存在AX中。
MUL BX ;AX×BX结果保存在DX:AX中。
MUL BYTE PTR[SI] ;AL×[SI]结果保存在AX中。
MUL WORD PTR[BX+DI] ;AX×[BX+DI]结果保存在DX:AX中。
字节相乘的乘积在AX中,如果标志位CF=OF=1,表明AH不为0;字相乘的乘积在DX:AX中,如果标志位CF=OF=1,表明乘积的高位DX不为0。
(2)有符号数乘法指令IMUL指令格式:IMUL src功能:指令的功能和用法与MUL指令相同,只是操作数为带符号数,结果也是带符号数。
说明:指令影响标志位CF、OF位。
如果标志位CF=OF=0,表明乘积的高位部分是低位的符号扩展,可以忽略。
如果标志位CF=OF=1,表明DX含有乘积的高位,不能忽略。
(3)乘法的十进制调正指令AAMAAM指令完成AL中数的调正。
使用AAM的前提是两个非压缩BCD码相乘,乘积在AL中,AH=0。
指令格式:AAM功能:把AL寄存器的内容除以0AH,商存在AH中,余数存在AL中。
例如:MOV AL, 8MOV BL, 7MUL BLAAM ;AH=5,AL=64. 除法指令DIV,IDIV,CBW,CWD,AAD除法指令包括无符号数除法指令DIV,带符号数除法指令IDIV。
8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
附录:8086/8088 指令码格式
我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。
我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。
8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。
为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。
通常指令的第一字节为操作码,规定指令的操作类型。
第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。
可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。
操作码(第一字节)及寻址方式字节(MOD字段)格式如下。
图1 8086/8088操作码及寻址方式字段格式
第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。
D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。
第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。
图2 8086/8088 不同字长的指令码格式
REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。
由REG 字段选择寄存器的具体规定见表1。
表1 REG 字段编码表
MOD 字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。
在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。
MOD 字段编码表见表2。
表2 MOD 字段编码表
R/M 字段受MOD 字段将指出第二操作数所在寄存器编号。
MOD=00,01,10 为存储器方式,R/M 则指出如何计算存储器中操作数地址。
MOD 与R/M 字段组合的寻址方式见表3。
表3 各种MOD 与R/M 字段组合编码及有关地址的计算
例如:指令MOV AH,[BX+DI+50H]。
代码格式如下。
OPCODE D W MOD REG R/M DISP—8
指令码:8A6150H。
指令ADD DISP [BX] [DI],DX;DISP=4523H
代码格式:
OPCODE D W MOD REG R/M DISP—Lo DISP—Hi
指令码为:01 91 23 45H。