如何将ASCII字符串按升序存储到数组中

时间:2013-10-14 17:33:17

标签: arrays assembly ascii

我试图接受一串逗号分隔的ASCII数字将它们转换为半字。然后将它们按升序排列。我知道如何获得半字,但问题是升序。由于我的方式让它读取一个char然后如果它不是null或逗号它将数字存储在一个变量中然后一旦它到达一个逗号它将两个ASCII数字组合成一个半字(除非只有一个数字)。我猜我会在那之后将它存储在数组中,但我不知道如何知道它放在哪里。这是在议会。

编辑: 这是我的所有转换代码。最后,如果没有找到重复,则转到loop_end1,然后将其添加到数组中(这是我需要添加升序内容的地方)。如果找到重复,则转到loop_end2,因此不将其放入数组中。一旦达到null就完成了,这意味着字符串的结束。在完成所有操作时,它会从字符串中的元素数量中减去数组中的元素数量,以查找消除的元素数量。谢谢你的帮助

L1:
mov a1, addrs  #move the first char of string into 'a1'                                                                                                
sb fc, a1      #store the char in fc
cmp fc,0       #is the char null?
je done        #if the char is null, youre done
jne L2         #if the char is not null goto L2

L2:         
cmp fc,2C  #is the char a comma?
jne L3 
inc addrs
sub dige,dige,dige  #make dige 0, the complicated way
jal L5     #comma has been found put the previous numbers in array

L3:
    sub fc, fc,48  #turn to decimal from ASCII
    cmp dige,1     #is this the second or first 
    jne L4
    lb sd          #holds second digit
    sb sd,fc
    add dige,dige,1 
    jal L1

L4:    
    lb fd     #holds first digit
    sb fd,fc
    inc addrs
    add dige,dige,1
L5: 
    cmp dige,2
    jne L6
    mov $t0,fd
    sll fd,3       #this multipies the first digit by 2^3 (8). now add 2 more
    add fd,fd,$t0
    add fd,fd,$t0  #in total multiplies by 10 because fd*8+fd+fd=fd*10 
    add $t1,fd,sd
    lh hw          #holds halfword of number
    sb hw,$t1   
    mov ecx,0
    jal loop_start

L6:
     lh hw
     sb hw,fd
     mov ecx,0  #inc counter to compare to array length

loop_start: 
    cmp ecx, ARRAY_LENGTH #does ecx equal the number of elem?
    jge loop_end1
    cmp hw,Array1[ecx*8]
    add ecx,1 
    je loop_end2
    jal loop_start 

loop_end1:  
    mov [addra1],hw
    add count,1
    inc addra1
    jal L1

loop_end2:  
    add count,1
    jal L1

done:
sub count,count,ARRAY_LENGTH  #subtracts array length from count to find number of elements eliminated          

0 个答案:

没有答案