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