IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Programme fait en 1992 pour un stagiaire en Informatique.


Sujet :

x86 16-bits Assembleur

  1. #1
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut Programme fait en 1992 pour un stagiaire en Informatique.
    Message déplacé depuis cette discussion.

    Bonsoir

    Voici un programme en assembleur 8086 code 437 que j'ai fait en 1992 pour un stagiaire informatique.

    Ce programme créait des fichiers textes.

    L'éditeur de texte de cette époque était edit du DOS.

    Merci de me donner votre avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    892
    893
    894
    895
    896
    897
    898
    899
    900
    901
    902
    903
    904
    905
    906
    907
    908
    909
    910
    911
    912
    913
    914
    915
    916
    917
    918
    919
    920
    921
    922
    923
    924
    925
    926
    927
    928
    929
    930
    931
    932
    933
    934
    935
    936
    937
    938
    939
    940
    941
    942
    943
    944
    945
    946
    947
    948
    949
    950
    951
    952
    953
    954
    955
    956
    957
    958
    959
    960
    961
    962
    963
    964
    965
    966
    967
    968
    969
    970
    971
    972
    973
    974
    975
    976
    977
    978
    979
    980
    981
    982
    983
    984
    985
    986
    987
    988
    989
    990
    991
    992
    993
    994
    995
    996
    997
    998
    999
    1000
    1001
    1002
    1003
    1004
    1005
    1006
    1007
    1008
    1009
    1010
    1011
    1012
    1013
    1014
    1015
    1016
    1017
    1018
    1019
    1020
    1021
    1022
    1023
    1024
    1025
    1026
    1027
    1028
    1029
    1030
    1031
    1032
    1033
    1034
    1035
    1036
    1037
    1038
    1039
    1040
    1041
    1042
    1043
    1044
    1045
    1046
    1047
    1048
    1049
    1050
    1051
    1052
    1053
    1054
    1055
    1056
    1057
    1058
    1059
    1060
    1061
    1062
    1063
    1064
    1065
    1066
    1067
    1068
    1069
    1070
    1071
    1072
    1073
    1074
    1075
    1076
    1077
    1078
    1079
    1080
    1081
    1082
    1083
    1084
    1085
    1086
    1087
    1088
    1089
    1090
    1091
    1092
    1093
    1094
    1095
    1096
    1097
    1098
    1099
    1100
    1101
    1102
    1103
    1104
    1105
    1106
    1107
    1108
    1109
    1110
    1111
    1112
    1113
    1114
    1115
    1116
    1117
    1118
    1119
    1120
    1121
    1122
    1123
    1124
    1125
    1126
    1127
    1128
    1129
    1130
    1131
    1132
    1133
    1134
    1135
    1136
    1137
    1138
    1139
    1140
    1141
    1142
    1143
    1144
    1145
    1146
    1147
    1148
    1149
    1150
    1151
    1152
    1153
    1154
    1155
    1156
    1157
    1158
    1159
    1160
    1161
    1162
    1163
    1164
    1165
    1166
    1167
    1168
    1169
    1170
    1171
    1172
    1173
    1174
    1175
    1176
    1177
    1178
    1179
    1180
    1181
    1182
    1183
    1184
    1185
    1186
    1187
    1188
    1189
    1190
    1191
    1192
    1193
    1194
    1195
    1196
    1197
    1198
    1199
    1200
    1201
    1202
    1203
    1204
    1205
    1206
    1207
    1208
    1209
    1210
    1211
    1212
    1213
    1214
    1215
    1216
    1217
    1218
    1219
    1220
    1221
    1222
    1223
    1224
    1225
    1226
    1227
    1228
    1229
    1230
    1231
    1232
    1233
    1234
    1235
    1236
    1237
    1238
    1239
    1240
    1241
    1242
    1243
    1244
    1245
    1246
    1247
    1248
    1249
    1250
    1251
    1252
    1253
    1254
    1255
    1256
    1257
    1258
    1259
    1260
    1261
    1262
    1263
    1264
    1265
    1266
    1267
    1268
    1269
    1270
    1271
    1272
    1273
    1274
    1275
    1276
    1277
    1278
    1279
    1280
    1281
    1282
    1283
    1284
    1285
    1286
    1287
    1288
    1289
    1290
    1291
    1292
    1293
    1294
    1295
    1296
    1297
    1298
    1299
    1300
    1301
    1302
    1303
    1304
    1305
    1306
    1307
    1308
    1309
    1310
    1311
    1312
    1313
    1314
    1315
    1316
    1317
    1318
    1319
    1320
    1321
    1322
    1323
    1324
    1325
    1326
    1327
    1328
    1329
    1330
    1331
    1332
    1333
    1334
    1335
    1336
    1337
    1338
    1339
    1340
    1341
    1342
    1343
    1344
    1345
    1346
    1347
    1348
    1349
    1350
    1351
    1352
    1353
    1354
    1355
    1356
    1357
    1358
    1359
    1360
    1361
    1362
    1363
    1364
    1365
    1366
    1367
    1368
    1369
    1370
    1371
    1372
    1373
    1374
    1375
    1376
    1377
    1378
    1379
    1380
    1381
    1382
    1383
    1384
    1385
    1386
    1387
    1388
    1389
    1390
    1391
    1392
    1393
    1394
    1395
    1396
    1397
    1398
    1399
    1400
    1401
    1402
    1403
    1404
    1405
    1406
    1407
    1408
    1409
    1410
    1411
    1412
    1413
    1414
    1415
    1416
    1417
    1418
    1419
    1420
    1421
    1422
    1423
    1424
    1425
    1426
    1427
    1428
    1429
    1430
    1431
    1432
    1433
    1434
    1435
    1436
    1437
    1438
    1439
    1440
    1441
    1442
    1443
    1444
    1445
    1446
    1447
    1448
    1449
    1450
    1451
    1452
    1453
    1454
    1455
    1456
    1457
    1458
    1459
    1460
    1461
    1462
    1463
    1464
    1465
    1466
    1467
    1468
    1469
    1470
    1471
    1472
    1473
    1474
    1475
    1476
    1477
    1478
    1479
    1480
    1481
    1482
    1483
    1484
    1485
    1486
    1487
    1488
    1489
    1490
    1491
    1492
    1493
    1494
    1495
    1496
    1497
    1498
    1499
    1500
    1501
    1502
    1503
    1504
    1505
    1506
    1507
    1508
    1509
    1510
    1511
    1512
    1513
    1514
    1515
    1516
    1517
    1518
    1519
    1520
    1521
    1522
    1523
    1524
    1525
    1526
    1527
    1528
    1529
    1530
    1531
    1532
    1533
    1534
    1535
    1536
    1537
    1538
    1539
    1540
    1541
    1542
    1543
    1544
    1545
    1546
    1547
    1548
    1549
    1550
    1551
    1552
    1553
    1554
    1555
    1556
    1557
    1558
    1559
    1560
    1561
    1562
    1563
    1564
    1565
    1566
    1567
    1568
    1569
    1570
    1571
    1572
    1573
    1574
    1575
    1576
    1577
    1578
    1579
    1580
    1581
    1582
    1583
    1584
    1585
    1586
    1587
    1588
    1589
    1590
    1591
    1592
    1593
    1594
    1595
    1596
    1597
    1598
    1599
    1600
    1601
    1602
    1603
    1604
    1605
    1606
    1607
    1608
    1609
    1610
    1611
    1612
    1613
    1614
    1615
    1616
    1617
    1618
    1619
    1620
    1621
    1622
    1623
    1624
    1625
    1626
    1627
    1628
    1629
    1630
    1631
    1632
    1633
    1634
    1635
    1636
    1637
    1638
    1639
    1640
    1641
    1642
    1643
    1644
    1645
    1646
    1647
    1648
    1649
    1650
    1651
    1652
    1653
    1654
    1655
    1656
    1657
    1658
    1659
    1660
    1661
    1662
    1663
    1664
    1665
    1666
    1667
    1668
    1669
    1670
    1671
    1672
    1673
    1674
    1675
    1676
    1677
    1678
    1679
    1680
    1681
    1682
    1683
    1684
    1685
    1686
    1687
    1688
    1689
    1690
    1691
    1692
    1693
    1694
    1695
    1696
    1697
    1698
    1699
    1700
    1701
    1702
    1703
    1704
    1705
    1706
    1707
    1708
    1709
    1710
    1711
    1712
    1713
    1714
    1715
    1716
    1717
    1718
    1719
    1720
    1721
    1722
    1723
    1724
    1725
    1726
    1727
    1728
    1729
    1730
    1731
    1732
    1733
    1734
    1735
    1736
    1737
    1738
    1739
    1740
    1741
    1742
    1743
    1744
    1745
    1746
    1747
    1748
    1749
    1750
    1751
    1752
    1753
    1754
    1755
    1756
    1757
    1758
    1759
    1760
    1761
    1762
    1763
    1764
    1765
    1766
    1767
    1768
    1769
    1770
    1771
    1772
    1773
    1774
    1775
    1776
    1777
    1778
    1779
    1780
    1781
    1782
    1783
    1784
    1785
    1786
    1787
    1788
    1789
    1790
    1791
    1792
    1793
    1794
    1795
    1796
    1797
    1798
    1799
    1800
    1801
    1802
    1803
    1804
    1805
    1806
    1807
    1808
    1809
    1810
    1811
    1812
    1813
    1814
    1815
    1816
    1817
    1818
    1819
    1820
    1821
    1822
    1823
    1824
    1825
    1826
    1827
    1828
    1829
    1830
    1831
    1832
    1833
    1834
    1835
    1836
    1837
    1838
    1839
    1840
    1841
    1842
    1843
    1844
    1845
    1846
    1847
    1848
    1849
    1850
    ;------------------ directives d'assemblage pour programme .EXE ----------------
    projet  segment
            .model small
            .stack 200             ;ajouter la pile pour programme.EXE
            org 100h               ;assemblage programme .EXE
            assume cs:projet
    ;-------------------------------------------------------------------------------
    ;------------------- sauve les registres neutralise ctrl b ---------------------
    start:  pushf
            push dx
            push ds
            push bx
            push cx                ;sauve les registres de travail
            push ax
            push es
    ;-------------------------------------------------------------------------------
    ;---------------------------- adresse m‚moire ----------------------------------
    id20    dw ?                   ;sauve l'adresse de l'int ctrl break (1bh)
    id21    dw ?
    ;-------------------------------------------------------------------------------
    ;--------------------- neutralise l'action du ctrl break -----------------------
            mov ax,351bh           ;adresse de l'int 1bh
            int 21h
     
            mov [id20],es          ;sauve le segment + l'offset de l'int 1bh
            mov [id21],bx
     
           jmp suite1
     
    ctrlb: iret
     
    suite1: mov ah,25h
            mov al,1bh
            push cs                ;supprime l'action de ctrl break (int 1bh)
            pop ds
            mov dx,offset ctrlb
            int 21h
    ;-------------------------------------------------------------------------------
    ;=================================== DEBUT =====================================
            jmp debut              ;début du programme
    ;-------------------------------------------------------------------------------
    ;------------------------------- adresses mémoire ------------------------------
     
    id1     db 41 DUP (?)          ;emplacement réservé pour le nom du fichier
     
    id2     db "...Copyright 1992 JML$"
     
    id3     dw ?                   ;contient le handle (nø) du fichier
    id46    db "       ÉÍÍÍÍ          ÉÍÍÍÍ$"
    id41    db "       º              ºÍÍ$"
    id4     db "ù      º r‚ation d'un º ichier      ù$"
    id45    db "       ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ$"
    id44    db "ÉÍÍÍÍÍÍÍÍ»$"
    id42    db "º CF.exe º$"
    id43    db "ÈÍÍÍÍÍÍÍͼ$"
     
    id5     dw ?                   ;contient bx (offset id1 fichier ou id8 écriture)
    id51    db ?                   ;contient le nombre de caractère
    id52    db 0                   ;indicateur de retour
    id53    db 0                   ;indicateur de sauvegarde
    id54    db 0                   ;indicateur touche [F10]
    id55    db 0                   ;indicateur de remontée
    id56    db 0                   ;indicateur d'effacement touche [back space]
    id57    db 0                   ;indicateur de retour touche [F10]
     
    id6     db "FICHIER = Unité\Chemin\Nom.ext ÍÍͳ$"
    id62    db "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿$"
    id63    db "³$"
    id61    db "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ$"
    id64    db "                                   $"
     
    id7     db " $"                ;caractère réservé à l'effacement [back space]
    id71    dw 2020h
    id72    dw 0a0dh
     
    id8     db 80 dup (?)          ;emplacement réservé à l'écriture d'une ligne
     
    id9   db"[F2]=EffaceL  [F5]=Quitte  [F10]=Sauve  [Ù]=Valide  [-]=EffaceC  ["
          db"]=Déplace$"
    id91    db "                         ---- Suite ----                         $"
     
    id10    db ?                   ;contient dl (nøcolonne)
    id11    db ?                   ;contient dh (nøligne)
    id12    db ?                   ;contient dl (nøcolonne effacement d'une ligne)
    id13    db 0                   ;contient l'ancien nø de ligne
    id14    db 0                   ;contient l'ancienne colonne
    id15    db 0
    ;-------------------------------------------------------------------------------
    ;----------------- emplacement mémoire des lignes d'écriture -------------------
    ligne1  db 81 dup (?)          ;ligne d'écriture nø 1
    col1    db ?                   ;contient la colonne de la ligne
    lig1    db ?                   ;
    nbr1    db 0                   ;contient le nombre de caractères à écrire
    ligne2  db 81 dup (?)
    col2    db ?
    lig2    db ?
    nbr2    db 0
    ligne3  db 81 dup (?)
    col3    db ?
    lig3    db ?
    nbr3    db 0
    ligne4  db 81 dup (?)
    col4    db ?
    lig4    db ?
    nbr4    db 0
    ligne5  db 81 dup (?)
    col5    db ?
    lig5    db ?
    nbr5    db 0
    ligne6  db 81 dup (?)
    col6    db ?
    lig6    db ?
    nbr6    db 0
    ligne7  db 81 dup (?)
    col7    db ?
    lig7    db ?
    nbr7    db 0
    ligne8  db 81 dup (?)
    col8    db ?
    lig8    db ?
    nbr8    db 0
    ligne9  db 81 dup (?)
    col9    db ?
    lig9    db ?
    nbr9    db 0
    ligne10 db 81 dup (?)
    col10   db ?
    lig10   db ?
    nbr10   db 0
    ligne11 db 81 dup (?)
    col11   db ?
    lig11   db ?
    nbr11   db 0
    ligne12 db 81 dup (?)
    col12   db ?
    lig12   db ?
    nbr12   db 0
    ligne13 db 81 dup (?)
    col13   db ?
    lig13   db ?
    nbr13   db 0
    ligne14 db 81 dup (?)
    col14   db ?
    lig14   db ?
    nbr14   db 0
    ligne15 db 81 dup (?)
    col15   db ?
    lig15   db ?
    nbr15   db 0
    ligne16 db 81 dup (?)
    col16   db ?
    lig16   db ?
    nbr16   db 0
    ligne17 db 81 dup (?)
    col17   db ?
    lig17   db ?
    nbr17   db 0
    ligne18 db 81 dup (?)
    col18   db ?
    lig18   db ?
    nbr18   db 0
    ligne19 db 81 dup (?)
    col19   db ?
    lig19   db ?
    nbr19   db 0
    ligne20 db 81 dup (?)
    col20   db ?
    lig20   db ?
    nbr20   db 0
    ligne21 db 81 dup (?)
    col21   db ?
    lig21   db ?
    nbr21   db 0
    ligne22 db 81 dup (?)
    col22   db ?
    lig22   db ?
    nbr22   db 0
    ligne23 db 81 dup (?)
    col23   db ?
    lig23   db ?
    nbr23   db 0
    ligne24 db 81 dup (?)
    col24   db ?                   ;ligne d'écriture nø 24
    lig24   db ?
    nbr24   db 0
    ligne25 db 81 dup (?)
    col25   db ?
    lig25   db ?
    nbr25   db 0
    ;-------------------------------------------------------------------------------
    ;----------------------- début gestion curseur et affichage --------------------
    debut:  mov ah,0h
            mov al,02h             ;mode vidéo 80 colonnes 25 lignes CGA
            int 10h
     
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;décalage de 25 lignes (efface l'écran)
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
     
            mov ah,01h
            mov ch,6               ;modifie la forme du curseur = (_)
            mov cl,7
            int 10h
     
            mov dh,2               ;ligne 2
            mov dl,58              ;colonne 58
            mov ah,02h
            mov bh,0
            int 10h
     
            mov ah,09h
            mov dx,offset id2      ;affiche le texte id2
            int 21h
     
            mov dh,1               ;ligne nø1
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 1 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id44     ;affiche le texte id44
            int 21h
     
            mov dh,2               ;ligne nø2
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 2 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id42     ;affiche le texte id42 (EDP)
            int 21H
     
            mov dh,3               ;ligne nø3
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 3 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id43     ;affiche le texte id43
            int 21h
     
            mov dh,8
            mov dl,18
            mov ah,02h
            mov bh,0
            int 10h
     
            mov ah,09h
            mov dx,offset id46
            int 21h
     
            mov dh,11              ;ligne nø11
            mov dl,18              ;colonne nø37
            mov ah,02h
            mov bh,0               ;place le curseur ligne 2 colonne 37
            int 10h
     
            mov ah,09h
            mov dx,offset id45     ;affiche le texte id45
            int 21h
     
            mov dh,10              ;ligne nø10
            mov dl,18              ;colonne nø26
            mov ah,02h
            mov bh,0               ;place le curseur ligne 10 colonne 26
            int 10h
     
            mov ah,09h
            mov dx,offset id4      ;affiche le texte id4 (CREATION de FICHIER...)
            int 21h
     
            mov dh,9               ;ligne nø15
            mov dl,18              ;colone nø40
            mov ah,02h
            mov bh,0               ;place le curseur ligne 15 colonne 40
            int 10h
     
            mov ah,09h
            mov dx,offset id41     ;affiche le texte id41
            int 21h
     
            mov dh,21              ;ligne nø 21
            mov dl,36              ;colonne nø36
            mov ah,02h
            mov bh,0               ;place le curseur ligne 21 colonne 36
            int 10h
     
            mov ah,09h
            mov dx,offset id61     ;affiche le texte id61
            int 21h
     
            mov dh,19              ;ligne nø19
            mov dl,36              ;colonne nø36
            mov ah,02h
            mov bh,0               ;place le curseur ligne 19 colonne 36
            int 10h
     
            mov ah,09h
            mov dx,offset id62     ;affiche le texte id62
            int 21h
     
            mov dh,20              ;ligne nø20
            mov dl,79              ;colonne nø79
            mov ah,02h
            mov bh,0               ;place le curseur ligne 20 colonne 79
            int 10h
     
            mov ah,09h
            mov dx,offset id63     ;affiche le texte id63
            int 21h
     
            mov dh,21              ;ligne nø21
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 21 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id64     ;affiche le texte id64
            int 21h
     
            mov dh,20              ;ligne nø20
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 20 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id6      ;affiche le texte id6 (FICHIER = [ unité....])
            int 21h
     
            mov ch,0
            mov bh,0
            mov bx,offset id1      ;met l'adresse du nom du fichier dans bx
    ;-------------------------------------------------------------------------------
    ;------------------------- entrée des données du fichier -----------------------
    entreF: mov ch,[id10]          ;récupère la position du pointeur d'écriture
     
    entreC: mov ah,0
            int 16h                ;entrée d'un caractère au clavier
            mov [bx],al            ;place le code ascii du caractère dans id1
     
            cmp ah,3fh             ;compare le scan code avec la touche [F5]
            jnz suite2             ;si vrai fin
            jmp fermeF
     
    suite2: cmp ah,01h             ;compare le scan code avec la touche [ESC]
            jnz suite3             ;si vrai entrée d'un caractére
            jmp entreF
     
    suite3: cmp ah,1ch             ;compare le scan code de la touche avec [enter]
            jnz suite4             ;si comparaison vraie crée le fichier
            jmp creeF
     
    suite4: cmp ah,0eh             ;compare le scan code avec [back space]
            jnz suite5a            ;si comparaison vraie efface le caractére
            jmp effC
     
    suite5a:cmp ah,0fh             ;compare le scan code avec la touche TAB
            jnz suite5             ;si comparaison vraie entrée d'un caractère
            jmp entreF
     
    suite5: cmp ch,41              ;compare le nombre de caractères entré
            jnz suite6             ;si vrai attente de la touche [enter]
            jmp entreC
     
    suite6: mov [id5],bx           ;sauve bx à l'adresse id5
            add bx,+1              ;additionne bx avec +1
     
            mov dl,al
            mov ah,02h             ;affiche le caractère entré au clavier
            int 21h
     
            add ch,+1              ;additionne ch (nombre de caractères entré + 1)
     
            mov [id10],ch          ;sauve la position du pointeur d'écriture
     
            mov ah,01h
            mov ch,6
            mov cl,7               ;modifie le curseur = (_)
            int 10h
     
            jmp entreF             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;-------------------------- effacement d'un caractère --------------------------
    effC:   cmp ch,0               ;compare le nombre de caractères entré avec 0
            jnz ret1               ;aucun caractère entré au clavier
            jmp entreF
     
    ret1:   cmp [id57],1           ;compare indicateur de retour
            jnz suite7
            cmp ch,1               ;si retour compare le nombre de caractère avec 1
            jnz suite7
            jmp entreF
     
    suite7: cmp bl,18              ;compare la colonne avec 18
            jnz suite8             ;si vrai limite d'effacement des caractères
            jmp entreF             ;entrée d'un caractère
     
     
    suite8: dec bx                 ;décrémente l'adresse id1+déplacement
     
            mov [id5],bx           ;sauve l'adresse id1+déplacement
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
     
            dec dl                 ;décrémente les colonnes d'affichage
            mov ah,02h
            mov bh,0               ;positionne le curseur en colonne-1
            int 10h
     
            mov ah,09h
            mov dx,offset id7      ;affiche un espace pour effacement colonne-1
            int 21h
     
            mov ah,03h
            mov bh,0               ;calcule la position du curseur(dx a été utilisé
            int 10h                ;lors de l'affichage pour effacement)
     
            dec dl
            mov ah,02h             ;repositionne le curseur à colonne-1
            mov bh,0
            int 10h
     
            mov ch,[id10]
            dec ch                 ;repositionne le pointeur d'écriture
            mov [id10],ch
     
            mov bx,[id5]           ;récupère l'adresse id1+dépacement
     
            mov ah,01h
            mov ch,1
            mov cl,7               ;modifie le curseur = (Û)
            int 10h
     
            jmp entreF             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;---------------------- création du fichier sur le disque ----------------------
    creeF:  mov al,00h             ;met 0 dans al
            mov [bx],al            ;écrit 0 à l'adresse id1+déplacement
                                   ;(pour l'écriture sur disque)
    creeFD: mov dx,offset id1      ;met (unité+chemin+nom du fichier) dans dx
            mov cx,0
            mov ah,3ch             ;crée le fichier sur disque
            int 21h
    ;-------------------------------------------------------------------------------
    ;---------------------- ouverture du fichier sur le disque ---------------------
            mov dx,offset id1      ;met (unité\chemin\nom du fichier) dans dx
            mov ah,3dh
            mov al,42h             ;ouvre le fichier sur le disque
            int 21h
     
            mov id3,ax             ;sauve le handle du fichier dans id3
    ;-------------------------------------------------------------------------------
    ;---------------------- efface l'écran prépare l'écriture ----------------------
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;décalage de 25 lignes (efface l'écran)
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
     
            mov dh,0               ;ligne 1
            mov dl,0               ;colonne 0
            mov ah,02h
            mov bh,0               ;place le curseur ligne 1 colonne 1
            int 10h
     
            mov ah,09h
            mov dx,offset id9      ;affiche le texte id9 (Touches utilisées)
            int 21h
     
            mov ch,0
            mov cl,0               ;initialise les regitres de travail
            mov bl,0
     
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
     
            mov dh,1
    ;-------------------------------------------------------------------------------
    ;-------------------------- écriture dans le fichier --------------------------
    ecrit1C:mov dl,0               ;écriture du premier caractère
            mov [id51],dl          ;met à 0 le nombre de caractère
     
            mov [id55],0           ;indicateur de remonter
     
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
    ;-------------------------------------------------------------------------------
    ;------------------------ pointe la ligne à écrire -----------------------------
    ecritFL:cmp dh,1               ;test le nø de la ligne
            jnz suite50            ;saut au test suivant
            mov ax,0               ;initialise ax
            mov al,[id10]          ;met la colonne dans ax déplacement du pointeur
            mov bx,offset ligne1   ;met l'adresse de la ligne d'écriture dans bx
            add bx,ax              ;ajoute le déplacement au pointeur
            jmp ecritC             ;pointeur nø de ligne
     
    suite50:cmp dh,2
            jnz suite51
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne2   ;pointeur nø de ligne (adressage basé ds:bx)
            add bx,ax
            jmp ecritC
     
    suite51:cmp dh,3
            jnz suite52
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne3
            add bx,ax
            jmp ecritC
     
    suite52:cmp dh,4
            jnz suite53
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne4
            add bx,ax
            jmp ecritC
     
    suite53:cmp dh,5
            jnz suite54
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne5
            add bx,ax
            jmp ecritC
     
    suite54:cmp dh,6
            jnz suite55
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne6
            add bx,ax
            jmp ecritC
     
    suite55:cmp dh,7
            jnz suite56
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne7
            add bx,ax
            jmp ecritC
     
    suite56:cmp dh,8
            jnz suite57
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne8
            add bx,ax
            jmp ecritC
     
    suite57:cmp dh,9
            jnz suite58
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne9
            add bx,ax
            jmp ecritC
     
    suite58:cmp dh,10
            jnz suite59
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne10
            add bx,ax
            jmp ecritC
     
    suite59:cmp dh,11
            jnz suite60
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne11
            add bx,ax
            jmp ecritC
     
    suite60:cmp dh,12
            jnz suite61
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne12
            add bx,ax
            jmp ecritC
     
    suite61:cmp dh,13
            jnz suite62
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne13
            add bx,ax
            jmp ecritC
     
    suite62:cmp dh,14
            jnz suite63
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne14
            add bx,ax
            jmp ecritC
     
    suite63:cmp dh,15
            jnz suite64
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne15
            add bx,ax
            jmp ecritC
     
    suite64:cmp dh,16
            jnz suite65
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne16
            add bx,ax
            jmp ecritC
     
    suite65:cmp dh,17
            jnz suite66
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne17
            add bx,ax
            jmp ecritC
     
    suite66:cmp dh,18
            jnz suite67
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne18
            add bx,ax
            jmp ecritC
     
    suite67:cmp dh,19
            jnz suite68
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne19
            add bx,ax
            jmp ecritC
     
    suite68:cmp dh,20
            jnz suite69
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne20
            add bx,ax
            jmp ecritC
     
    suite69:cmp dh,21
            jnz suite70
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne21
            add bx,ax
            jmp ecritC
     
    suite70:cmp dh,22
            jnz suite71
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne22
            add bx,ax
            jmp ecritC
     
    suite71:cmp dh,23
            jnz suite72
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne23
            add bx,ax
            jmp ecritC
     
    suite72:cmp dh,24
            jnz suite73
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne24  ;pointe la ligne nø 24 dernière ligne
            add bx,ax
            jmp ecritC
     
    suite73:cmp dh,25
            jnz ecritC
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne25
            add bx,ax
            jmp ecritC
    ;-------------------------------------------------------------------------------
    ;---------------- teste l'écriture des caractères fin de ligne -----------------
    ecritC: cmp [id52],1
            jnz ecritNB            ;retour par flêche ne compte pas les caractères
            jmp ecrit
    ;-------------------------------------------------------------------------------
    ;--- initialise les compteurs de ligne avec le nombre de caractères à écrire ---
    ecritNB:cmp dh,1               ;teste la ligne d'écriture
            jnz suit50             ;teste suivant
            mov al,dl              ;met la colonne dans al
            add al,2               ;ajoute les caractères fin de ligne (CR et LF)
            mov [nbr1],al          ;sauve le nombre de caractères écrit dans ligne1
            jmp ecrit
     
    suit50: cmp dh,2
            jnz suit51
            cmp [id52],1
            jnz suit75
            jmp ecrit
    suit75: mov al,dl
            add al,2
            mov [nbr2],al
            jmp ecrit
     
    suit51: cmp dh,3
            jnz suit52
            cmp [id52],1
            jnz suit76
            jmp ecrit
    suit76: mov al,dl
            add al,2
            mov [nbr3],al
            jmp ecrit
     
    suit52: cmp dh,4
            jnz suit53
            cmp [id52],1
            jnz suit77
            jmp ecrit
    suit77: mov al,dl
            add al,2
            mov [nbr4],al
            jmp ecrit
     
    suit53: cmp dh,5
            jnz suit54
            cmp [id52],1
            jnz suit78
            jmp ecrit
    suit78: mov al,dl
            add al,2
            mov [nbr5],al
            jmp ecrit
     
    suit54: cmp dh,6
            jnz suit55
            cmp [id52],1
            jnz suit79
            jmp ecrit
    suit79: mov al,dl
            add al,2
            mov [nbr6],al
            jmp ecrit
     
    suit55: cmp dh,7
            jnz suit56
            cmp [id52],1
            jnz suit80
            jmp ecrit
    suit80: mov al,dl
            add al,2
            mov [nbr7],al
            jmp ecrit
     
    suit56: cmp dh,8
            jnz suit57
            cmp [id52],1
            jnz suit81
            jmp ecrit
    suit81: mov al,dl
            add al,2
            mov [nbr8],al
            jmp ecrit
     
    suit57: cmp dh,9
            jnz suit58
            cmp [id52],1
            jnz suit82
            jmp ecrit
    suit82: mov al,dl
            add al,2
            mov [nbr9],al
            jmp ecrit
     
    suit58: cmp dh,10
            jnz suit59
            cmp [id52],1
            jnz suit83
            jmp ecrit
    suit83: mov al,dl
            add al,2
            mov [nbr10],al
            jmp ecrit
     
    suit59: cmp dh,11
            jnz suit60
            cmp [id52],1
            jnz suit84
            jmp ecrit
    suit84: mov al,dl
            add al,2
            mov [nbr11],al
            jmp ecrit
     
    suit60: cmp dh,12
            jnz suit61
            cmp [id52],1
            jnz suit85
            jmp ecrit
    suit85: mov al,dl
            add al,2
            mov [nbr12],al
            jmp ecrit
     
    suit61: cmp dh,13
            jnz suit62
            cmp [id52],1
            jnz suit86
            jmp ecrit
    suit86: mov al,dl
            add al,2
            mov [nbr13],al
            jmp ecrit
     
    suit62: cmp dh,14
            jnz suit63
            cmp [id52],1
            jnz suit87
            jmp ecrit
    suit87: mov al,dl
            add al,2
            mov [nbr14],al
            jmp ecrit
     
    suit63: cmp dh,15
            jnz suit64
            cmp [id52],1
            jnz suit88
            jmp ecrit
    suit88: mov al,dl
            add al,2
            mov [nbr15],al
            jmp ecrit
     
    suit64: cmp dh,16
            jnz suit65
            cmp [id52],1
            jnz suit89
            jmp ecrit
    suit89: mov al,dl
            add al,2
            mov [nbr16],al
            jmp ecrit
     
    suit65: cmp dh,17
            jnz suit66
            cmp [id52],1
            jnz suit90
            jmp ecrit
    suit90: mov al,dl
            add al,2
            mov [nbr17],al
            jmp ecrit
     
    suit66: cmp dh,18
            jnz suit67
            cmp [id52],1
            jnz suit91
            jmp ecrit
    suit91: mov al,dl
            add al,2
            mov [nbr18],al
            jmp ecrit
     
    suit67: cmp dh,19
            jnz suit68
            cmp [id52],1
            jnz suit92
            jmp ecrit
    suit92: mov al,dl
            add al,2
            mov [nbr19],al
            jmp ecrit
     
    suit68: cmp dh,20
            jnz suit69
            cmp [id52],1
            jnz suit93
            jmp ecrit
    suit93: mov al,dl
            add al,2
            mov [nbr20],al
            jmp ecrit
     
    suit69: cmp dh,21
            jnz suit70
            cmp [id52],1
            jnz suit94
            jmp ecrit
    suit94: mov al,dl
            add al,2
            mov [nbr21],al
            jmp ecrit
     
    suit70: cmp dh,22
            jnz suit71
            cmp [id52],1
            jnz suit95
            jmp ecrit
    suit95: mov al,dl
            add al,2
            mov [nbr22],al
            jmp ecrit
     
    suit71: cmp dh,23
            jnz suit72
            cmp [id52],1
            jnz suit96
            jmp ecrit
    suit96: mov al,dl
            add al,2
            mov [nbr23],al
            jmp ecrit
     
    suit72: cmp dh,24
            jnz suit73
            cmp [id52],1
            jnz suit97
            jmp ecrit
    suit97: mov al,dl
            add al,2
            mov [nbr24],al
            jmp ecrit
     
    suit73: cmp dh,25
            jnz ecrit
            cmp [id52],1
            jnz suit98
            jmp ecrit
    suit98: mov al,dl
            add al,2
            mov [nbr25],al
            jmp ecrit
    ;-------------------------------------------------------------------------------
    ;---------------------- récupère les données d'affichage -----------------------
    ecrit:  cmp [id56],1
            jnz ecriC
            jmp autreC
     
    ecriC:  mov dl,[id10]          ;récupère la colonne
            mov dh,[id11]          ;récupère la ligne
     
            mov [id5],bx           ;sauve l'adresse ligne dans id5 pour pouvoir
                                   ;effectuer ligne+déplacement (79 caractères max)
            mov ah,02h
            mov bh,0               ;positionne le curseur
            int 10h
     
            mov ah,01h
            mov ch,6
            mov cl,7               ;modification du curseur = (_)
            int 10h
     
    autreC: add dl,+1              ;additionne + 1 à la colonne
     
            mov [id56],0
     
            mov [id10],dl          ;sauve la colonne dans id10
     
            mov bx,[id5]           ;récupère l'adresse ligne+déplacement
     
            cmp [id52],1
            jnz suite45
            jmp texte
    ;-------------------------------------------------------------------------------
    ;------------ met en mémoire les caractères de séparation de ligne -------------
    suite45:mov word ptr [bx],0a0dh;écrit les caractères ascii (CR) et (LF) pour
                                   ;écriture sur disque (écriture sur disque en
                                   ;série mais affichage à l'écran ligne par ligne)
    ;-------------------------------------------------------------------------------
    ;----------------- met en mémoire la colonne de la ligne d'écriture ------------
            cmp dh,1
            jnz sui1
            mov [col1],dl           ;met la colonne dans id14
            jmp texte
     
    sui1:   cmp dh,2
            jnz sui2
            mov [col2],dl
            jmp texte
     
    sui2:   cmp dh,3
            jnz sui3
            mov [col3],dl
            jmp texte
     
    sui3:   cmp dh,4
            jnz sui4
            mov [col4],dl
            jmp texte
     
    sui4:   cmp dh,5
            jnz sui5
            mov [col5],dl
            jmp texte
     
    sui5:   cmp dh,6
            jnz sui6
            mov [col6],dl
            jmp texte
     
    sui6:   cmp dh,7
            jnz sui7
            mov [col7],dl
            jmp texte
     
    sui7:   cmp dh,8
            jnz sui8
            mov [col8],dl
            jmp texte
     
    sui8:   cmp dh,9
            jnz sui9
            mov [col9],dl
            jmp texte
     
    sui9:   cmp dh,10
            jnz sui10
            mov [col10],dl
            jmp texte
     
    sui10:  cmp dh,11
            jnz sui11
            mov [col11],dl
            jmp texte
     
    sui11:  cmp dh,12
            jnz sui12
            mov [col12],dl
            jmp texte
     
    sui12:  cmp dh,13
            jnz sui13
            mov [col13],dl
            jmp texte
     
    sui13:  cmp dh,14
            jnz sui14
            mov [col14],dl
            jmp texte
     
    sui14:  cmp dh,15
            jnz sui15
            mov [col15],dl
            jmp texte
     
    sui15:  cmp dh,16
            jnz sui16
            mov [col16],dl
            jmp texte
     
    sui16:  cmp dh,17
            jnz sui17
            mov [col17],dl
            jmp texte
     
    sui17:  cmp dh,18
            jnz sui18
            mov [col18],dl
            jmp texte
     
    sui18:  cmp dh,19
            jnz sui19
            mov [col19],dl
            jmp texte
     
    sui19:  cmp dh,20
            jnz sui20
            mov [col20],dl
            jmp texte
     
    sui20:  cmp dh,21
            jnz sui21
            mov [col21],dl
            jmp texte
     
    sui21:  cmp dh,22
            jnz sui22
            mov [col22],dl
            jmp texte
     
    sui22:  cmp dh,23
            jnz sui23
            mov [col23],dl
            jmp texte
     
    sui23:  cmp dh,24
            jnz sui24
            mov [col24],dl
            jmp texte
     
    sui24:  cmp dh,25
            jnz texte
            mov [col25],dl
            jmp texte
    ;-------------------------------------------------------------------------------
    ;---------------------- entrée des caractères à écrire -------------------------
     texte: mov ah,0
            int 16h                ;entrée d'un caractère au clavier
     
            cmp ah,4dh             ;compare le scan code (flêche direction droite)
            jnz suite20
            jmp flecheD
     
    suite20:cmp ah,4bh             ;compare le scan code (flêche direction gauche)
            jnz suite21
            jmp flecheG
     
    suite21:cmp ah,48h             ;compare le scan code (flêche direction haute)
            jnz suite22
            jmp flecheH
     
    suite22:cmp ah,50h             ;compare le scan code (flêche direction basse)
            jnz suite23
            jmp flecheB
     
    suite23:cmp ah,44h             ;compare le scan code avec la touche [F10]
            jnz suite9             ;si vrai création d'un nouveau fichier
            mov [id54],1           ;indicateur touche [F10]
            mov [id57],1           ;indicateur de retour
            jmp sauveL
     
    suite9: cmp ah,1ch             ;compare le scan code avec la touche [enter]
            jnz suite10            ;si vrai met en mémoire et retour ligne suivante
            jmp memoire
     
    suite10:cmp ah,0eh             ;compare le scan code avec [back space]
            jnz suite11            ;si vrai effacement d'un caractère
            jmp effaC
     
    suite11:cmp ah,3ch             ;compare le scan code avec la touche [F2]
            jnz suite12            ;si vrai efface la ligne
            jmp effLI
     
    suite12:cmp ah,3fh             ;compare le scan code avec la touche [F5]
            jnz suite13            ;si vrai ferme le fichier fin du programme
            jmp sauveL
     
    suite13:cmp dl,80              ;compare le nombre de caractère avec 80
            jnz suite14            ;si vrai fin de ligne attente de la touche [Ù]
            jmp texte
     
    suite14:mov [bx],al            ;met l'ascii du caractère dans ligne+déplacement
     
            mov [id5],bx           ;sauve ligne+déplacement dans id5
     
            add bx,+1              ;ajoute + 1 au déplacement de ligne(?)
    ;-------------------------------------------------------------------------------
    ;------ teste les déplacements afin d'écrire les caractères fin de ligne -------
            cmp dh,1               ;teste la ligne
            jnz su1
            cmp dl,[col1]          ;compare la colonne avant déplacement par flêche
            jnz s1                 ;et la colonne après déplacement ([col1]=avant)
            jnb s30                ;si dl>[col1] dépacement de colonne écrit (CR.LF)
            jmp saut10             ;la colonne est égale teste la ligne
    s1:     jmp saut0              ;la colonne n'est ni égale ni plus grande
    s30:    jmp saut3
    su1:    cmp dh,2
            jnz su2
            cmp dl,[col2]
            jnz s2
            jnb s31
            jmp saut10
    s2:     jmp saut0
    s31:    jmp saut3
    su2:    cmp dh,3
            jnz su3
            cmp dl,[col3]
            jnz s3
            jnb s32
            jmp saut10
    s3:     jmp saut0
    s32:    jmp saut3
    su3:    cmp dh,4
            jnz su4
            cmp dl,[col4]
            jnz s4
            jnb s33
            jmp saut10
    s4:     jmp saut0
    s33:    jmp saut3
    su4:    cmp dh,5
            jnz su5
            cmp dl,[col5]
            jnz s5
            jnb s34
            jmp saut10
    s5:     jmp saut0
    s34:    jmp saut3
    su5:    cmp dh,6
            jnz su6
            cmp dl,[col6]
            jnz s6
            jnb s35
            jmp saut10
    s6:     jmp saut0
    s35:    jmp saut3
    su6:    cmp dh,7
            jnz su7
            cmp dl,[col7]
            jnz s7
            jnb s36
            jmp saut10
    s7:     jmp saut0
    s36:    jmp saut3
    su7:    cmp dh,8
            jnz su8
            cmp dl,[col8]
            jnz s8
            jnb s37
            jmp saut10
    s8:     jmp saut0
    s37:    jmp saut3
    su8:    cmp dh,9
            jnz su9
            cmp dl,[col9]
            jnz s9
            jnb s38
            jmp saut10
    s9:     jmp saut0
    s38:    jmp saut3
    su9:    cmp dh,10
            jnz su10
            cmp dl,[col10]
            jnz s10
            jnb s39
            jmp saut10
    s10:    jmp saut0
    s39:    jmp saut3
    su10:   cmp dh,11
            jnz su11
            cmp dl,[col11]
            jnz s11
            jnb s40
            jmp saut10
    s11:    jmp saut0
    s40:    jmp saut3
    su11:   cmp dh,12
            jnz su12
            cmp dl,[col12]
            jnz s12
            jnb s41
            jmp saut10
    s12:    jmp saut0
    s41:    jmp saut3
    su12:   cmp dh,13
            jnz su13
            cmp dl,[col13]
            jnz s13
            jnb s42
            jmp saut10
    s13:    jmp saut0
    s42:    jmp saut3
    su13:   cmp dh,14
            jnz su14
            cmp dl,[col14]
            jnz s14
            jnb s43
            jmp saut10
    s14:    jmp saut0
    s43:    jmp saut3
    su14:   cmp dh,15
            jnz su15
            cmp dl,[col15]
            jnz s15
            jnb s44
            jmp saut10
    s15:    jmp saut0
    s44:    jmp saut3
    su15:   cmp dh,16
            jnz su16
            cmp dl,[col16]
            jnz s16
            jnb s45
            jmp saut10
    s16:    jmp saut0
    s45:    jmp saut3
    su16:   cmp dh,17
            jnz su17
            cmp dl,[col17]
            jnz s17
            jnb s46
            jmp saut10
    s17:    jmp saut0
    s46:    jmp saut3
    su17:   cmp dh,18
            jnz su18
            cmp dl,[col18]
            jnz s18
            jnb s47
            jmp saut10
    s18:    jmp saut0
    s47:    jmp saut3
    su18:   cmp dh,19
            jnz su19
            cmp dl,[col19]
            jnz s19
            jnb s48
            jmp saut10
    s19:    jmp saut0
    s48:    jmp saut3
    su19:   cmp dh,20
            jnz su20
            cmp dl,[col20]
            jnz s20
            jnb s49
            jmp saut10
    s20:    jmp saut0
    s49:    jmp saut3
    su20:   cmp dh,21
            jnz su21
            cmp dl,[col21]
            jnz s21
            jnb s50
            jmp saut10
    s21:    jmp saut0
    s50:    jmp saut3
    su21:   cmp dh,22
            jnz su22
            cmp dl,[col22]
            jnz s22
            jnb s51
            jmp saut10
    s22:    jmp saut0
    s51:    jmp saut3
    su22:   cmp dh,23
            jnz su23
            cmp dl,[col23]
            jnz s23
            jnb s52
            jmp saut10
    s23:    jmp saut0
    s52:    jmp saut3
    su23:   cmp dh,24
            jnz su24
            cmp dl,[col24]
            jnz s24
            jnb s53
            jmp saut10
    s24:    jmp saut0
    s53:    jmp saut3
    su24:   cmp dh,25
            jnz saut0
            cmp dl,[col25]
            jnz s25
            jnb s54
            jmp saut10
    s25:    jmp saut0
    s54:    jmp saut3
    ;-------------------------------------------------------------------------------
    ;---------- choix d'écriture (oui ou non) des caractères fin de ligne ----------
    saut0:  cmp [id14],0
            jnz saut2
            jmp saut10
     
    saut10: cmp dh,[id13]          ;compare l'ancienne et la nouvelle ligne
            jnz saut1
            jmp saut3
     
    saut1:  cmp [id13],0           ;compare si retour ligne arrière
            jnz saut2
            jmp saut3
     
    saut3:  mov [id52],0
     
    saut2:  mov dl,al
            mov ah,02h             ;affiche le caractère entré au clavier
            int 21h
     
            mov ah,01h
            mov ch,6               ;modification du curseur (_)
            mov cl,7
            int 10h
     
            mov al,[id51]          ;met l'ancienne colonne de la ligne d'écriture
            add al,1               ;qui n'a pas encore été mise en mémoire
            mov dl,[id10]          ;récupère la colonne
            cmp dl,al              ;compare avant déplacement
            jnz suite40
     
            cmp [id55],1           ;vérifie s'il y a eu remontée de ligne
            jnz suite42            ;([id55]=indicateur de remontée de ligne)
            jmp suite41            ; si remontée de ligne n'écrit pas (CR,LF)
     
    suite42:mov [id52],0           ;écrit les caractères fin de ligne
    suite41:mov [id51],al          ;actualise l'ancienne colonne
     
            jmp ecritC
     
    suite40:jmp ecritC             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;--------------------------- utilisation des flêches ---------------------------
    flecheD:mov dl,[id10]          ;récupère la colonne
            cmp dl,80              ;teste le coin droit de l'écran
            jnz suite30
            mov [id52],1           ;ne pas écrire les caractères fin de ligne
            jmp texte              ;retour entrée de caractère
    suite30:mov [id10],dl          ;sauve la colonne
            add bx,1               ;ajoute 1 au pointeur d'écriture
            jmp ecritC             ;le retour ajoute 1 à la colonne et teste CR,LF
     
    flecheG:mov dl,[id10]
            cmp dl,1               ;teste le coin gauche de l'écran
            jnz suite31
            mov [id52],1           ;ne pas écrire les caractères fin de ligne
            jmp texte              ;retour entrée de caractère
    suite31:sub dl,2               ;retire 2 à la colonne (avant int 16h colonne+1)
            mov [id10],dl          ;sauve la nouvelle colonne
            sub bx,1               ;retire 1 au pointeur d'écriture
            mov [id5],bx           ;sauve le pointeur d'écriture
            mov [id52],1           ;ne pas écrire les caractères de fin de ligne
            jmp ecritC             ;retour teste les compteurs et l'écriture CR,LF
    flecheB:mov dh,[id11]          ;récupère la ligne
            mov [id13],dh          ;sauve l'ancienne ligne (indicateur de retour)
            cmp dh,24              ;compare le nombre de lignes (24=bas de page)
            jnz suite32
            jmp texte              ;retour entrée de caractère
    suite32:mov dl,[id10]
            sub dl,1               ;retire 1 à la colonne (avant int 16h colonne+1)
            add dh,1               ;ajoute 1 à la ligne (descend d'une ligne)
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
            mov [id52],1           ;ne pas écrire les caractères de fin de ligne
            jmp ecrit1C ;;
     
    flecheH:mov dh,[id11]          ;récupère la ligne
            mov [id13],dh          ;sauve l'ancienne ligne (indicateur de retour)
            mov [id55],1           ;indicateur de remontée
            cmp dh,1               ;compare le nombre de lignes (1=haut de page)
            jnz suite33
            jmp texte              ;retour entrée de caractère
    suite33:mov dl,[id10]          ;récupère la colonne
            sub dl,1               ;enlève 1 à la colonne (avant int 16h colonne+1)
            sub dh,1               ;enlève 1 à la ligne
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
            mov [id52],1           ;positionne l'indicateur ne pas écrire CR et LF
            jmp  ecrit1C ;ecritFL  ;retour pointeur nø ligne
    ;-------------------------------------------------------------------------------
    ;---------------------------- efface un caractère ------------------------------
    effaC:  mov ah,01h
            mov ch,1
            mov cl,7               ;modification du curseur (Û)
            int 10h
     
            cmp dl,01              ;compare la colonne avec 1 aucun caractère entré
            jnz suite15            ;ou tous les caractères sont effacés
            jmp texte
     
    suite15:dec bx                 ;décrémente id8+déplacement
     
            mov [id5],bx           ;sauve ligne+déplacement dans id5
     
            mov ax,id72
            mov word ptr [bx],ax
            add bx,2
            mov ax,id71
            mov word ptr [bx],ax
     
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
     
            dec dl                 ;décrèmente la colonne
     
            mov [id51],dl          ;décrèmente le nombre de caractères
     
            mov ah,02h
            mov bh,0               ;positionne le curseur sur le caractère à effacer
            int 10h
     
            mov ah,09h
            mov dx,offset id7      ;efface le caractère
            int 21h
     
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
     
            dec dl
            mov ah,02h             ;positionne le curseur sur le caractère effacé
            mov bh,0
            int 10h
     
            mov bx,[id5]           ;récupère ligne+déplacement
     
            mov [id56],1
            mov [id52],0
     
            jmp ecritNB            ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;----------------------- met la ligne en mémoire -------------------------------
    memoire:mov dh,[id11]          ;récupère la ligne
     
            add dh,1               ;ajoute 1
     
            mov [id11],dh          ;ligne suivante
     
            mov [id52],1           ;positionne l'indicateur n'écrit pas CR et LF
     
            cmp dh,25
            jnz suite16            ;teste si fin de page
            mov[id53],1
            jmp sauveL
     
    suite16:jmp ecrit1C            ;retour entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;----------------------------- sauve les lignes --------------------------------
    sauveL: mov cx,0
            mov cl,[nbr1]          ;nombre de caractères à écrire
            mov ah,40h
            mov bx,id3             ;handle du fichier
            mov dx,offset ligne1   ;déplacement de la ligne à écrire
            int 21h                ;écriture sur le disque de la ligne1
     
            mov cx,0
            mov cl,[nbr2]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne2
            int 21h
     
            mov cx,0
            mov cl,[nbr3]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne3
            int 21h
     
            mov cx,0
            mov cl,[nbr4]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne4
            int 21h
     
            mov cx,0
            mov cl,[nbr5]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne5
            int 21h
     
            mov cx,0
            mov cl,[nbr6]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne6
            int 21h
     
            mov cx,0
            mov cl,[nbr7]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne7
            int 21h
     
            mov cx,0
            mov cl,[nbr8]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne8
            int 21h
     
            mov cx,0
            mov cl,[nbr9]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne9
            int 21h
     
            mov cx,0
            mov cl,[nbr10]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne10
            int 21h
     
            mov cx,0
            mov cl,[nbr11]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne11
            int 21h
     
            mov cx,0
            mov cl,[nbr12]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne12
            int 21h
     
            mov cx,0
            mov cl,[nbr13]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne13
            int 21h
     
            mov cx,0
            mov cl,[nbr14]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne14
            int 21h
     
            mov cx,0
            mov cl,[nbr15]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne15
            int 21h
     
            mov cx,0
            mov cl,[nbr16]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne16
            int 21h
     
            mov cx,0
            mov cl,[nbr17]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne17
            int 21h
     
            mov cx,0
            mov cl,[nbr18]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne18
            int 21h
     
            mov cx,0
            mov cl,[nbr19]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne19
            int 21h
     
            mov cx,0
            mov cl,[nbr20]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne20
            int 21h
     
            mov cx,0
            mov cl,[nbr21]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne21
            int 21h
     
            mov cx,0
            mov cl,[nbr22]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne22
            int 21h
     
            mov cx,0
            mov cl,[nbr23]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne23
            int 21h
     
            mov cx,0
            mov cl,[nbr24]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne24
            int 21h
     
            mov cx,0
            mov cl,[nbr25]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne25
            int 21h
     
            cmp [id54],1           ;teste l'action sur la touche [F10]
            jnz r1
            jmp pageS
     
     
    r1:     cmp [id53],1           ;indicateur de sauvegarde
            jnz fermeF
            jmp pageS
    ;-------------------------------------------------------------------------------
    ;---------------------- fermeture du fichier sur le disque ---------------------
    fermeF: mov ah,3eh             ;ferme le fichier
            mov bx,id3
            int 21h
     
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;efface l'écran
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
     
            jmp affichR            ;saut termine le programme
    ;-------------------------------------------------------------------------------
    ;------ efface l'écran et positionne le curseur pour une nouvelle page ---------
    pageS:  mov [nbr1],0           ;met les compteurs à 0
            mov [nbr2],0
            mov [nbr3],0
            mov [nbr4],0
            mov [nbr5],0
            mov [nbr6],0
            mov [nbr7],0
            mov [nbr8],0
            mov [nbr9],0
            mov [nbr10],0
            mov [nbr11],0
            mov [nbr12],0
            mov [nbr13],0
            mov [nbr14],0
            mov [nbr15],0
            mov [nbr16],0
            mov [nbr17],0
            mov [nbr18],0
            mov [nbr19],0
            mov [nbr20],0
            mov [nbr21],0
            mov [nbr22],0
            mov [nbr23],0
            mov [nbr24],0
            mov [nbr25],0
     
            cmp [id54],1           ;teste l'action sur la touche [F10]
            jnz r2
            mov [id54],0           ;met l'indicateur à 0
            jmp debut
     
    r2:     mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;efface l'écran si plus de 25 lignes
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
     
            mov dh,0
            mov dl,7               ;place le curseur ligne 1 colonne 7
            mov ah,02h             ;si plus de 25 lignes
            mov bh,0
            int 10h
     
            mov ah,09h
            mov dx,offset id91     ;affiche le texte id91 (SUITE)
            int 21h
     
            mov dh,1               ;ligne 2
            mov dl,1               ;colonne 1
     
            mov [id53],0           ;remet l'indicateur de sauvegarde … 0
     
            jmp ecrit1C            ;entrée d'une nouvelle ligne
    ;-------------------------------------------------------------------------------
    ;---------------------------- efface une ligne ---------------------------------
    effLI:  mov dl,0               ;d‚bute par le premier caractère
            mov [id10],dl          ;sauve la ligne
            mov [id11],dh          ;sauve la colonne
     
    effL:   mov [id12],dl          ;sauve la colonne pour effacement
     
            mov ah,02h
            mov bh,0               ;positionne le curseur
            int 10h
     
            mov ah,09h
            mov dx,offset id7      ;efface le caractère
            int 21h
     
            mov dh,[id11]          ;récupère la ligne
            mov dl,[id12]          ;récupère la colonne pour effacement
            add dl,+1
     
            cmp dl,80              ;compare avec le nombre de caractères max
            jnz suite18            ;si vrai retour entrée d'un nouveau caractère
            mov [id52],0
            jmp ecrit1C
     
    suite18:jmp  effL              ;efface le caractère suivant
    ;-------------------------------------------------------------------------------
    ;--------------------------- rétablit l'affichage ------------------------------
    affichR:mov dh,1               ;ligne nø 1
            mov dl,1               ;colonne nø 1
            mov ah,02h
            mov bh,0               ;remet le curseur ligne 1 colonne 1
            int 10h
     
            mov ah,01h
            mov ch,6               ;rétablit le curseur d'origine (_)
            mov cl,7
            int 10h
    ;-------------------------------------------------------------------------------
    ;---------------------------- rétablit ctrl break ------------------------------
            mov dx,[id21]          ;récupère l'adresse du ctrl break
            mov ds,[id20]
     
            mov ah,25h             ;rétablit l'int 1bh (ctrl break)
            mov al,1bh
            int 21h
     
            pop es
            pop ax
            pop cx                 ;récupère les registres
            pop bx
            pop ds
            pop dx
            popf
    ;-------------------------------------------------------------------------------
    ;============================ FIN DU PROGRAMME =================================
            mov ah,4ch             ;termine le programme
            int 21h
    ;-------------------------------------------------------------------------------
    ;--------------------------- FIN POUR ASSEMBLAGE -------------------------------
    projet  ends                   ;directive d'assemblage fin du programme
            end start
    ;-------------------------------------------------------------------------------
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Bizarre ce dernier message : quel rapport avec les cours sur DEBUG ?
    Toutefois, j'ai deux remarques à faire sur ce code :
    - c'est un programme COM donc suppression des directives .MODEL et .STACK ;
    - il ne permet pas de modifier un fichier texte existant mais se contente de le remplacer.

  3. #3
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    Non c'est un programme exe fait avec TASM, il créait un fichier texte mais il ne peut pas éditer un fichier texte.

    Regarde (ICI) ce qu'il donne en code 437.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Effectivement, le titre est « Création d'un Fichier ». Dommage qu'il ne prévienne pas lorsqu'il risque d'écraser un fichier existant.
    En revanche, je ne comprends toujours pas pourquoi le fichier EXE commence à l'offset 100h (ORG 100h). Je tiens à rappeler que seule l'exécution d'un programme COM doit débuter à cette adresse-là, i.e., juste après le PSP.

  5. #5
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    Pourquoi l'origine à l'offset 100h tout simplement une mauvaise habitude de programmation assembleur que j'ai prise avec debug.
    Car à l'origine je faisais mes formations avec debug du DOS.

    Car mes formations étaient surtout sur le détournement des interruptions pour des jeunes en BTS informatique industrielle de l'école d'Aurillac dans le Cantal.

    Mais ce programme est intéressant en 1992 pour deux raisons.

    En 1992 il n’y a que le DOS.

    Donc ce programme est didactique donc à but de formation sur les interruptions matérielles et logicielles dont la plus célèbre int logiciel est l’int 21h du DOS.

    Mais ce programme utilise l’int 16h de gestion du clavier et pas les fonctions 01h, 07h, 08h, 0Ah de l’int 21h pourquoi ?

    Tout simplement pour faire des fichiers bat inviolable bien sur c’est didactique.

    Alors comment en 1992 est t’il possible de faire un fichier bat inviolable ?

    D’abord le fichier bat est construit et testé avec l’edit du DOS ensuite lorsqu’il fonctionne bien il est créé avec le programme cf.exe

    Qu’a de plus ce programme ?

    Int 16h bien sur !

    Donc en 1992 le DOS n’accepte pas la barre espace dans un nom de fichier mais seulement le caractère ASCII alt 255.

    Mais cf.exe lui accepte la barre espace grâce à l’int matériel 16h dans le nom du fichier.
    Donc il suffit de mettre un espace avec la barre espace dans le nom du fichier pour que personne ne puisse ouvrir ou modifier ce fichier.

    Exemple :

    Toto 1.bat ===> utilise le caractère alt 255 et peut être édité.
    Toto 2.bat ===> utilise la barre espace et ne peut pas être édité par l’édit du DOS.

    Voici pourquoi il faut que cf.exe ne puisse pas éditer de fichier, les sources des fichiers bat étant sur une disquette 1.44 bien au chaud.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Merci pour les explications.
    Il est vrai que l'introduction de caractères illégaux dans les noms de fichiers était une méthode de protection des fichiers assez efficace.

    [Petit aparté : la scrutation du port clavier est elle-aussi envisageable dans un éditeur de texte. Il devient alors possible de définir ses propres délai et taux de répétition de caractères en se basant sur le code break des touches pour intercepter leur remontée. L'intérêt de cette programmation hardware est plus grand avec les BIOS ou les claviers ne permettant pas le paramétrage par la commande MODE.]

  7. #7
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par MIG86 Voir le message
    Merci pour les explications.
    Il est vrai que l'introduction de caractères illégaux dans les noms de fichiers était une méthode de protection des fichiers assez efficace.

    [Petit aparté : la scrutation du port clavier est elle-aussi envisageable dans un éditeur de texte. Il devient alors possible de définir ses propres délai et taux de répétition de caractères en se basant sur le code break des touches pour intercepter leur remontée. L'intérêt de cette programmation hardware est plus grand avec les BIOS ou les claviers ne permettant pas le paramétrage par la commande MODE.]
    Bonjour

    Je ne connais pas cette méthode, mais je connais une méthode qui détermine le temps d'action des touches du clavier pour fabriquer une fonction randomise de code aléatoire.

    Il y a une explication dans le livre de Michal Zalewski « Menaces sur le réseau ».
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Je vous donne un exemple tout bête de l'emploi direct du port clavier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    ; TOUCHE.ASM : répète l'affichage de la touche maintenue enfoncée.
    ;       MASM    TOUCHE;
    ;       LINK    TOUCHE;
    ;       EXE2BIN TOUCHE TOUCHE.COM
     
     
    CODE    SEGMENT
            ASSUME  CS:CODE
    PSP:
            ORG     100h
     
    Depart:
            MOV     AX,40h
            MOV     ES,AX           ; Segment de données du BIOS
    Test_tampon:
            MOV     AH,1            ; Détermine si le tampon clavier est vide :
            INT     16h             ; si oui, active le bit de zéro
    Lit_touche:
            XOR     AH,AH           ; Lit et retire le der. car. du tampon,
            INT     16h             ; sinon attend l'action d'une touche
            JNZ     Test_tampon     ; Teste à nouveau le tampon
            OR      AL,AL           ; Code étendu ?
            JE      Lit_touche      ; Si oui, recommence
            CALL    Affiche_touche  ; Sinon, affiche le car. ASCII correspondant
            RET                     ; Fin
     
    Affiche_touche  PROC
            ADD     AH,128          ; Code BREAK = code MAKE + 128
            MOV     CL,2            ; Fct DOS sortie de car.
            XCHG    DX,AX           ; DH = code BREAK, DL = car. ASCII à afficher
    Repete:
            CALL    PSP+5           ; Appel DOS type CP/M (avec n° de fct en CL)
            MOV     AX,word ptr ES:1Ch      ; Pointeur du dernier car. du tampon
            MOV     word ptr ES:1Ah,AX      ; M.à.j. du pointeur du der. car. lu
            IN      AL,60h          ; Lit port clavier
            CMP     DH,AL           ; Code BREAK ?
            JNE     Repete          ; Si non, répète l'affichage du caractère
            RET
    Affiche_touche  ENDP
     
    CODE    ENDS
     
            END     Depart
    La fonction d'affichage du DOS est appelée sans cesse dès qu'une touche est enfoncée et tant qu'elle le reste. Remarquez la manipulation des deux pointeurs du tampon clavier, de type circulaire, pour éviter qu'il soit plein.
    L'étape suivante sera de réguler la vitesse de répétition et de définir un délai avant qu'elle ne s'enclenche.

  9. #9
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    C'est très bien, mais j'étais incapable de faire une programmation à ce niveau, j’ai arrêté en 1993 suite à la maladie.

    Ma spécialité à été surtout les programmes résidents (TSR) et le détournement des interruptions.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Vous savez, la programmation des TSR est déjà un bon pas dans l'arrachage de cheveux ! Vu qu'un programme résidant consomme de la mémoire, on prend une fâcheuse manie à utiliser les astuces et à oublier de structurer. Pire, il est indispensable de posséder un livre sur le sujet si on désire que ses programmes résidants utilisent les fonctions du DOS -- qui n'est pas réentrant.
    Moi-même, je ne m'amuse pas à faire des TSR sophistiqués car cela demande une connaissance des fonctions non documentées. Généralement, j'en écris pour modifier certaines fonctions du BIOS, voire la CMOS, par compatibilité avec de vieux logiciels.
    Et entre nous, je n'ai été poussé que récemment à la programmation assembleur pour continuer à utiliser le DOS. Par ailleurs, si on m'avait montré un programme BASIC en 1992, je me serais demandé pourquoi IF, le nom de l'arbre, apparaît si souvent...

    Quant à mon programme d'exemple, il utilise le niveau le plus élevé possible pour chaque étape à effectuer :
    - DOS pour l'affichage ;
    - le BIOS pour vider le tampon clavier ;
    - l'accès matériel pour détecter les codes BREAK des touches.
    De plus, j'accède au DOS par CALL 5 seulement parce que cela me permet d'utiliser AH pour autre chose que le n° de fonction -- et d'illustrer la compatibilité avec CP/M apportée par le PSP.
    Et surtout, ce n'est qu'une démonstration sans prétention qui est incapable de traiter correctement une touche morte (comme ^). J'espère vous relire bientôt à propos de vieux programmes.

  11. #11
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Mes TSR étaient fait avec Debug, donc je n'ai pas beaucoup de listing il faut que je cherche un rapport de stage pour retrouver le code des programmes.

    Je pense que tu as compris je n'étais pas informaticien en 1992 malgré que je programmais en assembleur 68000 et 8086.
    Je suis électrotechnicien et électronicien mais dans mon métier est arrivée l'informatique industrielle.

    Elle est arrivée avec un poste informatique entièrement statique et programmé en ROM en assembleur 68000 et 8086.

    Ce poste à la SNCF où je travaillais (maintenant je suis à la retraite) s’appel un PRCI (Poste tout Relais à Commande Informatique) c’est pour trouver les bugs de ce poste que j’ai fait de l’assembleur.

    Ensuite comme mes collègues avaient des enfants en informatique Industrielle et que ces enfants cherchaient des stages pour le BTS j’ai pris des stagiaires.

    Ce qui fait que je me suis mis à faire de l’assembleur à but didactique grâce aux livres de Mr Philippe MERCIER.
    Des livres comme Assembleur facile collection Marabout MS 885, les Interruptions du MSDOS même éditeur MS 923 et la Maîtrise des programmes résidents sous MS-DOS même éditeur MS 815 et bien d’autre.

    Mais en fait pour moi et pour mon travail je faisais des programmes en GWBASIC.
    Ces programmes servaient par exemple à récupérer des caractères ASCII envoyés par le PRCI sur des liaisons séries.

    Puis par excès de travail et de responsabilités la maladie est apparue, la dépression.
    Il a fallu que je me recycle car j’avais un métier de commandement et de sécurité qui aurait pu être dangereux pour les clients de la SNCF.

    Je n’occupais entre autre de sécurité ferroviaire.

    Donc je suis devenu informaticien, fini pour moi la programmation avec la dépression cela m’angoissait beaucoup.

    Je suis donc devenu une sorte de RSRL (Responsable Serveur Responsable réseaux Locaux).

    Cela ma bien plus. Pendant 12 ans je suis devenu un as de Windows Serveur de Unix AIX d’office des réseaux WAN et LAN.

    Ensuite je suis revenu à la sécurité pour reprendre mon métier à la sécurité ferroviaire.
    Mais cette fois ci pas de terrain, un poste d’assistant maintenance en tant que Chef de Circonscription dans une unité SES (Service Electrique et de Signalisation).

    J’ai fait beaucoup d’Excel pour la comptabilité et bien sur je suis intervenu techniquement peu souvent mais en expert, lorsque plus personne sur le terrain n’avait la solution du problème technique de sécurité.

    Maintenant c’est la retraite bien méritée je l’avoue.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Intéressant votre parcours.

    Mes TSR étaient faits avec Debug
    Pour de très courts programmes, j'utilise parfois un fichier texte du style suivant (ici RESET.86):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    a100
    mov ax,40
    mov ds,ax
    mov word ptr [72],1234
    jmp ffff:0000
     
    r cx
    10
    n reset.com
    w
    q
    Ainsi, il me sert d'entrée pour DEBUG

    pour mon travail je faisais des programmes en GWBASIC
    Comme beaucoup de gens à votre époque, j'utilise GW/BASIC car c'est un BASIC Microsoft du même genre que ceux qu'on trouve dans la ROM des vieilles machines. J'utilise aussi la version d'IBM BASIC destinée à l'origine aux PS/2 (la A3.40) car il est facile de créer un TSR permettant de la lancer sur tout compatible PC (non IBM donc sans BASIC de ROM). J'aime créer des routines d'assemblage pour cet interprète. Bien sûr, je sais me servir de QBASIC.

    En conclusion, DEBUG (voire SID ou SID-86 sous DR DOS) et GW/BASIC ou IBM BASIC étaient les outils de programmation du pauvre. Néanmoins, DEBUG est un outil de mise au point correct et l'IBM BASIC a un grand potentiel malgré sa lenteur et son unique segment de données.


    P.S. : je remarque que la scission du sujet a été effectuée.

  13. #13
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    On retrouve bien l'utilisation de Debug pour la programmation assembleur des premiers utilisateurs.

    Mais ce qui est intéressant c'est que l'assembleur je l'ai fait ensuite lors de formation avec TASM, programme qui m'a été prêté par l'école d'Aurillac d'où provenaient mes stagiaires.

    Ce qui m'a le plus manqué c'est la formation de stagiaire en programmation mes autres formations de stagiaires furent des formations Windows, Word, Excel, Designer et tout sorte de formation réseau et administration réseau qui pour le formateur que j'étais me semblaient moins intéressantes.

    Il est bien entendu et je pense que tu l'as compris, je suis un autodidacte, car pour moi il n'y a eu aucune formation.

    PS : Mes programmes GWBASIC étaient compilés non pas avec le compilateur du GWBASIC qui nécessitait un runtimes, mais avec le compilateur du TBASIC.
    Ma programmation étant parfaitement compatible avec ce compilateur.

    Voici deux exemples parmi plusieurs programmes qui s'appelle l'un l'autre.
    Tout simplement du fait que les micros PC 8086 de cette époque étaient très lents et que mes programmes contenaient beaucoup de DATA il fallait les scinder en petit programme pour limiter le temps d'attente.

    Programme 1 SPYB0.BAS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    0 CLS
    20 B$="."
    30 OPEN "PARAM" FOR OUTPUT AS #3:PRINT #3,B$:CLOSE #3
    40 LOCATE 25,39:PRINT "Fait … BRIVE le 01/03/90 par JML":LOCATE 1,1 : PRINT "Programmes  SPYB*.EXE de (SPYBA0) … (SPYBA9)"
    50 COLOR 0,7
    60 LOCATE 9,8:PRINT " Copie sur l'imprimante  TAPEZ [e] ou [z] ou [t] en Minuscule "
    70 LOCATE 5,11: PRINT " Pour Sortir de SPYBA0 Tapez [ M ]  [M]=Retour au MENU "
    80 COLOR 7,0
    90 LOCATE 11,9:PRINT "------------------------------------------------------------":LOCATE 15,9:PRINT "------------------------------------------------------------"
    100 LOCATE 12,9 :PRINT "!":LOCATE 12,68:PRINT "!"
    110 LOCATE 13,9 :PRINT "!":LOCATE 13,68:PRINT "!"
    120 LOCATE 14,9 :PRINT "!":LOCATE 14,68:PRINT "!"
    130 COLOR 0,7
    140 LOCATE 12,10:PRINT "                                                          "
    150 LOCATE 13,10:PRINT "                                                          "
    160 LOCATE 14,10:PRINT "                                                          "
    170 LOCATE 13,10:PRINT "CHOIX DES MESSAGES [Tapez] (E) ou (Z) ou (T) ou (A) ou (P)"
    180 COLOR 7,0
    190 LOCATE 18,3:PRINT "[E] = Changement d'‚tat (TK ou TK/)       [Z] = Commande       [T] = Texte" :LOCATE 21,3:PRINT "[A] = Aide  +  Alarmes INFO ou MES        [P] = Param‚tre du PSAFF"
    200 LOCATE 13,30:PRINT "     ":LOCATE 5,41:COLOR 0,7:PRINT "   ":COLOR 7,0:FOR I=1 TO 400:NEXT I
    210 COLOR 0,7:LOCATE 5,42:PRINT "M":COLOR 7,0
    220 D$=INKEY$:IF D$="P" OR D$="p" OR D$="A" OR D$="a" OR D$="E" OR D$="e" OR D$="Z" OR D$="z" OR D$="T" OR D$="t" OR D$="M" OR D$="m" THEN 230 ELSE LOCATE 13,30:PRINT "Tapez":FOR I=1 TO 350 :NEXT I:GOTO 200
    230 IF D$="A" OR D$="a" THEN RUN "SPYBB0.EXE"
    240 IF D$="M" OR D$="m" THEN CLS:SYSTEM
    250 IF D$="P" OR D$="p" THEN RUN "SPYBA9.EXE"
    260 OPEN "MESSAGES" FOR OUTPUT AS #2
    270 PRINT #2,D$
    280 CLOSE #2
    290 CLS
    300 RUN "SPYBA1.EXE"
    Programme 2 SPYBA1.BAS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    10 COLOR 0,7
    20 LOCATE 20,1:PRINT "=-=-=-=-=Param‚trage des RELAIS=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=RECHERCHE=-=-=-="
    30 COLOR 7,0
    40 OPEN "PARAM" FOR INPUT AS #3
    50 INPUT #3,B$
    60 CLOSE #3
    70 IF B$="FI" OR B$="****FI          (" OR B$="********************************FI" THEN B30$="*":C$="FI":GOTO 80 ELSE 90
    80 OPEN "CAG.VAR" FOR INPUT AS #1:INPUT #1,B$:CLOSE #1:A$=B$:GOTO 100
    90 LOCATE 22,2:PRINT B$
    100 OPEN "MESSAGES" FOR INPUT AS #2
    110 INPUT #2,D$
    120 CLOSE #2
    130 IF D$="e" OR D$="z" OR D$="t" THEN COLOR 0,7:LOCATE 20,44:PRINT "COPIE":COLOR 7,0
    140 IF B30$="*" THEN 160
    150 IF D$="e" OR D$="z" OR D$="t" THEN LPRINT B$
    160 IF B30$="*" THEN IF D$="E" OR D$="e" THEN A$=MID$ (B$,1,4)
    170 LOCATE 2,11:PRINT "TAPEZ [FFF] ou [MMM] FFF=retour choix des messages  MMM=explications"
    180 LOCATE 3,11:PRINT "--------------------------------------------------------------------"
    190 IF D$="Z" OR D$="z" THEN :LOCATE 12,30:PRINT "CHOIX DES COMMANDES"
    200 IF D$="T" OR D$="t" THEN LOCATE 14,31:PRINT "----------------" ELSE LOCATE 13,30:PRINT "-------------------"
    210 IF D$="T" OR D$="t" THEN LOCATE 13,32: PRINT "CHOIX DU TEXTE"
    220 LOCATE 17,1:PRINT "                                                         "
    230 LOCATE 1,1:PRINT CHR$ (7)
    240 LOCATE 16,53:PRINT "!***!":LOCATE 18,53:PRINT "!***!":LOCATE 17,53:PRINT "!":LOCATE 17,57:PRINT "!"
    250 IF B30$="*" THEN B30$="" :GOTO 870
    260 IF D$="E" OR D$="e" THEN LOCATE 12,30:PRINT "CHOIX DES CONTROLES"
    270 IF D$="E" OR D$="e" THEN LOCATE 15,18:PRINT "E = 4 Chiffres=(0ou1)  .Ex 0022=1.  (V)=Validation":LOCATE 17,35:PRINT "......":LOCATE 17,35:A1$=INPUT$ (1):PRINT A1$:LOCATE 17,36:A2$=INPUT$ (1):PRINT A2$
    280 IF D$="E" OR D$="e" THEN LOCATE 17,37:A3$=INPUT$ (1):PRINT A3$:AA$=A1$+A2$+A3$:IF AA$="FFF" THEN RUN "SPYBA0.EXE"
    290 IF D$="E" OR D$="e" THEN IF AA$="MMM" THEN GOSUB 970 ELSE 310
    300 IF D$="E" OR D$="e" THEN IF AA$="MMM" THEN 270
    310 IF D$="E" OR D$="e" THEN LOCATE 17,38:A4$=INPUT$ (1):PRINT A4$:LOCATE 17,39:A5$=INPUT$ (1):PRINT A5$:LOCATE 17,40:A6$=INPUT$ (1): PRINT A6$:A$=A1$+A2$+A3$+A4$+A5$+A6$
    320 IF D$="E" OR D$="e" THEN A$=A1$+A2$+A3$+A4$+A5$+A6$:B1$=INPUT$ (1) :IF B1$="V" OR B1$="v" THEN 330 ELSE GOTO 270
    330 IF D$="T" OR D$="t" THEN LOCATE 15,17:PRINT "T = TEXTE   Ex  EIT 100 O   (   (V)=Validation":LOCATE 17,33:PRINT ".............":LOCATE 17,33:A1$=INPUT$ (1):PRINT A1$:LOCATE 17,34:A2$=INPUT$ (1):PRINT A2$:LOCATE 17,35:A3$=INPUT$ (1):PRINT A3$
    340 IF D$="T" OR D$="t" THEN AA$=A1$+A2$+A3$:IF AA$="FFF" THEN RUN "SPYBA0.EXE"
    350 IF D$="T" OR D$="t" THEN IF AA$="MMM" THEN GOSUB 970
    360 IF D$="T" OR D$="t" THEN IF AA$="MMM" THEN 330
    370 IF D$="T" OR D$="t" THEN LOCATE 17,36:A4$=INPUT$ (1):PRINT A4$:LOCATE 17,37:A5$=INPUT$ (1):PRINT A5$:LOCATE 17,38:A6$=INPUT$ (1):PRINT A6$:LOCATE 17,39:A7$=INPUT$ (1):PRINT A7$:LOCATE 17,40:A8$=INPUT$ (1):PRINT A8$
    380 IF D$="T" OR D$="t" THEN LOCATE 17,41:A9$=INPUT$ (1):PRINT A9$:LOCATE 17,42:A10$=INPUT$ (1):PRINT A10$:LOCATE 17,43:A11$=INPUT$ (1):PRINT A11$:LOCATE 17,44:A12$=INPUT$ (1):PRINT A12$:LOCATE 17,45:A13$=INPUT$ (1):PRINT A13$
    390 IF D$="T" OR D$="t" THEN A$=A1$+A2$+A3$+A4$+A5$+A6$+A7$+A8$+A9$+A10$+A11$+A12$+A13$
    400 IF D$="T" OR D$="t" THEN B1$=INPUT$ (1):IF B1$="V" OR B1$="v" THEN 410 ELSE GOTO 330
    410 IF D$="Z" OR D$="z" THEN LOCATE 15,24 : PRINT "Z = 3 Chiffres   .Ex 000. (V)=Validation":LOCATE 17,36:PRINT "...":LOCATE 17,36:A1$=INPUT$ (1):PRINT A1$:LOCATE 17,37:A2$=INPUT$ (1):PRINT A2$:LOCATE 17,38:A3$=INPUT$ (1):PRINT A3$
    420 IF D$="Z" OR D$="z" THEN AA$=A1$+A2$+A3$:IF AA$="FFF" THEN RUN "SPYBA0.EXE"
    430 IF D$="Z" OR D$="z" THEN IF AA$="MMM" THEN GOSUB 970 ELSE 450
    440 IF D$="Z" OR D$="z" THEN IF AA$="MMM" THEN  410
    450 IF D$="Z" OR D$="z" THEN A$=A1$+A2$+A3$:B1$=INPUT$ (1):IF B1$="V" OR B1$="v" THEN 460 ELSE GOTO 410
    460 N1$=MID$ (A$,1,3):IF N1$="FFF" OR N1$="fff" THEN RUN "SPYBA0.EXE"
    470 N1$=MID$ (A$,1,3):IF N1$="MMM" OR N1$="mmm" THEN GOSUB 2600
    480 IF D$="Z" OR D$="z" OR D$="E" OR D$="e" THEN IF A$ > "9999" OR A$ < "0" THEN 220
    490 K=0
    500 OPEN "CAG.VAR" FOR OUTPUT AS #1
    510 PRINT #1,A$
    520 CLOSE #1
    530 COLOR 0,7
    540 K=K+1:LOCATE 17,54:PRINT "   ":FOR I=1 TO 100 :NEXT I:LOCATE 17,54:PRINT " R ":FOR Y=1 TO 150:NEXT Y:LOCATE 1,1 : PRINT CHR$ (7):IF K<3 THEN 540
    550 COLOR 7,0
    560 X=0
    570 IF D$="Z" OR D$="z" THEN IF A$>"255" AND A$<"364" OR A$>"599" AND A$<"616" OR A$>"848" AND A$<"855" THEN RUN "SPYBA2.EXE"
    580 IF D$="Z" OR D$="z" THEN IF A$>"415" AND A$<"511" OR A$>"568" AND A$<"591" THEN RUN "SPYBA3.EXE"
    590 IF D$="Z" OR D$="z" THEN IF A$>"023" AND A$<"166" OR A$>"367" AND A$<"387" OR A$>"511" AND A$<"533" OR A$>"559" AND A$<"569" THEN RUN "SPYBA4.EXE"
    600 IF D$="Z" OR D$="z" THEN IF A$>"671" AND A$<"727" OR A$>"855" AND A$<"911" THEN RUN "SPYBA6.EXE"
    610 IF D$="Z" OR D$="z" THEN IF A$>"727" AND A$<"801" OR A$>"911" AND A$<"985" THEN RUN "SPYBA7.EXE"
    620 IF D$="E" OR D$="e" THEN AX$=MID$ (A$,1,4)
    630 IF D$="E" OR D$="e" THEN IF AX$>"0012" AND AX$<"0047" OR AX$>"0048" AND AX$<"0067" OR AX$>"0068" AND AX$<"0153" THEN RUN "SPYBB2.EXE"
    640 IF D$="E" OR D$="e" THEN IF AX$>"0152" AND AX$<"0212" OR AX$>"0213" AND AX$<"0242" OR AX$>"0885" AND AX$<"0912" OR AX$>"1097" AND AX$<"1104" THEN RUN "SPYBC2.EXE"
    650 IF D$="E" OR D$="e" THEN IF AX$>"0337" AND AX$<"0382" OR AX$>"0577" AND AX$<"0624" OR AX$>"0743" AND AX$<"0766" THEN RUN "SPYBA3.EXE"
    660 IF D$="E" OR D$="e" THEN IF AX$>"0257" AND AX$<"0296" OR AX$>"0385" AND AX$<"0430" OR AX$>"0481" AND AX$<"0524" THEN RUN "SPYBB4.EXE"
    670 IF D$="E" OR D$="e" THEN IF AX$>"0625" AND AX$<"0672" OR AX$>"0721" AND AX$<"0740" OR AX$>"0769" AND AX$<"0806" OR AX$>"0807" AND AX$<"0826" THEN RUN "SPYBC4.EXE"
    680 IF D$="E" OR D$="e" THEN IF AX$>"0297" AND AX$<"0336" OR AX$>"0431" AND AX$<"0460" OR AX$>"0529" AND AX$<"0578" OR AX$>"0673" AND AX$<"0712" OR AX$>"0827" AND AX$<"0866" THEN RUN "SPYBA5.EXE"
    690 IF D$="E" OR D$="e" THEN IF AX$>"1105" AND AX$<"1216" THEN RUN "SPYBA6.EXE"
    700 IF D$="E" OR D$="e" THEN IF AX$>"1217" AND AX$<"1364" THEN RUN "SPYBA7.EXE"
    710 IF D$="E" OR D$="e" THEN IF AX$>"0873" AND AX$<"0876" OR AX$>"0877" AND AX$<"0884" OR AX$>"1033" AND AX$<"1076" OR AX$>"0961" AND AX$<"0980" OR AX$>"0981" AND AX$<"0990" OR AX$>"0913" AND AX$<"0928" THEN RUN "SPYBB1.EXE"
    720 IF D$="T" OR D$="t" THEN AY$=MID$ (A$,1,3)
    730 IF D$="T" OR D$="t" THEN IF AY$="CAG" OR AY$="EAG" THEN RUN "SPYBA2.EXE"
    740 IF D$="T" OR D$="t" THEN IF AY$="EIT" THEN RUN "SPYBA3.EXE"
    750 IF D$="T" OR D$="t" THEN IF AY$="FC " OR AY$="CO " OR AY$="COI" THEN RUN "SPYBA4.EXE"
    760 IF D$="T" OR D$="t" THEN IF AY$="ZAP" OR AY$="SED" THEN RUN "SPYBA5.EXE"
    770 IF D$="T" OR D$="t" THEN IF AY$="PT " THEN RUN "SPYBA6.EXE"
    780 IF D$="T" OR D$="t" THEN IF AY$="PTX" THEN RUN "SPYBA7.EXE"
    790 IF D$="T" OR D$="t" THEN IF AY$="PCO" OR AY$="KAU" OR AY$="TRP" OR AY$="TRI" OR AY$="KMN" OR AY$="PIN" OR AY$="LIT" THEN RUN "SPYBB1.EXE"
    800 READ B$
    810 IF D$="Z" OR D$="z" THEN C$=LEFT$ (B$,3)
    820 IF C1$="FU" AND D$="E" THEN C$=MID$ (B$,21,4) ELSE IF D$="E" OR D$="e" THEN  C$=MID$ (B$,21,6)
    830 IF D$="T" OR D$="t" THEN C$=MID$ (B$,5,13)
    840 IF C1$="FU" AND D$="E/" THEN C$=MID$ (B$,33,4) ELSE IF D$="E/" THEN C$=MID$ (B$,33,6)
    850 W=0
    860 IF C$="FO" THEN D$="E/":RESTORE:LOCATE 22,60:PRINT "Recherche des TK/" :GOTO 800
    870 IF C$="FU" AND X=0  THEN LOCATE 22,60:PRINT "                 ":LOCATE 23,60:PRINT "Recherche RELAIS BAS":A1$=MID$ (A$,1,4):A$=A1$:D$="E" :RESTORE :X=1:C1$="FU"
    880 IF C$="FU" THEN 800
    890 IF C$="FI" OR C$="FI          (" THEN W=W+1:LOCATE 1,11: PRINT "                                     ":FOR Y=1 TO 100:NEXT Y :LOCATE 1,1:PRINT CHR$ (7) :LOCATE 1,11:PRINT A$;"  Mauvaise Commande":FOR I=1 TO 150:NEXT I :IF W<5 THEN 890
    900 IF C$="FI" OR C$="FI          (" THEN A$="":RESTORE:LOCATE 22,1:PRINT "                                                                              "
    910 IF C$="FI" OR C$="FI          (" THEN LOCATE 23,55:PRINT "                         ":IF D$="E/" THEN D$="E" : GOTO 220 ELSE GOTO 220
    920 IF A$=C$ THEN OPEN "MESSAGES" FOR INPUT AS #2:INPUT #2,D$:CLOSE #2
    930 IF A$=C$ THEN LOCATE 23,49:PRINT "                               " :C1$=""
    940 IF A$=C$ THEN LOCATE 22,1:PRINT "                                                                              ":LOCATE 22,2:PRINT B$:RESTORE:LOCATE 1,1:PRINT "                                                                              "
    950 IF A$=C$ THEN IF D$="e" OR D$="z" OR D$="t" THEN LPRINT B$:GOTO 220 ELSE GOTO 220
    960 GOTO 800
    970 IF D$="T" OR D$="t" THEN LOCATE 13,32: PRINT "CHOIX DU TEXTE":LOCATE 4,28:PRINT "Les Textes s'ecrivent"
    980 IF D$="T" OR D$="t" THEN COLOR 0,7
    990 IF D$="T" OR D$="t" THEN LOCATE 5,2:PRINT " CAG 317AC D ( , CAG X21 R   ( , LITAG 305 H ( , EAG 100A H  ( , KAG R 211T B("
    1000 IF D$="T" OR D$="t" THEN LOCATE 6,2:PRINT " AUAG 207 H  ( , LEAU 13 B   ( , EAU 21 A    ( , KAU 21 H    ( , DKPG 11 H   ("
    1010 IF D$="T" OR D$="t" THEN LOCATE 7,2:PRINT " RV 119 H    ( , ATR 119 H   ( , TRI 115 H   ( , AUATR 324 A ( , IVCTATR H   (":LOCATE 8,2:PRINT " CO 11 H     ( , CO 100 H    ( , COIN 304 H  ( , KPRCO H     ( , PCO 203 H   ("
    1020 IF D$="T" OR D$="t" THEN LOCATE 9,2:PRINT " ASN DI H    ( , C RCH AG C  ( , PIN 310 H   ( , APT 105 H   ( , TP 105 DA   ("
    1030 IF D$="T" OR D$="t" THEN LOCATE 10,2:PRINT " AXCAUTO 324H( , FC 102 O    ( , ZAP 100 H   ( , CANPN 93B H ( , SLD 122 P   ("
    1040 IF D$="T" OR D$="t" THEN LOCATE 11,2:PRINT " PT 81 NP    ( , PTX 882 P   ( , TZ T        ( , KMN 1MN H   ( , A SN AL B   ("
    1050 IF D$="T" OR D$="t" THEN LOCATE 12,2:PRINT " EIT 100 F   ( , SED 320 H   ( , SSSV1 BU S  ( , A AF 341 H  ( , RSSP 361 H  ("
    1060 IF D$="T" OR D$="t" THEN COLOR 7,0
    1070 IF D$="E" OR D$="e" THEN LOCATE 12,30:PRINT "CHOIX DES CONTROLES" :LOCATE 4,24 : PRINT "Les TK sont PAIR=P ou IMPAIR=I"
    1080 IF D$="E" OR D$="e" THEN COLOR 0,7
    1090 IF D$="E" OR D$="e" THEN LOCATE 5,2:PRINT "                                                                              ":LOCATE 6,2:PRINT " CO=P , COIN=P , FC=I , CAG (1-2)=P , CAG (3-X)=I sauf(305-317AC-318A-318B)=P "
    1100 IF D$="E" OR D$="e" THEN LOCATE 7,2:PRINT "      EAU=I , AUATR=I sauf(343-345)=P , ZAP=P , EIT=I , CANPN=I , APT=P       "
    1110 IF D$="E" OR D$="e" THEN LOCATE 8,2:PRINT "      SED=P , TR=P , KMN=P , AN=P , KAGR=P , LITAG=P , PIN=P , EAG=IouP       ":LOCATE 9,2:PRINT "                                                                              "
    1120 IF D$="E" OR D$="e" THEN COLOR 7,0
    1130 IF D$="Z" OR D$="z" THEN LOCATE 4,2:PRINT "              Les Commandes sont SIMPLES CODES ou DOUBLES CODES               ":COLOR 0,7
    1140 IF D$="Z" OR D$="z" THEN LOCATE 5,2:PRINT "                                                                              ":LOCATE 6,2:PRINT "     DOUBLES CODES = KPRCO-->CO : KPRFC-->FC : KPRPT-->PT : KPRPT-->PTX       "
    1150 IF D$="Z" OR D$="z" THEN LOCATE 7,2:PRINT "     SIMPLES CODES = EIT : CAG : AUATR : EAU : LEAU : T Z : T AG : SLD        "
    1160 IF D$="Z" OR D$="z" THEN LOCATE 8,2:PRINT "                   = AAF : C RCH AG : APT : TP : SN DI : CANPN : A SN AL      "
    1170 IF D$="Z" OR D$="z" THEN LOCATE 9,2:PRINT "                                                                              ":COLOR 7,0
    1180 RETURN
    1190 DATA  000=KPRCO H     (TK 0001=1  TK/ 0002=0),
    1200 DATA  002=ASN DI H    (TK 0011=1  TK/ 0012=0),
    1210 DATA  008=KPRFC H     (TK 0003=1  TK/ 0004=0),
    1220 DATA  014=AUATR 328 I (TK 0048=0  TK/ 0047=1),
    1230 DATA  015=AUATR 328 A (TK 0048=1  TK/ 0047=0),
    1240 DATA  016=KPRDivers H (TK 0005=1  TK/ 0006=0),
    1250 DATA  ****IVCTATR H   (TK 0009=1  TK/ 0010=0),
    1260 DATA  017=AUATR 343 I (TK 0068=0  TK/ 0067=1),
    1270 DATA  018=AUATR 343 A (TK 0068=1  TK/ 0067=0),
    1280 DATA  019=AUATR 345 I (TK 0116=0  TK/ 0115=1),
    1290 DATA  020=AUATR 345 A (TK 0116=1  TK/ 0115=0),
    1300 DATA  021=AUATR 361 I (TK 0213=0  TK/ 0212=1),
    1310 DATA  022=AUATR 361 A (TK 0213=1  TK/ 0212=0),
    1320 DATA  176=CANPN 93B H (TK 1015=1  TK/ 1014=0),
    1330 DATA  177=CANPN 97B H (TK 1017=1  TK/ 1016=0),
    1340 DATA  186=CANPN 93B B (TK 1015=0  TK/ 1014=1),
    1350 DATA  187=CANPN 97B B (TK 1017=0  TK/ 1016=1),
    1360 DATA  178=SSSV1 BU S  (TK 1010=1  TK/ 1011=0),
    1370 DATA  179=SSSV1 BU NS (TK 1010=0  TK/ 1011=1),
    1380 DATA  180=SSSV2 BU S  (TK 1012=1  TK/ 1013=0),
    1390 DATA  181=SSSV2 BU NS (TK 1012=0  TK/ 1013=1),
    1400 DATA  ****AUAG 207 H  (TK 1076=1  TK/ 1077=0),
    1410 DATA  387=TP 105 DA   (TK 0478=1  TK/ 0479=0),
    1420 DATA  388=TP 105 TP   (TK 0478=0  TK/ 0479=1),
    1430 DATA  389=TP 124 DA   (TK 0480=1  TK/ 0481=0),
    1440 DATA  390=TP 124 TP   (TK 0480=0  TK/ 0481=1),
    1450 DATA  391=APT 105 H   (TK 0460=1  TK/ 0461=0),
    1460 DATA  392=APT 109 H   (TK 0462=1  TK/ 0463=0),
    1470 DATA  393=APT 117 H   (TK 0464=1  TK/ 0465=0),
    1480 DATA  394=APT 119 H   (TK 0466=1  TK/ 0467=0),
    1490 DATA  395=APT 121 H   (TK 0468=1  TK/ 0469=0),
    1500 DATA  396=APT 123 H   (TK 0470=1  TK/ 0471=0),
    1510 DATA  397=APT 125 H   (TK 0472=1  TK/ 0473=0),
    1520 DATA  398=APT 201 H   (TK 0474=1  TK/ 0475=0),
    1530 DATA  399=APT 204 H   (TK 0476=1  TK/ 0477=0),
    1540 DATA  400=AUATR 244 I (TK 0243=0  TK/ 0242=1),
    1550 DATA  401=AUATR 244 A (TK 0243=1  TK/ 0242=0),
    1560 DATA  402=AUATR 246 I (TK 0245=0  TK/ 0244=1),
    1570 DATA  403=AUATR 246 A (TK 0245=1  TK/ 0244=0),
    1580 DATA  404=AUATR 251 I (TK 0247=0  TK/ 0246=1),
    1590 DATA  405=AUATR 251 A (TK 0247=1  TK/ 0246=0),
    1600 DATA  406=AUATR 256 I (TK 0249=0  TK/ 0248=1),
    1610 DATA  407=AUATR 256 A (TK 0249=1  TK/ 0248=0),
    1620 DATA  408=AUATR 311 I (TK 0251=0  TK/ 0250=1),
    1630 DATA  409=AUATR 311 A (TK 0251=1  TK/ 0250=0),
    1640 DATA  410=AUATR 312 I (TK 0253=0  TK/ 0252=1),
    1650 DATA  411=AUATR 312 A (TK 0253=1  TK/ 0252=0),
    1660 DATA  412=AUATR 320 I (TK 0255=0  TK/ 0254=1),
    1670 DATA  413=AUATR 320 A (TK 0255=1  TK/ 0254=0),
    1680 DATA  414=AUATR 321 I (TK 0257=0  TK/ 0256=1),
    1690 DATA  415=AUATR 321 A (TK 0257=1  TK/ 0256=0),
    1700 DATA  539=APT 208 H   (TK 0712=1  TK/ 0713=0),
    1710 DATA  540=APT 210 H   (TK 0714=1  TK/ 0715=0),
    1720 DATA  541=APT 213 H   (TK 0716=1  TK/ 0717=0),
    1730 DATA  542=APT 215 H   (TK 0718=1  TK/ 0719=0),
    1740 DATA  543=APT 320 H   (TK 0720=1  TK/ 0721=0),
    1750 DATA  543=APT 322 H   (TK 0806=1  TK/ 0807=0),
    1760 DATA  544=AUATR 124 I (TK 0525=0  TK/ 0524=1),
    1770 DATA  545=AUATR 124 A (TK 0525=1  TK/ 0524=0),
    1780 DATA  546=AUATR 126 I (TK 0527=0  TK/ 0526=1),
    1790 DATA  547=AUATR 126 A (TK 0527=1  TK/ 0526=0),
    1800 DATA  548=AUATR 132 I (TK 0529=0  TK/ 0528=1),
    1810 DATA  549=AUATR 132 A (TK 0529=1  TK/ 0528=0),
    1820 DATA  550=AUATR 201 I (TK 0573=0  TK/ 0572=1),
    1830 DATA  551=AUATR 201 A (TK 0573=1  TK/ 0572=0),
    1840 DATA  591=APT 324 H   (TK 0866=1  TK/ 0867=0),
    1850 DATA  592=APT 326 H   (TK 0868=1  TK/ 0869=0),
    1860 DATA  593=APT 203 H   (TK 0870=1  TK/ 0871=0),
    1870 DATA  ****LEAU 13 B   (TK 0954=0  TK/ 0955=1) (ou DKPG H),
    1880 DATA  597=DKPG 13 H   (TK 0954=0  TK/ 0955=1) (ou LEAU B),
    1890 DATA  ****LEAU 21 B   (TK 0956=0  TK/ 0957=1) (ou DKPG H),
    1900 DATA  598=DKPG 21 H   (TK 0956=0  TK/ 0957=1) (ou LEAU B),
    1910 DATA  616=EAU 11 I    (TK 0933=0  TK/ 0932=1),
    1920 DATA  617=EAU 12 I    (TK 0935=0  TK/ 0934=1),
    1930 DATA  618=EAU 13 I    (TK 0937=0  TK/ 0936=1),
    1940 DATA  619=EAU 21 I    (TK 0939=0  TK/ 0938=1),
    1950 DATA  620=EAU 31 I    (TK 0941=0  TK/ 0940=1),
    1960 DATA  621=EAU 33 I    (TK 0943=0  TK/ 0942=1),
    1970 DATA  622=EAU 41 I    (TK 0945=0  TK/ 0944=1),
    1980 DATA  623=EAU 11 A    (TK 0933=1  TK/ 0932=0),
    1990 DATA  624=EAU 12 A    (TK 0935=1  TK/ 0934=0),
    2000 DATA  625=EAU 13 A    (TK 0937=1  TK/ 0936=0),
    2010 DATA  626=EAU 21 A    (TK 0939=1  TK/ 0938=0),
    2020 DATA  627=EAU 31 A    (TK 0941=1  TK/ 0940=0),
    2030 DATA  628=EAU 33 A    (TK 0943=1  TK/ 0942=0),
    2040 DATA  629=EAU 41 A    (TK 0945=1  TK/ 0944=0),
    2050 DATA  632=AUATR 202 I (TK 0741=0  TK/ 0740=1),
    2060 DATA  633=AUATR 202 A (TK 0741=1  TK/ 0740=0),
    2070 DATA  634=AUATR 223 I (TK 0743=0  TK/ 0742=1),
    2080 DATA  635=AUATR 223 A (TK 0743=1  TK/ 0742=0),
    2090 DATA  636=AUATR 232 I (TK 0767=0  TK/ 0766=1),
    2100 DATA  637=AUATR 232 A (TK 0767=1  TK/ 0766=0),
    2110 DATA  638=AUATR 241 I (TK 0769=0  TK/ 0768=1),
    2120 DATA  639=AUATR 241 A (TK 0769=1  TK/ 0768=0),
    2130 DATA  640=AUATR 81 I  (TK 0995=0  TK/ 0994=1),
    2140 DATA  641=AUATR 81 A  (TK 0995=1  TK/ 0994=0),
    2150 DATA  642=AUATR 85 I  (TK 0999=0  TK/ 0998=1),
    2160 DATA  643=AUATR 85 A  (TK 0999=1  TK/ 0998=0),
    2170 DATA  644=AUATR 101 I (TK 1003=0  TK/ 1002=1),
    2180 DATA  645=AUATR 101 A (TK 1003=1  TK/ 1002=0),
    2190 DATA  646=AUATR 102 I (TK 1007=0  TK/ 1006=1),
    2200 DATA  647=AUATR 102 A (TK 1007=1  TK/ 1006=0),
    2210 DATA  648=AUATR 112 I (TK 0997=0  TK/ 0996=1),
    2220 DATA  649=AUATR 112 A (TK 0997=1  TK/ 0996=0),
    2230 DATA  650=AUATR 113 I (TK 1001=0  TK/ 1000=1),
    2240 DATA  651=AUATR 113 A (TK 1001=1  TK/ 1000=0),
    2250 DATA  652=AUATR 117 I (TK 1005=0  TK/ 1004=1),
    2260 DATA  653=AUATR 117 A (TK 1005=1  TK/ 1004=0),
    2270 DATA  654=AUATR 123 I (TK 1009=0  TK/ 1008=1),
    2280 DATA  655=AUATR 123 A (TK 1009=1  TK/ 1008=0),
    2290 DATA  656=A SN AL B   (TK 1018=0  TK/ 1019=1),
    2300 DATA  657=C RCH AG A  (TK 1026=1  TK/ 1027=0),
    2310 DATA  658=C RCH AG C  (TK 1026=0  TK/ 1027=1),
    2320 DATA  659=SLD 120 P   (TK 1020=1  TK/ 1021=0),
    2330 DATA  660=SLD 122 P   (TK 1022=1  TK/ 1023=0),
    2340 DATA  ****RSSP 361 H  (TK 1104=1  TK/ 1105=0) (ou A AF 341 H),
    2350 DATA  661=A AF 341 H  (TK 1104=1  TK/ 1105=0) (ou RSSP 361 H),
    2360 DATA  ****SSI 345 H   (TK 1024=1  TK/ 1025=0) (ou A AF 326 H),
    2370 DATA  662=A AF 326 H  (TK 1024=1  TK/ 1025=0) (ou SSI 345 H),
    2380 DATA  ****SSI 142 H   (TK 1084=1  TK/ 1085=0) (ou A AF 201 H),
    2390 DATA  663=A AF 201 H  (TK 1084=1  TK/ 1085=0) (ou SSI 142 H),
    2400 DATA  ****SSP 142 H   (TK 1086=1  TK/ 1087=0) (ou A AF 124 H),
    2410 DATA  664=A AF 124 H  (TK 1086=1  TK/ 1087=0) (ou SSP 142 H),
    2420 DATA  ****LEAU 11 B   (TK 0950=0  TK/ 0951=1) (ou DKPG H),
    2430 DATA  665=DKPG 11 H   (TK 0950=0  TK/ 0951=1) (ou LEAU B),
    2440 DATA  ****LEAU 12 B   (TK 0952=0  TK/ 0953=1) (ou DKPG H),
    2450 DATA  666=DKPG 12 H   (TK 0952=0  TK/ 0953=1) (ou LEAU B),
    2460 DATA  ****LEAU 33 B   (TK 0958=0  TK/ 0959=1) (ou DKPG H),
    2470 DATA  667=DKPG 33 H   (TK 0958=0  TK/ 0959=1) (ou LEAU B),
    2480 DATA  668=TZ T        (TK 1030=1  TK/ 1031=0),
    2490 DATA  669=TZ NT       (TK 1030=0  TK/ 1031=1),
    2500 DATA  670=TAG T       (TK 1032=1  TK/ 1033=0),
    2510 DATA  671=TAG NT      (TK 1032=0  TK/ 1033=1),
    2520 DATA  848=KPRPT H     (TK 0007=1  TK/ 0008=0),
    2530 DATA  FI
    2540 DATA  ****AXCAUTO 324H(TK 1028=1  TK/ 1029=0),
    2550 DATA  ****KAG R 211T B(TK 1078=0  TK/ 1079=1),
    2560 DATA  ****RV 119 H    (TK 1080=1  TK/ 1081=0),
    2570 DATA  ********************FO
    2580 DATA  ********************************FU
    2590 DATA  ********************************FI
    2600 DATA  ****FI          (
    
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    J'y jetterai un coup d'œil. Au passage, BASIC permet d'utiliser le zéro comme numéro de ligne mais il a un rôle autre avec la gestion d'erreur des versions PC (ON ERROR GOTO 0 par ex. pour désactiver l'interception d'erreur). A l'opposé de beaucoup de personnes, je trouve que les numéros de ligne aident à la structuration (en 20.000, on trouve le sous-programme rattaché au module en 2000).


    J'ai failli oublier :
    Assembleur facile collection Marabout
    Petit livre intéressant avec un descriptif et une référence rapide des principales instructions du 8086. On en déduit que les exemples à assembler par MASM sont destinés au DOS 2. Malheureusement, il n'explique pas comment créer des programmes à partir de plusieurs fichiers objets. Heureusement, certains livres traitant de MASM 5.x se trouvent encore dans les brocantes et à l'aide d'Internet. Pour coder pour des assembleurs plus anciens (MASM 4 maximum), on trouve de bonnes sources sur Internet mais il faut aussi faire preuve d'imagination.

    Sur ce, bonnes fêtes.

  15. #15
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    Décembre 2010
    Messages
    14 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14 939
    Points : 23 253
    Points
    23 253
    Billets dans le blog
    10
    Par défaut
    Joyeux Noël à tous !

    Sur une idée originale de Cathy le 24.12.2008

    __________________________________## JE VIENS
    __________________________________###
    _________________________________#__##
    ________________________________##__##_
    ___________________________#######___#######
    __________________________##______________###
    ____________________________##__________### DÉPOSER
    _____________________________###_______###
    _____________________#________##______###
    ____________________###_______#___##___##
    ____________________#_#_______#_######__#_____####
    ____________________#_#______#####__######___#____# CE SAPIN
    ____________________#_#______#__##__###_##__##____#
    ___________________##_#________##_____##_____##__##
    __________________#__##_##____##______###_____####_____#
    ____________________##########__________########_#____###
    ____________#####___##__________________________##____#_#
    ___________##___##__###________________________###____#_# DE NOEL
    ___________#____##____###________#___________###______#_#
    ____________#___#_______######___#______#######_______#_#__
    _____________####_____###_______#_#__________###____#####_#
    ____________##__#######_________#_#____________#######__##
    ________#___##__________________#_#_____________________#
    _______###___##_________________#_#____________________## SUR CE
    _______#_#____##________________#_#________##_________##
    _______#_#_____####___#####___#_###_##_______###___####_______###
    _______#_#_______########______#####___________######_______##__##
    _______#_#_________##____________________________##_________#____#
    _____#######_____###________#________________#____###_______##___#
    _____#############__________####_______####_###____##############SITE
    ______#___####___________#_____#__######____#_#_________####__##
    ______##________________###___##____#_______#_#_______________##
    ______##________________#_#___##___##_______#_#_______________##
    ________##______________#_#_____####________#_#____________###____#
    ___#_____####___________#_#________________##_##_________####____###
    __###_______#############_#_______________##___###########_______#_# POUR
    __#_#__________######__##_##________#_____________#####__________#_#
    __#_#_________##______##___##_______#________________###_________#_#
    __#_#______####____________________#_#_________________###_______#_#
    __#_#___#####_____###_________###__#_#_##____________#___#####_######
    #_###_####__________###########____#_#__##############______##########VOUS
    _######_________________###________#_#_____#######_________________##
    __##_______________________________#_#_____________#______________##
    __###____________________________#######___________#_____________###
    ____###_______________#___________######_______#__#_#__________###
    ______######_______###__________________________###_#______####
    _________#############____####________####______###_######### SOUHAITER
    _____________###__##_________##########___________#_#
    ____________##_####_______________##______________#_##
    ___________#____##______________######__________#######
    ___________##___##____________####___###__________###_##
    ____________######___________###______###___________###
    ________________#############___________############# UN JOYEUX
    __________________########__________________########
    ________________####______________________________####
    _______________#######___________________________######
    ______________###__#___###___________________##___#__###
    _____________###__#_##__#____###______###____#__##_#__###
    ____________###___##____#___#_________#__##__#____##___### NOEL A TOUS
    ____________##__________#_#_____##__##_____#_#__________##
    ____________##__________##_______#__#_______##__________##LES UTILISATEURS
    ____________#####_________________##________________#####
    _______________#########______________________######### DU SITE DE __________________##################################
    __________________________################## DEVELOPPEZ.NET

    ---------------------------------------JML19------------ LE CLOWN DE DEVELOPPEZ.NET
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/05/2007, 15h30
  2. programmer un plug-in pour combustion (discreet)
    Par fabyyy dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 14/12/2006, 16h54
  3. Quel est le langage de programmation le plus pertinent pour du traitement audio ?
    Par LeTouriste dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 02/11/2006, 11h42
  4. comment deployer un programme fait avec jbuilder
    Par showmetheway dans le forum JBuilder
    Réponses: 6
    Dernier message: 23/09/2003, 01h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo