restar

By jrcp_kun

Paragon (1410)

jrcp_kun's picture

25-10-2015, 00:18

como puedo hacer mas simplificado restar y sumar a hl cualquier cantidad?? que sea por ejemplo 40 o 75 .
(osea como hacer inc hl o dec hl las veces necesarias)
gracias

Login or register to post comments

By FX

Champion (264)

FX's picture

25-10-2015, 00:24

Hola jrcp:
Simplemente: SBC HL, 75
Mas simplificado imposible.... jejejeje
FX

By Guillian

Prophet (3230)

Guillian's picture

25-10-2015, 08:46

Como dice FX puedes usar la instrucción SBC (aunque tendrás que cargar el sustraendo en un registro de 16 bits, no se puede hacer directamente) o sumarle con ADD un número negativo.
Atento al carry flag cuando hagas un SBC o ADC.

ld bc, 34
sbc hl,bc

ld bc,-34
add hl,bc

By jrcp_kun

Paragon (1410)

jrcp_kun's picture

25-10-2015, 10:07

Fx eso ya lo habia probado y no funcionaba jajaja.
Gracias manu

By samsaga2

Resident (52)

samsaga2's picture

27-10-2015, 16:44

No te olvides de limpiar el carry antes de hacer un sbc. Para sumar tienes add y adc pero para restar dispones únicamente de sbc.

ld hl,100
ld bc,100
or a
sbc hl,bc

By dioniso

Champion (474)

dioniso's picture

27-10-2015, 18:19

Hola.

Lo bonito del ensamblador es practicar y probar cosas. Incluso hacer tus propios experimentos. Es algo muy bonito.

Para restar hay varias soluciones, no sólo SBC. También tienes ADD, etc... Pero claro, tienes que negar el valor (sumar el valor pero en negativo).

-Para restar $200, por ejemplo, a HL, que tiene el valor... $500, por ejemplo:

ld hl,$500
ld de,-$200
add hl,de

-Para sumar a HL un valor entre 0 y 255 puedes hacer esto también:

ld hl,$4000
ld a,$FA
adc a,l
ld l,a
jr nc,$+3 ;si no hay CARRY nos saltamos el "inc h"
inc h ; incrementamos H porque L ha superado el valor de 255

A disfrutar del ensamblador.

By dioniso

Champion (474)

dioniso's picture

27-10-2015, 19:28

Acabo de ver que Guillian ya había comentado lo de sumar el valor negativo Big smile

By jrcp_kun

Paragon (1410)

jrcp_kun's picture

27-10-2015, 21:59

Gracias dionisio y demas

By FX

Champion (264)

FX's picture

30-10-2015, 21:55

Guillian wrote:

Como dice FX puedes usar la instrucción SBC (aunque tendrás que cargar el sustraendo en un registro de 16 bits, no se puede hacer directamente) o sumarle con ADD un número negativo.
Atento al carry flag cuando hagas un SBC o ADC.

ld bc, 34
sbc hl,bc

ld bc,-34
add hl,bc

Gracias Guillian por la corrección. Lo puse rápido y me olvidé que en 16 bits era distinto. Ya se lo comenté por privado también.
No me había acordado también en lo de "sumar" un negativo. Es una opción muy "limpia" que la utilicé alguna vez.
Un saludo a todos
FX