如何在x86程序集中添加或减去非常大的数字?
例如输入:
第一行:最大 20位数字的
第二行:+/-
第三行:最大值 20位数字
当用户退出编程时,这些行会重复。
有人有什么想法吗?
谢谢!
ADC(加进位)指令是您的朋友。此操作对于任何汇编程序都是相同的:
进位标志将指示加法是否溢出。
对于减法,请先取反第二个操作数。
编辑:您要求一个示例。这是一些80386代码(可能很可怕),将2个双字加在一起。警告:20年来我还没有写过汇编语言。
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
clc ; clear carry flag
mov ecx, len ;calculation length in ecx
mov esi, 0 ; esi is index register into array of longwords
myLoop:
mov eax, [operand1+esi*4] ; move operand1 into register A
adc eax, [operand2+esi*4] ; add with carry operand 2 into register A
mov [result+esi*4], eax ; store register a into result
inc esi ; increment index
loop myLoop ; decrement count of words to do and jump if not zero
; at this point the answer will be in result...result+7, low order words first
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
operand1 dd 0,10 ;low order words first. value = 10 * 4.2bn
operand2 dd 0,20 ; low order words first. value = 20 * 4.2bn
result dd 0,0
len equ ($ - result)/4 ;number of words in each operand
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句