汇编语言实现四则运算

  • Post author:
  • Post category:其他


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



版权声明:本文为qq_45632851原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。