Advertisement
GraionDilach

16 bites szám szétbontása

Nov 12th, 2011
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;ELŐRE IS FIGYELMEZTETEK, EZ EGY AGYBAJ
  2. ;HIBÁJA: NINCS CIKLUSBAN... DE ÍGY IS MÁSFÉL ÓRA VOLT ÉS KIMUTATJA A LÉNYEGET
  3.  
  4. ADAT SEGMENT ;EZ EGY DARAB SPECIÁLIS STRING
  5. BHO DB '000'    ;BH OUTPUT
  6.     DB ' '
  7. BLO DB '000'    ;BL OUTPUT
  8.     DB '$'
  9. ADAT ENDS
  10.  
  11. CODE SEGMENT
  12.     ASSUME CS:CODE, DS:ADAT
  13. START:  MOV AX, ADAT
  14.     MOV DS,AX
  15.     MOV CX, 4   ;4 SZÁMJEGY
  16.     MOV AH, 1   ;BEMENET
  17.     XOR AL, AL
  18.     MOV DI, AX  ;KIPUFFERELJÜK
  19.     XOR BX, BX  ;ITT GYŰLIK A SZÁM
  20.     MOV SI, 10  ;SZORZÓ
  21. BEOLV:  MOV AX, BX  ;BX-ET BESZOROZZUK TÍZZEL
  22.     MUL SI
  23.     MOV BX, AX  ;AZTÁN VISSZATESSZÜK BX-BE
  24.     MOV AX, DI  ;INNEN OLVASUNK BE
  25.     ;MIVEL 16 BITES A SZORZÓ, SZORZÁSKOR DX KINULLÁZÓDNA
  26.     ;EZÉRT KELL DI-T A BEMENET PUFFERNAK HASZNÁLNI ÉS EZÉRT NEM HASZNÁLHATÓ DX SEMMIRE
  27. NEMSZAM:    INT 21H
  28.     CMP AL, 13  
  29.     JZ  CIKLVEG
  30.     CMP AL, '/'     ; ASCII
  31.     JC  NEMSZAM
  32.     CMP AL, ':'     ; ASCII
  33.     JNC NEMSZAM
  34.     XOR AH, AH
  35.     AND AL, 0FH ;MEGVAN A SZÁMJEGYÜNK
  36.     ADD BX, AX  ;HOZZÁAD
  37.     LOOP BEOLV
  38.     JMP POSTCIKL
  39. CIKLVEG: MOV AX, BX ;HA ENTERT KAPTUNK, CSINÁLTUNK EGY TÍZES SZORZÁST, AMIT NEM KELLETT VOLNA
  40.     DIV SI  ;VISSZAOSZTJUK
  41.     MOV BX, AX
  42. POSTCIKL:   MOV AH, 2 ;ENTERT KI
  43.     MOV DL, 13
  44.     INT 21H
  45.     MOV DL, 10
  46.     INT 21H
  47.     MOV DI, BX  ;EREDMÉNYT ELMENTJÜK
  48.     MOV CX, SI  ;CX MÁR NEM KELL, ODA A 10-ET
  49.     CMP BH, 0   ;NAGYOBB-E A SZÁM 256-NÁL?
  50.     JZ CSAKBL   ;HA KISEBB, CSAK BLBEN VAN ADAT, CSAK AZT ÍROGATOM
  51.     MOV BL, BH  ;BH-T ÁT BL-BE, BÁJTOS ADATOT KÉSZÍTÜNK OSZTÁSOKRA
  52.     XOR BH, BH
  53.     MOV SI, 2   ;HOGY FELTÖLTHESSÜK A KIÍRÓ PUFFEREKET (BHO HÁROM ELEMŰ) VISSZAFELÉ
  54. KIBH:   MOV AX, BX
  55.     XOR AH, AH  ;ELŐZŐ MARARDÉK TÖRLÉSE
  56.     DIV CL  ;OSZTÁS, NE FELEJTSÜK, CX=10!
  57.     MOV BX, AX
  58.     MOV DL, BH  ;FRISS MARADÉKOT DL-BE
  59.     OR DL, '0'  ;ASCII-KÓDRA FEL
  60.     MOV BHO[SI], DL ;KI A BUFFERBA
  61.     DEC SI  ;LÉPTETÉS
  62.     CMP BL, 0   ;TUDUNK MÉG OSZTANI?
  63.     JNZ KIBH
  64.     MOV BX, DI  ;VISSZAÁLLÍTJUK BX-ET (BHO FELTÖLTVE)
  65. CSAKBL: MOV SI, 2   ;BLO 3 BYTE HOSSZÚ
  66. KIBL:   MOV AX, BX  ;UGYANAZ A MÓDSZER, CX MÉG MINDIG 10
  67.     XOR AH, AH
  68.     DIV CL
  69.     MOV BX, AX
  70.     MOV DL, BH
  71.     OR DL, '0'
  72.     MOV BLO[SI], DL
  73.     DEC SI
  74.     CMP BL, 0
  75.     JNZ KIBL
  76.     MOV AH, 9   ;KIÍRÁS
  77.     LEA DX, BHO
  78.     INT 21H
  79.     MOV AH,4CH
  80.     INT 21H
  81. CODE ENDS
  82. END START
  83.     ;KIMENET KINÉZETE: XXX XXX
  84.     ;AZ ELSŐ HÁROM SZÁMJEGY BH TARTALMA, A MÁSODIK BL
  85.     ;A BEÜTÖTT SZÁM = 256*BH + BL
  86.     ;A LÉNYEG A KÖVETKEZŐ. AMIKOR A SZÁMOT BEÜTÖM,
  87.     ;AZ EGÉSZ SZÓT EGY ELEMKÉNT VESZEM, ÉS EMIATT A BINÁRIS SZÁMBAN
  88.     ;A 2^8-2^15 SZÁMJEGYÖSSZEGEK BH-BAN LANDOLNAK. EZ ADDIG NEM GOND,
  89.     ;AMÍG VÉGIG EGYKÉNT KEZELEM. DE AMIKOR MEGBOMLIK
  90.     ;A 256-OS HATÁR TISZTÁN HATÁSÁT FEJTI. BL NEM LEHET TÖBB MINT 255,
  91.     ;ÉS AZ EZEN TÚLI SZÁMOK 256OS MARADÉKÁT FOGJA CSAK TARTALMAZNI.
  92.     ;BH PEDIG A 256-OS EREDMÉNYEKET.
  93.    
  94.     ;PÁR PÉLDAFUTTATÁS TALÁN TISZTÁVÁ TESZI A DOLGOKAT.
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement