同一汇编语言程序中的乘法,除法,减法和加法

时间:2013-02-25 14:37:01

标签: assembly x86 nasm

有谁知道如何在8个BIT / 16 BIT操作数的单个程序中执行所有四个数学运算(乘法,除法,减法和加法)。我能够使用AL,BL,CL,DL寄存器执行最多三个程序,但我无法理解之后应该在哪里存储值,因为DIV,MUL操作都需要AL。

如果有人能够提出一个简单的程序或逻辑,那么所有的努力都将受到赞赏。

代码:

;================== Header ==================
; File:         all.asm
; Author:       Anurag Shukla
; Date:         25/02/2013
;================== Directives ==================

[BITS 16H]
[ORG 100H]

;================== Code Segment ==================
[SECTION .text]

mov al,0
mov bl,0
mov cl,0
mov dl,0
mov si,0
mov di,0
;================== Addition 
mov bp, 10H
add bp, [NUMADD]
daa

mov di, 20H
sub di, [NUMSUB]
das

mov al, 10H
mov bl, 10H
mul bl
mov [RMUL],al
mov dl,[RMUL]

mov al, 10H
mov bl, 2H
div bl


int3


[SECTION .DATA]

NUMADD: DB 10H
NUMSUB: DB 10H
RSUB: DB 0H
RSUM: DB 0H
RMUL: DB 0H
RDIV: DB 0H

1 个答案:

答案 0 :(得分:1)

您可以将中间结果保存在堆栈或某种缓冲区中。

如果你只是为了使用寄存器而死,你仍然有 ECX ESI EDI EBP (以及 ESP 在特殊情况下)最终使用 EAX EDX EBX 作为输入和输出期望的操作。

例如,如果您希望在按顺序执行后执行所有四个操作的结果,则可以将 EAX + EBX 存储在 ECX EAX中 - EBP 中的EBX ESI:EDI 中的 EAX x EBX ,只需保留 EAX / EBX EDX:EAX

无论如何,内存是为了存储数据,所以我建议坚持下去。