0

有谁知道如何在一个程序中为 8 位/16 位操作数执行所有四种数学运算(乘法、除法、减法和加法)。我最多可以使用 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
4

1 回答 1

1

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

如果您不想只使用寄存器,您仍然可以使用ECXESIEDIEBP(以及特殊情况下的ESP),同时最终使用EAXEDXEBX作为所需操作的输入和输出。

例如,如果您想在按顺序执行所有四个操作后获得所有操作的结果,您可以将EAX + EBX存储在ECX中,EAX - EBX存储在EBP中,EAX x EBX存储在ESI:EDI中,并简单地将EAX / EBX保留在EDX 中: EAX

无论如何,内存是为了存储数据而存在的,所以我建议坚持使用它。

于 2013-04-13T17:26:42.020 回答