Skip to content

Commit 368910e

Browse files
committed
+ todo array menos swap
1 parent c06ed1f commit 368910e

File tree

6 files changed

+200
-132
lines changed

6 files changed

+200
-132
lines changed

.gdb_history

+13-112
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,50 @@
1-
b lib.asm:300
1+
b lib.asm:386
22
r
3-
q
4-
c
5-
q
6-
b lib.asm:arrayAddlast
7-
b lib.asm:335
8-
n
9-
r
10-
n
11-
n
123
n
134
n
145
n
15-
r9b
16-
x/1bh r9b
17-
x/1bh $r9b
18-
x/1bh $rdi
19-
x/1bh $rdi+5
20-
n
21-
n
226
n
237
n
8+
x/1bd $rdi
9+
x/1bd ($rdi)+4
2410
q
25-
b lib.asm:335
26-
n
11+
b lib.asm:358
2712
r
2813
n
2914
n
3015
n
3116
n
17+
x/8bd $rbx
18+
x/16bd $rbx
3219
n
3320
n
3421
n
3522
n
3623
n
24+
x/16bd $rbx
3725
n
3826
n
3927
n
4028
n
4129
n
4230
n
4331
n
44-
q
45-
b lib.asm:364
46-
r
47-
q
48-
q
49-
b lib.asm:304
50-
r
5132
n
52-
q
53-
b lib.asm:304
54-
r
55-
q
56-
b lib.asm:304
57-
r
5833
n
59-
q
60-
b lib.asm:304
6134
n
62-
r
35+
x/16bd $rbx
36+
x/1bd ($r15+4)
6337
n
6438
n
65-
q
66-
b lib.asm:304
67-
r
68-
q
69-
b lib.asm:282
70-
r
71-
n
72-
n
73-
n
74-
n
75-
n
76-
n
77-
n
78-
q
79-
b lib.asm:300
80-
r
81-
q
82-
b lib.asm:285
83-
r
84-
n
8539
n
8640
n
8741
n
8842
n
43+
x/8bd ($rbx+$r9)
44+
x/8bd ($rax)
8945
n
46+
x/8bd ($rbx+$r9)
47+
x/16bd ($rbx)
9048
q
91-
b lib.asm:300
92-
r
93-
n
94-
n
9549
q
96-
b 300
97-
clean
98-
clear
9950
q
100-
b lib.asm:298
101-
r
102-
n
103-
n
104-
n
105-
q
106-
b 291
107-
b lib.asm:291
108-
r
109-
n
110-
n
111-
n
112-
n
113-
n
114-
n
115-
b lib.asm:291
116-
n
117-
r
118-
n
119-
n
120-
n
121-
n
122-
n
123-
n
124-
q
125-
b lib.asm:298
126-
r
127-
q
128-
b lib.asm:298
129-
r
130-
n
131-
n
132-
q
133-
r
134-
q
135-
b lib.asm:298
136-
r
137-
n
138-
n
139-
n
140-
q
141-
b lib.asm:291
142-
n
143-
r
144-
n
145-
n
146-
n
147-
n
148-
n
149-
n

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
✖ void cardDelete(card_t* c)(11 Inst.)
2929
void cardPrint(card_t* c, FILE* pFile)(24 Inst.) FALTA
3030
### jueves 14 - viernes 15
31-
array_t* arrayNew(type_t t, uint8_t capacity)(24 Inst.) FALTA
31+
array_t* arrayNew(type_t t, uint8_t capacity)(24 Inst.) FALTA
3232
uint8_t arrayGetSize(array_t* a)(3 Inst.) FALTA
3333
void arrayAddLast(array_t* a, void* data)(20 Inst.) FALTA
3434
void* arrayGet(array_t* a, uint8_t i)(8 Inst.) FALTA
@@ -40,9 +40,9 @@
4040
✖ uint8_t listGetSize(list_t* l)(2 Inst.)
4141
✖ void listAddFirst(list_t* l, void* data)(27 Inst.)
4242
✖ void* listGet(list_t* l, uint8_t i)(13 Inst.)
43-
void* listRemove(list_t* l, uint8_t i)(37 Inst.)
44-
void listSwap(list_t* l, uint8_t i, uint8_t j)(24 Inst.)
45-
void listDelete(list_t* l)(28 Inst.)
43+
void* listRemove(list_t* l, uint8_t i)(37 Inst.)
44+
void listSwap(list_t* l, uint8_t i, uint8_t j)(24 Inst.)
45+
void listDelete(list_t* l)(28 Inst.)
4646
y
4747
void arrayPrint(array_t* a, FILE* pFile)(8 L ́ıneas) FALTA
4848
void listAddLast(list_t* l, void* data)(11 L ́ıneas)

lib.asm

+113-7
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ intCmp:
5454

5555
MOV EBX, [RDI]
5656
CMP EBX, [RSI]
57-
JZ cero
57+
JZ cero
5858
JG menosUno
5959
MOV EAX, 1
6060
JMP fin
@@ -360,16 +360,16 @@ arrayAddLast:
360360
call rax; ya esta clonado el valor y tengo su puntero en RAX
361361
; resta agregarlo a la posicion size desde [r15+8]
362362
mov rbx, [r15+8]
363-
mov r9, 0
363+
mov rcx, 0
364364

365365
.ciclo:
366-
cmp r9b, byte [r15+4]
366+
cmp cl, byte [r15+4]
367367
je .addN
368-
inc r9
368+
inc cl
369369
jmp .ciclo
370370

371371
.addN:
372-
mov [rbx+r9], rax
372+
mov [rbx+rcx*8], rax
373373
inc byte [r15+4]
374374

375375

@@ -384,21 +384,127 @@ ret
384384

385385
; void* arrayGet(array_t* a, uint8_t i)
386386
arrayGet:
387+
push rbp
388+
mov rbp, rsp
389+
390+
mov r8, rsi
391+
cmp byte [rdi+4],r8b
392+
jle .retCero
393+
394+
mov r9, [rdi+8]
395+
;tengo en r9 el puntero al arreglo
396+
mov rax, [r9+rsi*8]
397+
jmp .fin
398+
399+
.retCero:
400+
mov rax,0
401+
402+
.fin:
403+
pop rbp
404+
387405
ret
388406

389407
; void* arrayRemove(array_t* a, uint8_t i)
390408
arrayRemove:
391409
ret
392410

393411
; void arraySwap(array_t* a, uint8_t i, uint8_t j)
394-
arraySwap:
412+
arraySwap:
413+
push rbp
414+
mov rbp, rsp
415+
push r12
416+
push r13
417+
push r14
418+
push r15
419+
420+
mov r10, rsi; muevo i solo para hacer la comparacion con la parte baja porque no se si rsi la tiene
421+
cmp r10b, byte [rdi+4]
422+
jge .fin
423+
cmp dl, byte [rdi+4]
424+
jge .fin
425+
426+
cmp dl, 0 ; por debajo?
427+
jl .fin
428+
429+
cmp r10b, 0
430+
jl .fin
431+
432+
; en rdi esta el puntero a la estructura
433+
mov r15, rdi
434+
mov r12, rsi
435+
mov r13, rdx
436+
437+
call arrayGet
438+
; en rax tengo el puntero al iesimo valor
439+
mov r14, rax ; en r14 puntero al iesimo
440+
mov rdi, r15
441+
mov rsi, r13
442+
call arrayGet
443+
; en rax tengo el puntero al jesimo valor
444+
mov r9, rax; en r9 puntero al jesimo
445+
446+
mov r15, [r15+8] ; guardo en r15 el puntero al arreglo
447+
mov [r15+r12*8], r9
448+
mov [r15+r13*8], r14
449+
450+
.fin:
451+
452+
pop r15
453+
pop r14
454+
pop r13
455+
pop r12
456+
pop rbp
395457
ret
396458

397459
; void arrayDelete(array_t* a)
398460
arrayDelete:
461+
push rbp
462+
mov rbp, rsp
463+
push r13
464+
push r12
465+
;a en rdi
466+
467+
mov r13, rdi ;preservo a
468+
469+
mov rdi, [rdi] ;obtengo el tipo
470+
call getDeleteFunction ;obtengo la funcion q borra al tipo
471+
mov r12, rax ;la preservo
472+
473+
474+
475+
mov r9, [r13+8] ;obtengo el puntero al arreglo de punteros
476+
mov r14b, byte [r13+4] ;obtengo el size
477+
dec r14 ;lo hago valido para recorrer
478+
479+
480+
481+
482+
mov rcx, 0 ;inicio contador
483+
.ciclo:
484+
cmp cl, r14b ;comparo el contador contra posiciones validas
485+
JG .fin ;de no ser asi, finaliza
486+
487+
lea rdi, [r9+rcx*8]
488+
mov rdi, [rdi] ;paso a rdi el puntero al valor
489+
call r12 ;lo limpio
490+
491+
492+
inc cl ;inc el contador
493+
jmp .ciclo ;loop
494+
495+
.fin:
496+
mov rdi, [r13+8] ;limpio el puntero al arreglo de punteros
497+
call free
498+
499+
mov rdi, r13 ;limpio la estructura
500+
call free
501+
502+
pop r12
503+
pop r13
504+
pop rbp
399505
ret
400506

401-
; ** Lista **
507+
; ** Lista **
402508

403509
; list_t* listNew(type_t t)
404510
listNew:

lib_asm.o

528 Bytes
Binary file not shown.

main

784 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)