нужно uInt32.toString() на асме

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby DimkaM » 25 Dec 2011, 14:02

Есть сабж у кого может?
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby deathsoft » 25 Dec 2011, 14:24

DimkaM wrote:Есть сабж у кого может?

У савелия наверняка есть, фатал то числа печатает.
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby lvd » 25 Dec 2011, 14:26

А шо таково сложного поделить на 10 с остатком? Ну до, 32 бита, а и чо?
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7226
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby DimkaM » 25 Dec 2011, 16:03

lvd wrote:шо таково сложного поделить

Ща другим занят, хотел паралельно халяву поиметь, чтоб потом время на велосипед не терять.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby fk0 » 25 Dec 2011, 19:19

Бля, printf. За асм -- сжигать.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 25 Dec 2011, 20:07

fk0 wrote:printf

дохера места сжирает, ежли с иара выдёргивать.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby TS-Labs » 25 Dec 2011, 22:06

фк0: объясни чем плохи асмовые вставки на сях? Я например чотко вижу что придется пилить множество риалтаймовых процедур на асме. Я не понимаю что в этом плохого?
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby lvd » 25 Dec 2011, 23:02

Вот процедура деления:
Code: Select all
FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

From: Kirill Frolov <fk0@fk0.pp.ru>

Hемедленно нажми на RESET, All!

В неоднократно публиковавшемся здесь алгоритме 32-битного деления
обнаружена серьёзная ошибка!

=== cut here ===

ifused ldiv
ifndef ldiv
; Беззнаковое 32-разрядное деление
; функция состоит из двух частей:
; 1. 32-разрядное делимое и 16-разрядный
; делитель.
; 2. 32-раздядное делимое и 32-разрядный
; делитель.
; hl'hl = hl'hl / de'de
; de'de = hl'hl % de'de
ldiv
push hl
xor a
ld l, a
ld h, a
sub e
ld e, a
sbc a, d
sub e
ld d, a
exx

=== cut here ===

Это начальные строки ОШИБОЧHОЙ ПРОГРАММЫ.
Для устранения ошибки их следует ЗАМЕHИТЬ на следующие:

ldiv
push hl
xor a
ld l, a
ld h, a
sub e
ld e, a
+ ld a, h ; a=0. -- эта строка добавлена
sbc a, d
ld d, a
exx


Ошибка была обнаружена lvd. Задаётся вопрос об авторстве:
автороство, по видимости, коллективное, по результатам переписки
в телеконференциях, иначе я обычно указываю откуда взято.

Полный текст функции выглядит следующим образом:

ifused ldiv
ifndef ldiv
; версия от 2006-12-18T15:11:28+0300
; Беззнаковое 32-разрядное деление
; функция состоит из двух частей:
; 1. 32-разрядное делимое и 16-разрядный
; делитель.
; 2. 32-раздядное делимое и 32-разрядный
; делитель.
; hl'hl = hl'hl / de'de
; de'de = hl'hl % de'de
ldiv
push hl
xor a
ld l, a
ld h, a
sub e
ld e, a
ld a, h
sbc a, d
ld d, a
exx
pop bc
ld a, 0
sbc a, e
ld e, a
sbc a, d ; de'de=0-divisor
sub e
ld d, a
and e
inc a ; Z=short divisor
push hl
ld hl, 0 ; hl'hl=reminder
exx
pop bc
ld a, b ; a,c,bc'=divident

jr nz, ldiv_long


; divisor = -00de
ld b, 8
rla
ldivs0
rl l
add hl, de
jr c, ldivs1
sbc hl, de
ldivs1 rla
djnz ldivs0

ld b, c
ld c, a
ld a, b
ld b, 8
rla
ldivs2
adc hl, hl
add hl, de
jr c, ldivs3
sbc hl, de
ldivs3 rla
djnz ldivs2
jr ldiv_long1


; divisor=-de'de
ldiv_long
call ldiv_8
ld b, c
ld c, a
ld a, b
call ldiv_8
ldiv_long1
exx
exa
ld a, b
exa
ld b, a
exa
exx
call ldiv_8
exx
exa
ld a, c
exa
ld c, a
exa
exx
call ldiv_8

; result=c,bc',a -> hl'hl
; reminder=hl'hl -> de'de

ex de, hl
ld l, a
ld a, c
exx
ex de, hl
ld h, a
ld l, b
ld a, c
exx
ld h, a
ret


; hl'hl=reminder
; de'de=divisor
; a=divident
ldiv_8
ld b, 8
rla
ldiv_8_0
adc hl, hl
exx
adc hl, hl
exx
add hl, de
exx
adc hl, de
exx
jr c, ldiv_8_1
sbc hl, de
exx
sbc hl, de
exx
ldiv_8_1
rla
djnz ldiv_8_0
ret

endif
endif
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7226
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby Budder » 26 Dec 2011, 00:03

набросал тут побыстрому процедурко:

инпут:
.DE, HL - 32бит число (DE старшая часть)
.DE ' - адрес строки в которую покладём резалт (10 байт)

Code: Select all
;(C) BUDDER/MGN/TOGYAF - 2011.12.26
;---------------------------------------
;ВЫВОД 32bit ЧИСЛА:
DECZON4 ;i:[DE,HL] - int32
;           EXX DE - String addres
;        o:Decimal string(10)

        LD BC,#CA00,(CLHL),BC;        1B
        LD BC,#3B9A,(CLDE),BC
        CALL DELIT4T
        EXX:LD (DE),A:INC DE:EXX

        LD BC,#E100,(CLHL),BC;      100M
        LD BC,#05F5,(CLDE),BC
        CALL DELIT4T
        EXX:LD (DE),A:INC DE:EXX

        LD BC,#9680,(CLHL),BC;       10M
        LD BC,#0098,(CLDE),BC
        CALL DELIT4T
        EXX:LD (DE),A:INC DE:EXX

        LD BC,#4240,(CLHL),BC;        1M
        LD BC,#000F,(CLDE),BC
        CALL DELIT4T
        EXX:LD (DE),A:INC DE:EXX

        LD BC,#86A0,(CLHL),BC;      100K
        LD BC,#0001,(CLDE),BC
        CALL DELIT4T
        EXX:LD (DE),A:INC DE:EXX
;-------
DECZON2 LD BC,10000,(CLHL),BC
        LD BC,0,(CLDE),BC
        CALL DELIT4T
        PUSH HL
        EXX:LD (DE),A:INC DE
        POP HL
DECZ2   LD BC,1000
        CALL DELIT
        LD (DE),A:INC DE
DECZ1   LD BC,100
        CALL DELIT
        LD (DE),A:INC DE
DECZ    LD C,10
        CALL DELIT
        LD (DE),A:INC DE
        LD C,1
        CALL DELIT
        LD (DE),A:INC DE
        RET
;---------------------------------------
DELIT   LD A,#FF
        OR A
DLIT    INC A
        SBC HL,BC:JP NC,DLIT
        ADD HL,BC,A,#30
        RET
;---------------------------------------
DELIT4T ;i:[DE,HL]/[CLDE,CLHL]
;        o:[DE,HL] - Remainder
;               BC - Count

        LD IX,0-1
NAZE    OR A
DLTB    LD BC,0
        INC IX
        EX DE,HL:SBC HL,BC:JR C,ND
DLTA    LD BC,0
        EX DE,HL:SBC HL,BC:JR NC,DLTB
        DEC DE
        LD A,D:INC A:JR NZ,NAZE
        LD A,E:INC A:JR NZ,NAZE
        INC DE

        ADD HL,BC
        EX DE,HL
        LD BC,(CLDE)
;-------
ND      ADD HL,BC
        EX DE,HL

Nd      PUSH IX
        POP BC
        LD A,C:ADD A,#30
        RET
;---------------------------------------
CLHL    EQU DLTA+1
CLDE    EQU DLTB+1
;---------------------------------------
http://forum.tslabs.info
MGN Group
User avatar
Budder
 
Posts: 462
Joined: 20 Jul 2007, 14:05
Group: Registered users

Postby jdigreze » 26 Dec 2011, 03:13

DimkaM wrote:Есть сабж у кого может?
У меня только под asm51. А вообще вон тебе сколько накидали. ;)
Сколько меня не корми, волк всё равно в лес смотреть будет
jdigreze
 
Posts: 1478
Joined: 01 Aug 2008, 06:49
Location: Агбан
Group: Registered users

Next

Return to Coding

Who is online

Users browsing this forum: No registered users and 2 guests