div是除法指令,使用div做除法的时候应注意以下问题:
1、除数:有8位和16位两种,在一个寄存器或者内存中。
2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16位,被除数为32位,被 除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。
3、结果:如果除数是8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数是16位,则AX存储除法操作的商,DX存储除法操作的余数。
格式如下:
div reg
div 内存单元
以100001/100为例,100001大于65535,所以只能用dx和ax两个寄存器联合存放100001,也就是说要进行16位的除法。除数100小于255,可以在一个8位的寄存器中存放,但是被除数是32位的,除数应为16位,所以要使用一个16位的寄存器来存放除数100.
dx和ax分别存放100001的高16位和低16位值,所以将100001表示为16进制的形式:186a1h.
程序如下:
view plaincopy to clipboardprint?
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov dx,1
mov ax,86a1h
mov bx,100
div bx
mov ax,4c00h
int 21h
CODES ENDS
END START
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov dx,1
mov ax,86a1h
mov bx,100
div bx
mov ax,4c00h
int 21h
CODES ENDS
END START
程序执行后,ax=03e8h,dx=1(余数是1),在debug中查看如下所示:
-p
AX=86A1 BX=0000 CX=0010 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0BA5 SS=0BB5 CS=0BB5 IP=0006 NV UP EI PL NZ NA PO NC
0BB5:0006 BB6400 MOV BX,0064
-p
AX=86A1 BX=0064 CX=0010 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0BA5 SS=0BB5 CS=0BB5 IP=0009 NV UP EI PL NZ NA PO NC
0BB5:0009 F7F3 DIV BX
-p
AX=03E8 BX=0064 CX=0010 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0BA5 SS=0BB5 CS=0BB5 IP=000B NV UP EI PL NZ AC PO NC
0BB5:000B B8004C MOV AX,4C00
-p
AX=4C00 BX=0064 CX=0010 DX=0001 SP=0000 BP=0000 SI=0000 DI=0000
DS=0BA5 ES=0BA5 SS=0BB5 CS=0BB5 IP=000E NV UP EI PL NZ AC PO NC
0BB5:000E CD21 INT 21
-p
本文转自:http://blog.csdn.net/w_shun/archive/2010/05/01/5548967.aspx
分享到:
相关推荐
1. 数据处理指令:如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)等,用于进行基本算术运算。 2. 移位指令:如左移(SHL)、右移(SHR),用于改变寄存器或内存中的数据位移位置。 3. 控制流指令:如跳转...
1. **数据处理指令**:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等,它们用于进行基本的算术运算。例如,ADD指令可以将两个操作数相加,并将结果存储在某个寄存器或内存位置。 2. **算术运算指令**:...
1. 数据处理指令:这类指令包括加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)等,它们用于执行基本的算术运算。例如,ADD指令可以将两个数值相加,并将结果存储在一个指定的位置。 2. 移位指令:如左移(SHL...
1. 数据处理指令:这类指令用于进行算术和逻辑运算,如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)、位操作(AND、OR、XOR、NOT)等。这些指令直接操作寄存器或内存中的数据,实现基本的算术和逻辑运算。 ...
数据处理指令用于进行算术运算和逻辑运算,如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)以及位操作(AND、OR、XOR、NOT)。转移指令则负责改变程序的执行流程,例如无条件跳转(JMP)、条件跳转(JE、JNE...
1. 数据处理指令:这类指令主要用于处理数据,如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)等。它们能够执行基本的算术运算,并且可以影响程序状态字(PSW)中的标志位,例如进位标志(C),零标志(Z)等...
二进制除法指令 DIV、IDIV指令 十进制算术运算 非压缩BCD码调整指令AAA、AAS、AAM、AAD 压缩BCD码调整指令DAA、DAS 位 运算 指令 逻辑运算指令 AND、OR、XOR指令 NOT、TEST指令 移位指令...
总的来说,理解和实现64位对32位的汇编除法是一项挑战,但也是对计算机底层工作原理的深入学习。这种技能在嵌入式系统开发、操作系统内核编程或者任何需要高效算术运算的场景中都极为重要。通过熟练掌握汇编语言,...
3. **除法指令**:x86汇编提供了一些专门的除法指令,如`DIV`和`IDIV`。`DIV`用于无符号除法,`IDIV`用于有符号除法。执行这些指令后,商存储在特定寄存器中,余数则存储在另一个寄存器。 4. **溢出和错误处理**:...
* DIV:无符号除法 * IDIV:整数除法 * AAD:除法的 ASCII 码调整 * CBW:字节转换为字 * CWD:字转换为双字 * CWDE:字转换为双字 * CDQ:双字扩展 三、逻辑运算指令: 逻辑运算指令用于执行逻辑运算操作。常见的...
1. 数据处理指令:这类指令主要负责对寄存器或内存中的数据进行算术运算和逻辑运算,如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)、与运算(AND)、或运算(OR)、异或运算(XOR)和非运算(NOT)等。...
1. 数据处理指令:这类指令主要用于执行基本的算术和逻辑运算,例如加法(ADD)、减法(SUB)、乘法(MUL)、除法(DIV)以及位操作(AND、OR、XOR、NOT)。这些指令在处理数值计算和逻辑判断时起到关键作用。 2. ...
乘法和除法指令用于处理较大数值的算术运算。MIPS处理器中有一个特殊的硬件乘法器,它将乘法结果分成64位存储在两个寄存器(LO和HI)中。例如,`MULT RS, RT` 指令计算RS和RT的乘积,并将结果存放在LO和HI中。 ####...
- `MUL`和`DIV`:分别进行乘法和除法运算,通常涉及溢出检查。 2. **控制流程指令**: - `JMP`:无条件跳转,可以实现程序的分支。 - `JE`,`JNE`,`JG`,`JL`等:条件跳转指令,根据标志寄存器中的状态来决定...
- **DIV/IDIV**:无符号除法/有符号除法指令。 这些指令的结果通常存储在特定的寄存器对中,例如,乘法和除法的结果通常存储在AX/DX或EAX/EDX中。 #### 逻辑运算指令 逻辑运算指令用于执行诸如与、或、异或等逻辑...
AAD指令用于在除法指令前对AX中的两个未组合十进制数进行调整,以便能用DIV指令实现两个未组合的十进制数的除法运算,结果为未组合的十进制数,商放在AL中,余数放在AH中。 3.AAM未组合十进制数乘法调整指令 AAM...
而更复杂的乘法和除法则分别由`MUL`和`DIV`指令完成。 ### 4. 逻辑运算指令 逻辑运算指令处理二进制位的逻辑操作,如AND、OR、NOT、XOR等。这些指令常用于位操作、条件判断等场景,是实现复杂算法和逻辑控制的基础...
5. **DIV(除法)**:执行除法运算,AX寄存器中的数值被CX或BX寄存器中的数值除,商存储在AL或AX中,余数存储在AH或DX中。 6. **JMP(跳转)**:控制程序流程,如 `JNE Label` 如果条件不满足则跳转到Label指定的...
* 除法指令: + DIV:无符号除法。 + IDIV:整数除法。 + AAD:除法的 ASCII 码调整。 + CBW:字节转换为字。 + CWD:字转换为双字。 + CWDE:字转换为双字。 + CDQ:双字扩展。 六、逻辑运算指令 逻辑运算...
1. 数据处理指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等,用于处理寄存器或内存中的数据。 2. 控制流程指令:如JMP(跳转)、CALL(调用)、RET(返回)、CMP(比较)等,用于改变程序的执行...