我是汇编的新手,试图解决算术问题。你如何在汇编中添加,sub,穆尔,或div?更可取的是想要一个例子,所有的机会和int 21h是什么意思?
section .bss
num resb 2
number resb 2
product resb 2
section .text
global _start
_start:
mov eax,3
mov ebx,0
mov ecx,num
mov edx,2
int 80h
mov eax,3
mov ebx,0
mov ecx,number
mov edx,2
int 80h
mov al, [num]
mov bl, [number]
mul bl
mov [product], ax
mov eax,4
mov ebx,1
mov ecx,product
mov edx,2
int 80h
mov eax,1
mov ebx,0
int 80h;
1条答案
按热度按时间bkhjykvo1#
你的数据大小看起来很混乱。你用
word
指令做所有的事情,也就是16位,但是你所有的实际值都是单字节的。与高级语言不同,你不能指定一个变量的类型,然后假设所有的操作都会自动遵守该类型。你必须在每个示例中为该类型编写正确的指令。对于具有一个寄存器和一个存储器操作数的指令,数据大小是从寄存器的大小推断的,例如al
是8位,而ax
是16位。原则上,您可以将缓冲区
num1
视为16位值,其中高位字节是空格字符,但更简单的方法是只使用实际包含数字的字节,而忽略包含空格的字节。编写加载值并执行乘法的部分的更正确的方法如下:
没有必要将中间结果以
answer1
的形式存储回内存。寄存器比内存访问更快、更有效,您可以也应该尽可能将数据保存在寄存器中,只有在真正需要时才写入内存。这里还可以进行其他优化,但为了使代码更易于理解,我将它们省略了。