有谁知道如何在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
答案 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
无论如何,内存是为了存储数据,所以我建议坚持下去。