Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 同一汇编语言程序中的乘法、除法、减法和加法_Assembly_X86_Nasm - Fatal编程技术网

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

Assembly 同一汇编语言程序中的乘法、除法、减法和加法,assembly,x86,nasm,Assembly,X86,Nasm,有人知道如何在一个程序中对8位/16位操作数执行所有四个数学运算(乘法、除法、减法和加法)。我可以使用AL、BL、CL、DL寄存器执行最多三个程序,但我无法理解以后应该将值存储在哪里,因为DIV、MUL操作都需要AL 如果任何人至少能提出一个简单的程序或逻辑,我们将感谢所有的努力 代码: 您可以将中间结果保存在堆栈或某种缓冲区中 如果您死后只使用寄存器,您仍然有ECX、ESI、EDI和EBP(以及特殊情况下的ESP),同时最终使用EAX、EDX和EBX作为所需操作的输入和输出 例如,如果您希望在

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

如果任何人至少能提出一个简单的程序或逻辑,我们将感谢所有的努力

代码:


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

如果您死后只使用寄存器,您仍然有ECX、ESI、EDI和EBP(以及特殊情况下的ESP),同时最终使用EAX、EDX和EBX作为所需操作的输入和输出

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


不管怎样,内存是用来存储数据的,所以我建议坚持使用它。

发布到目前为止的内容检查更新的查询??????那么,有什么问题吗?如果备用寄存器用完,则始终可以在数据段中使用更多变量。您也可以使用堆栈来保存中间结果。谢谢您的建议,但我确实希望直接使用寄存器。我知道我总是可以在数据段中存储输出,但这次我想在regs中。
;================== 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