32位加32位部分代码:
MOV AX, A ;将A的值放入AX寄存器
ADD AX, B ;将B的值和AX中的值相加
MOV C, AX ;将AX中的值赋给C
MOV AX, A+2 ;将A+2的值放入AX中
ADC AX, B+2 ;将B+2的值与AX的值相加并放入AX
MOV C+2, AX ;将AX的值放入C的左移两位的位置
A A+2 B B+2
32位减32位部分代码
MOV AX, AD ;与加法类似
SUB AX, BD
MOV CD, AX
MOV AX, AD+2
SBB AX, BD+2
MOV CD+2, AX ;
32 位模式下,MUL(无符号数乘法)指令有三种类型:
- 第一种执行 8 位操作数与 AL 寄存器的乘法;
- 第二种执行 16 位操作数与 AX 寄存器的乘法;
- 第三种执行 32 位操作数与 EAX 寄存器的乘法。
例如,当 AX 乘以一个 16 位操作数时,乘积存放在 DX 和 AX 寄存器对中。其中,乘积的高 16 位存放在 DX,低 16 位存放在 AX
当十六位乘以十六位时
部分代码:
MOV AX, A1 ;将A1的值放入AX寄存器
MUL B1 ;将B1与A1相乘,低位放入AX,高位放入DX
MOV C1, AX ;将低位的AX的值给C1的低位部分
MOV C1+2, DX ;将高位的DX部分给C1的高位部分。C1是十六位的
32 位模式下,DIV(无符号除法)指令执行 8 位、16 位和 32 位无符号数除法。其中,单寄存器或内存操作数是除数。格式如下:
DIV reg/mem8
DIV reg/meml6
DIV reg/mem32
32位除以16位部分代码:
MOV AX, A2 ;将A2的低位部分放入AX寄存器中
MOV DX, A2+2 ;将A2的高位部分放入DX寄存器中
DIV B2 ;A2除以B2
MOV C2, AX ;将商放入AX中
MOV C2+2,DX ;将余数放入DX中
完整代码:
DATA SEGMENT
A DW 1234H, 1234H ;被加数
B DW 2345H, 3456H ;加数
C DW 2 DUP (0) ;预留和
AD DW 4567H, 5678H ;被减数
BD DW 1234H, 2345H ;减数
CD DW 2 DUP (0) ;预留差
A1 DW 6789H ;被乘数
B1 DW 0012H ;乘数
C1 DW 2 DUP (0) ;预留积
A2 DW 5678H, 0234H ;被除数
B2 DW 0F234H ;除数
C2 DW 2 DUP (0) ;预留商,余数
DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP()
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START PROC FAR
PUSH DS
MOV AX, 0 ;标准序
PUSH AX
MOV AX, DATA
MOV DS, AX ;初始化DS
MOV AX, A
ADD AX, B
MOV C, AX
MOV AX, A+2 ;32位加32位
ADC AX, B+2
MOV C+2, AX
MOV AX, AD
SUB AX, BD
MOV CD, AX
MOV AX, AD+2
SBB AX, BD+2
MOV CD+2, AX ;32位减32位
MOV AX, A1
MUL B1
MOV C1, AX
MOV C1+2, DX ;16位乘以16位
MOV AX, A2
MOV DX, A2+2
DIV B2
MOV C2, AX
MOV C2+2,DX ; 32位除以16位
RET
START ENDP
CODE ENDS
END START