小编Mac*_*ack的帖子

使用 IMUL 指令将数组中的值相乘会产生不正确的值

我正在学习 ASM 语言并在 Ubuntu Eclipse C++ 上尝试 IMUL 函数,但由于某种原因,我似乎无法从我的代码中获得所需的输出。

必需的:

将整数数组 int_array 的负元素乘以指定的整数 inum

这是我上面的代码:

代码:

#include <stdio.h>
extern void multiply_function();

// Variables
int iaver, inum;
int int_ar[10] = {1,2,3,4,-9,6,7,8,9,10};

int main()
{
    inum = 2;
    multiply_function();    
    for(int i=0; i<10; i++){
        printf("%d ",int_ar[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

ASM 代码:

extern int_ar
extern inum
global multiply_function

multiply_function:

    enter 0,0
    mov ecx, 10
    mov eax, inum

multiply_loop:
    cmp [int_ar +ecx*4-4], dword 0 
    jg .ifpositive 
    mov ebx, [int_ar +ecx*4-4]
    imul ebx
    cdq
    mov [int_ar +ecx*4-4], …
Run Code Online (Sandbox Code Playgroud)

c ubuntu x86 assembly gcc

4
推荐指数
1
解决办法
712
查看次数

如何使算法在Java中的集合中查找重复对象的效率更高?

我声明了一个PersonDetails具有以下三个属性的对象:

long id; 
String residence;
Run Code Online (Sandbox Code Playgroud)

然后,我有一个全部填充ArrayListPersonDetails对象:

List<PersonDetails> personDetailsList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我需要遍历此列表,以PersonDetails通过匹配其residence属性来找出重复项。

Id  |   Residence
 1  |     a       
 2  |     b      
 3  |     a       
 4  |     a       
 5  |     b       
 6  |     c     
 7  |     c      
 8  |     d      
Run Code Online (Sandbox Code Playgroud)

我为完成此操作而创建的代码/算法如下,并使用nested for loop,这实际上效率很低:

List<PersonDetails> personDetailsList = new ArrayList<>();
for (int i = 0; i <= personDetailsList.size() - 1; i++) {

    long personId = personDetailsList.get(i)
            .getId();
    String personResidence = personDetailsList.get(i)
            .getResidence(); …
Run Code Online (Sandbox Code Playgroud)

java collections performance arraylist duplicates

0
推荐指数
1
解决办法
84
查看次数

标签 统计

arraylist ×1

assembly ×1

c ×1

collections ×1

duplicates ×1

gcc ×1

java ×1

performance ×1

ubuntu ×1

x86 ×1