英特尔8086组件:加/减数量非常大?

变得

如何在x86程序集中添加或减去非常大的数字?

例如输入:

第一行:最大 20位数字的
第二行:+/-
第三行:最大值 20位数字

当用户退出编程时,这些行会重复。

有人有什么想法吗?

谢谢!

理查德·霍奇斯

ADC(加进位)指令是您的朋友。此操作对于任何汇编程序都是相同的:

  1. 清除进位
  2. 指向大操作数1的第一个单词
  3. 指向大操作数2的第一个单词
  4. 指向结果字
  5. 循环获取操作数中的单词数:
  6. 在每个操作数的当前字上使用ADC,将结果存储在结果中
  7. 将所有指针增加一个字。

进位标志将指示加法是否溢出。

对于减法,请先取反第二个操作数。

编辑:您要求一个示例。这是一些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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

英特尔8086的数字基数转换

来自分类Dev

英特尔8086 RD信号

来自分类Dev

英特尔x86_64组件,如何在x87和SSE2之间移动?(计算双数的反正切)

来自分类Dev

英特尔8086 TASM-非法号码

来自分类Dev

英特尔8086 CPU的堆栈底部在哪里?

来自分类Dev

英特尔8086 TASM-非法号码

来自分类Dev

在英特尔编程?

来自分类Dev

英特尔芯片组-GPIO编程

来自分类Dev

英特尔处理器上的浮点组件

来自分类Dev

内存传输英特尔组件AT&T

来自分类Dev

内存传输英特尔组件AT&T

来自分类Dev

英特尔Edison模块

来自分类Dev

英特尔XDK + jsPDF

来自分类Dev

英特尔SSD术语

来自分类Dev

英特尔Nextbook降级

来自分类Dev

英特尔XDK信息

来自分类Dev

推入全栈8086组件

来自分类Dev

英特尔x86组装-读取和复制进位标志

来自分类Dev

在英特尔的Z87芯片组上构建降级的RAID 1?

来自分类Dev

英特尔芯片组Q75支持GTX 960吗?

来自分类Dev

“英特尔图形”如何在微处理器和芯片组之间划分?

来自分类Dev

将三星 EVO 980 从英特尔更换为 AMD 芯片组

来自分类Dev

在英特尔 FPGA 上如何安排 OpenCL 工作组?

来自分类Dev

Ubuntu 18.04.3 不支持英特尔公司设备 [8086:0d4f]

来自分类Dev

FASM是否使用英特尔语法?

来自分类Dev

英特尔OpenMP安装问题

来自分类Dev

英特尔Galileo裸机UART

来自分类Dev

英特尔Fortran值属性

来自分类Dev

英特尔XDK中的同源策略