about summary refs log blame commit diff stats
path: root/html/apps/pack.subx.html
blob: 86267ee6555fce4c0107a0978a995f52836f36c2 (plain) (tree)
1
2
3
4
5
6
7
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



                                                                                          
                                  

                                                









                                                                                                      

                                                             
           
                                  
                             
                                
                                                                           
                                                      
                             
                                                              















                                                                                 
                                                  















                                                                              
                                                                                                                                 
                         
                                                                                                                                                        

                                                                                                                                                    
                                                                           
                                                                                   
                                                                                                                                                                      
                                                                                                                                      
                                                                                            
                                                                                                                        




                                                                                                                                                       






                                                                                                                                                                                                                              



                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                  
                                                                                                

                                                                                                                                                  





                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                               

                                                                                                                                                       







                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                   
                                                                         
                                                                                                 

                                                                                            
                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                 

                                                                                                    






                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                     





                                                                                                                                                      
                                                                                                         

                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                 
                                                                     
                                                                                            






















                                                                                                                                                                                      
                                                                                                                                                                                                          














                                                                                                                                              
                                                                                                           

























                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                         














                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                           

                                                                                                                                                                                                                                                                                                                                                                                            

                                                                                                                                                                                                                                                                                                                     




                                                                                                             
                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                           









                                                                                                                                                                                                                                                                                                                                                                                          


                                                                                                                                                                                                                                                                                                                     










                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                            




                                                                                                              
                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                     










                                                                                                                                                                                                                                                                                                                                                                                               

                                                                                           




                                                                                                          
                                                                                                                     



                                                                                                                                                                                                                                                                                                                                                                                           

                                                                                         








                                                                                                                                                                                                                                                                                                                                                                                              

                                                                                                            








                                                                                                                                                                                                                                                                                                                                                                                              

                                                                                                            




                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                    


                                                                                                                                                                                                                                                                                                                                                                                          

                                                                                                            






                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                        











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                   





































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                  



                                                                                                                                      
                                                                                                          











                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                     










                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                  













































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                  



                                                                                                                                      
                                                                                                          











                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                              










                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                       













































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                  



                                                                                                                                      
                                                                                                          











                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                         










                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                        
































































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                  



                                                                                                                                      
                                                                                                          


                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                     








                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                              







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                              







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                              










                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                               


















































































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                  



                                                                                                                                      
                                                                                                          







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                     








                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                     







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                     







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                     







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                     







                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                     



















                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                              




















                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                     





                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                    

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                 




































                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                     










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                         











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                






                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                


                                                                                                                      
                                                                                                                                              



                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                           

































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      





























































































































































































































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      




























                                                                                                                                                                                                                                                                                                                                                                                                

                                                                                                                   
                                                                                                                                     

                                                                                                                   


























                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                     







































                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                     



















































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                           



















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                  











































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                      







                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                     









































                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                            
















































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                     









































                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                            


































                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                     









































                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                            




























                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                          

                                                                                                                                                               
                                                                                                          




































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                      

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      





                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                     

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                               












                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                           






                                                                                                                                  
                                                                                                                         


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                              






                                                                                                                                   
                                                                                                                         


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                              






                                                                                                                                  
                                                                                                                         


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                              






                                                                                                                                    
                                                                                                                         



                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                          













                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                              
















                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                  





                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                  


























                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                        

                                                                                                                                                                
                                                                                                        




































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                      


                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      




                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                     

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                             












                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                         






                                                                                                                                    
                                                                                                                         


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                            






                                                                                                                                   
                                                                                                                         


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                            






                                                                                                                                    
                                                                                                                         



                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                        













                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                            
















                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                





                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                  


























                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                              

                                                                                                                                       
                                                                                              


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                      

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      





                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                     

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                              








                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                          






                                                                                                                                     
                                                                                                                         











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                              






                                                                                                                                          
                                                                                                                         











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                              






                                                                                                                                    
                                                                                                                         



                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                         






                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           
























                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                              

                                                                                                                                      
                                                                                              


















                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                      

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      





                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                     

                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      










                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                             








                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                         






                                                                                                                                    
                                                                                                                         











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                             






                                                                                                                                    
                                                                                                                         











                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           


                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                             






                                                                                                                                   
                                                                                                                         



                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                        






                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                           































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                     





































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      

































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      




































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      



































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      




































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      




































































                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                      
























































                                                                                                                                                                                                                                                                                                                                                                                                                      



                                     
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/pack.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.subxTest { color: #5f8700; }
.SpecialChar { color: #d70000; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Folded { color: #080808; background-color: #949494; }
.Constant { color: #008787; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/apps/pack.subx'>https://github.com/akkartik/mu/blob/master/apps/pack.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">   1 </span><span class="subxComment"># Read a text file of SubX instructions from stdin, and convert it into a list</span>
<span id="L2" class="LineNr">   2 </span><span class="subxComment"># of whitespace-separated ascii hex bytes on stdout. Label definitions and</span>
<span id="L3" class="LineNr">   3 </span><span class="subxComment"># uses are left untouched.</span>
<span id="L4" class="LineNr">   4 </span><span class="subxComment">#</span>
<span id="L5" class="LineNr">   5 </span><span class="subxComment"># To run:</span>
<span id="L6" class="LineNr">   6 </span><span class="subxComment">#   $ ./subx translate init.linux 0*.subx apps/subx-params.subx apps/pack.subx  -o apps/pack</span>
<span id="L7" class="LineNr">   7 </span><span class="subxComment">#   $ echo '05/add-to-eax 0x20/imm32'  |./subx run apps/pack</span>
<span id="L8" class="LineNr">   8 </span><span class="subxComment"># Expected output:</span>
<span id="L9" class="LineNr">   9 </span><span class="subxComment">#   05 20 00 00 00  # 05/add-to-eax 0x20/imm32</span>
<span id="L10" class="LineNr">  10 </span><span class="subxComment"># The original instruction gets included as a comment at the end of each</span>
<span id="L11" class="LineNr">  11 </span><span class="subxComment"># converted line.</span>
<span id="L12" class="LineNr">  12 </span><span class="subxComment">#</span>
<span id="L13" class="LineNr">  13 </span><span class="subxComment"># There's zero error-checking. For now we assume the input program is valid.</span>
<span id="L14" class="LineNr">  14 </span><span class="subxComment"># We'll continue to rely on the C++ version for error messages.</span>
<span id="L15" class="LineNr">  15 </span>
<span id="L16" class="LineNr">  16 </span>== code
<span id="L17" class="LineNr">  17 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L18" class="LineNr">  18 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L19" class="LineNr">  19 </span><span class="subxS1Comment"># . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
<span id="L20" class="LineNr">  20 </span>
<span id="L21" class="LineNr">  21 </span><span class="SpecialChar">Entry</span>:  <span class="subxComment"># run tests if necessary, convert stdin if not</span>
<span id="L22" class="LineNr">  22 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L23" class="LineNr">  23 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L24" class="LineNr">  24 </span>
<span id="L25" class="LineNr">  25 </span>    <span class="subxComment"># initialize heap</span>
<span id="L26" class="LineNr">  26 </span>    <span class="subxS1Comment"># . Heap = new-segment(Heap-size)</span>
<span id="L27" class="LineNr">  27 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L28" class="LineNr">  28 </span>    68/push  <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span>/imm32
<span id="L29" class="LineNr">  29 </span>    68/push  <span class="SpecialChar"><a href='../069allocate.subx.html#L29'>Heap-size</a></span>/imm32
<span id="L30" class="LineNr">  30 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L31" class="LineNr">  31 </span>    e8/call  <a href='../053new-segment.subx.html#L41'>new-segment</a>/disp32
<span id="L32" class="LineNr">  32 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L33" class="LineNr">  33 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L34" class="LineNr">  34 </span>
<span id="L35" class="LineNr">  35 </span>    <span class="subxH1Comment"># - if argc &gt; 1 and argv[1] == &quot;test&quot;, then return run_tests()</span>
<span id="L36" class="LineNr">  36 </span>    <span class="subxComment"># if (argc &lt;= 1) goto interactive</span>
<span id="L37" class="LineNr">  37 </span>    81          7/subop/compare     1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0/disp8         1/imm32           <span class="subxComment"># compare *ebp</span>
<span id="L38" class="LineNr">  38 </span>    7e/jump-if-lesser-or-equal  $subx-pack-main:interactive/disp8
<span id="L39" class="LineNr">  39 </span>    <span class="subxComment"># if (!kernel-string-equal?(argv[1], &quot;test&quot;)) goto interactive</span>
<span id="L40" class="LineNr">  40 </span>    <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], &quot;test&quot;)</span>
<span id="L41" class="LineNr">  41 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L42" class="LineNr">  42 </span>    68/push  <span class="Constant">&quot;test&quot;</span>/imm32
<span id="L43" class="LineNr">  43 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L44" class="LineNr">  44 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L45" class="LineNr">  45 </span>    e8/call  <a href='../052kernel-string-equal.subx.html#L31'>kernel-string-equal?</a>/disp32
<span id="L46" class="LineNr">  46 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L47" class="LineNr">  47 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L48" class="LineNr">  48 </span>    <span class="subxS1Comment"># . if (eax == 0) goto interactive</span>
<span id="L49" class="LineNr">  49 </span>    3d/compare-eax-and  0/imm32
<span id="L50" class="LineNr">  50 </span>    74/jump-if-equal  $subx-pack-main:interactive/disp8
<span id="L51" class="LineNr">  51 </span>    <span class="subxComment"># run-tests()</span>
<span id="L52" class="LineNr">  52 </span>    e8/call  run-tests/disp32
<span id="L53" class="LineNr">  53 </span>    <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
<span id="L54" class="LineNr">  54 </span>    8b/copy                         0/mod/indirect  5/rm32/.disp32           <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx   <span class="SpecialChar"><a href='../051test.subx.html#L90'>Num-test-failures</a></span>/disp32          <span class="subxComment"># copy *Num-test-failures to ebx</span>
<span id="L55" class="LineNr">  55 </span>    eb/jump  $subx-pack-main:end/disp8
<span id="L56" class="LineNr">  56 </span><span class="Constant">$subx-pack-main:interactive</span>:
<span id="L57" class="LineNr">  57 </span>    <span class="subxH1Comment"># - otherwise convert stdin</span>
<span id="L58" class="LineNr">  58 </span>    <span class="subxComment"># var ed/eax : exit-descriptor</span>
<span id="L59" class="LineNr">  59 </span>    81          5/subop/subtract    3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># subtract from esp</span>
<span id="L60" class="LineNr">  60 </span>    89/copy                         3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to eax</span>
<span id="L61" class="LineNr">  61 </span>    <span class="subxComment"># configure ed to really exit()</span>
<span id="L62" class="LineNr">  62 </span>    <span class="subxS1Comment"># . ed-&gt;target = 0</span>
<span id="L63" class="LineNr">  63 </span>    c7          0/subop/copy        0/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># copy to *eax</span>
<span id="L64" class="LineNr">  64 </span>    <span class="subxComment"># subx-pack(Stdin, Stdout, Stderr, ed)</span>
<span id="L65" class="LineNr">  65 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L66" class="LineNr">  66 </span>    50/push-eax/ed
<span id="L67" class="LineNr">  67 </span>    68/push  <span class="SpecialChar"><a href='../065write-buffered.subx.html#L213'>Stderr</a></span>/imm32
<span id="L68" class="LineNr">  68 </span>    68/push  <span class="SpecialChar"><a href='../064write-byte.subx.html#L10'>Stdout</a></span>/imm32
<span id="L69" class="LineNr">  69 </span>    68/push  <span class="SpecialChar"><a href='../061read-byte.subx.html#L14'>Stdin</a></span>/imm32
<span id="L70" class="LineNr">  70 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L71" class="LineNr">  71 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L72" class="LineNr">  72 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L73" class="LineNr">  73 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L74" class="LineNr">  74 </span>    <span class="subxComment"># syscall(exit, 0)</span>
<span id="L75" class="LineNr">  75 </span>    bb/copy-to-ebx  0/imm32
<span id="L76" class="LineNr">  76 </span><span class="Constant">$subx-pack-main:end</span>:
<span id="L77" class="LineNr">  77 </span>    b8/copy-to-eax  1/imm32/exit
<span id="L78" class="LineNr">  78 </span>    cd/syscall  0x80/imm8
<span id="L79" class="LineNr">  79 </span>
<span id="L80" class="LineNr">  80 </span><span class="subxH1Comment"># - big picture</span>
<span id="L81" class="LineNr">  81 </span><span class="subxComment"># We'll operate on each line/instruction in isolation. That way we only need to</span>
<span id="L82" class="LineNr">  82 </span><span class="subxComment"># allocate memory for converting a single instruction.</span>
<span id="L83" class="LineNr">  83 </span><span class="subxComment">#</span>
<span id="L84" class="LineNr">  84 </span><span class="subxComment"># To pack an entire file, convert every segment in it</span>
<span id="L85" class="LineNr">  85 </span><span class="subxComment"># To convert a code segment, convert every instruction (line) until the next segment header</span>
<span id="L86" class="LineNr">  86 </span><span class="subxComment"># To convert a non-data segment, convert every word until the next segment header</span>
<span id="L87" class="LineNr">  87 </span><span class="subxComment">#</span>
<span id="L88" class="LineNr">  88 </span><span class="subxComment"># primary state: line</span>
<span id="L89" class="LineNr">  89 </span><span class="subxComment">#   stream of 512 bytes; abort if it ever overflows</span>
<span id="L90" class="LineNr">  90 </span>
<span id="L91" class="LineNr">  91 </span><span class="subxComment"># conceptual hierarchy within a line:</span>
<span id="L92" class="LineNr">  92 </span><span class="subxComment">#   line = words separated by ' ', maybe followed by comment starting with '#'</span>
<span id="L93" class="LineNr">  93 </span><span class="subxComment">#   word = datum until '/', then 0 or more metadata separated by '/'</span>
<span id="L94" class="LineNr">  94 </span><span class="subxComment">#</span>
<span id="L95" class="LineNr">  95 </span><span class="subxComment"># we won't bother saving the internal structure of lines; reparsing should be cheap using three primitives:</span>
<span id="L96" class="LineNr">  96 </span><span class="subxComment">#   next-token(stream, delim char) -&gt; slice (start, end pointers)</span>
<span id="L97" class="LineNr">  97 </span><span class="subxComment">#   next-token-from-slice(start, end, delim char) -&gt; slice</span>
<span id="L98" class="LineNr">  98 </span><span class="subxComment">#   slice-equal?(slice, string)</span>
<span id="L99" class="LineNr">  99 </span>
<span id="L100" class="LineNr"> 100 </span><span class="subxFunction">subx-pack</span>:  <span class="subxComment"># in : (address buffered-file), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L101" class="LineNr"> 101 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L102" class="LineNr"> 102 </span>    <span class="subxComment">#   var line = new-stream(512, 1)</span>
<span id="L103" class="LineNr"> 103 </span>    <span class="subxComment">#   var in-code? = false</span>
<span id="L104" class="LineNr"> 104 </span>    <span class="subxComment">#   while true</span>
<span id="L105" class="LineNr"> 105 </span>    <span class="subxComment">#     clear-stream(line)</span>
<span id="L106" class="LineNr"> 106 </span>    <span class="subxComment">#     read-line-buffered(in, line)</span>
<span id="L107" class="LineNr"> 107 </span>    <span class="subxComment">#     if (line-&gt;write == 0) break             # end of file</span>
<span id="L108" class="LineNr"> 108 </span>    <span class="subxComment">#     var word-slice = next-word(line)</span>
<span id="L109" class="LineNr"> 109 </span>    <span class="subxComment">#     if slice-empty?(word-slice)             # whitespace</span>
<span id="L110" class="LineNr"> 110 </span>    <span class="subxComment">#       write-stream-data(out, line)</span>
<span id="L111" class="LineNr"> 111 </span>    <span class="subxComment">#     else if (slice-equal?(word-slice, &quot;==&quot;))</span>
<span id="L112" class="LineNr"> 112 </span>    <span class="subxComment">#       word-slice = next-word(line)</span>
<span id="L113" class="LineNr"> 113 </span>    <span class="subxComment">#       in-code? = slice-equal?(word-slice, &quot;code&quot;)</span>
<span id="L114" class="LineNr"> 114 </span>    <span class="subxComment">#       write-stream-data(out, line)</span>
<span id="L115" class="LineNr"> 115 </span>    <span class="subxComment">#     else if (in-code?)</span>
<span id="L116" class="LineNr"> 116 </span>    <span class="subxComment">#       rewind-stream(line)</span>
<span id="L117" class="LineNr"> 117 </span>    <span class="subxComment">#       convert-instruction(line, out)</span>
<span id="L118" class="LineNr"> 118 </span>    <span class="subxComment">#     else</span>
<span id="L119" class="LineNr"> 119 </span>    <span class="subxComment">#       rewind-stream(line)</span>
<span id="L120" class="LineNr"> 120 </span>    <span class="subxComment">#       convert-data(line, out)</span>
<span id="L121" class="LineNr"> 121 </span>    <span class="subxComment">#   flush(out)</span>
<span id="L122" class="LineNr"> 122 </span>    <span class="subxComment">#</span>
<span id="L123" class="LineNr"> 123 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L124" class="LineNr"> 124 </span>    55/push-ebp
<span id="L125" class="LineNr"> 125 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L126" class="LineNr"> 126 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L127" class="LineNr"> 127 </span>    50/push-eax
<span id="L128" class="LineNr"> 128 </span>    51/push-ecx
<span id="L129" class="LineNr"> 129 </span>    52/push-edx
<span id="L130" class="LineNr"> 130 </span>    53/push-ebx
<span id="L131" class="LineNr"> 131 </span>    <span class="subxComment"># var line/ecx : (address stream byte) = stream(512)</span>
<span id="L132" class="LineNr"> 132 </span>    81          5/subop/subtract    3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x200/imm32       <span class="subxComment"># subtract from esp</span>
<span id="L133" class="LineNr"> 133 </span>    68/push  0x200/imm32/length
<span id="L134" class="LineNr"> 134 </span>    68/push  0/imm32/read
<span id="L135" class="LineNr"> 135 </span>    68/push  0/imm32/write
<span id="L136" class="LineNr"> 136 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L137" class="LineNr"> 137 </span>    <span class="subxComment"># var word-slice/edx = {0, 0}</span>
<span id="L138" class="LineNr"> 138 </span>    68/push  0/imm32/end
<span id="L139" class="LineNr"> 139 </span>    68/push  0/imm32/start
<span id="L140" class="LineNr"> 140 </span>    89/copy                         3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to edx</span>
<span id="L141" class="LineNr"> 141 </span>    <span class="subxComment"># var in-code?/ebx = false</span>
<span id="L142" class="LineNr"> 142 </span>    31/xor                          3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear ebx</span>
<span id="L143" class="LineNr"> 143 </span><span class="Constant">$subx-pack:loop</span>:
<span id="L144" class="LineNr"> 144 </span>    <span class="subxComment"># clear-stream(line)</span>
<span id="L145" class="LineNr"> 145 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L146" class="LineNr"> 146 </span>    51/push-ecx
<span id="L147" class="LineNr"> 147 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L148" class="LineNr"> 148 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L149" class="LineNr"> 149 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L150" class="LineNr"> 150 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L151" class="LineNr"> 151 </span>    <span class="subxComment"># read-line-buffered(in, line)</span>
<span id="L152" class="LineNr"> 152 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L153" class="LineNr"> 153 </span>    51/push-ecx
<span id="L154" class="LineNr"> 154 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L155" class="LineNr"> 155 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L156" class="LineNr"> 156 </span>    e8/call  <a href='../071read-line.subx.html#L9'>read-line-buffered</a>/disp32
<span id="L157" class="LineNr"> 157 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L158" class="LineNr"> 158 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L159" class="LineNr"> 159 </span><span class="Constant">$subx-pack:check0</span>:
<span id="L160" class="LineNr"> 160 </span>    <span class="subxComment"># if (line-&gt;write == 0) break</span>
<span id="L161" class="LineNr"> 161 </span>    81          7/subop/compare     0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># compare *ecx</span>
<span id="L162" class="LineNr"> 162 </span>    0f 84/jump-if-equal  $subx-pack:<span class="Constant">break</span>/disp32
<span id="L163" class="Folded"> 163 </span><span class="Folded">+-- 26 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L189" class="LineNr"> 189 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L190" class="LineNr"> 190 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L191" class="LineNr"> 191 </span>    52/push-edx
<span id="L192" class="LineNr"> 192 </span>    51/push-ecx
<span id="L193" class="LineNr"> 193 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L194" class="LineNr"> 194 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L195" class="LineNr"> 195 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L196" class="LineNr"> 196 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L197" class="LineNr"> 197 </span><span class="Constant">$subx-pack:check1</span>:
<span id="L198" class="LineNr"> 198 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) write-stream-data(out, line)</span>
<span id="L199" class="LineNr"> 199 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L200" class="LineNr"> 200 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L201" class="LineNr"> 201 </span>    52/push-edx
<span id="L202" class="LineNr"> 202 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L203" class="LineNr"> 203 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L204" class="LineNr"> 204 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L205" class="LineNr"> 205 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L206" class="LineNr"> 206 </span>    <span class="subxS1Comment"># . if (eax != 0) write-stream-data(out, line)</span>
<span id="L207" class="LineNr"> 207 </span>    3d/compare-eax-and  0/imm32
<span id="L208" class="LineNr"> 208 </span>    0f 85/jump-if-not-equal  $subx-pack:pass-through/disp32
<span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-pack:check2</span>:
<span id="L210" class="Folded"> 210 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L252" class="LineNr"> 252 </span>    <span class="subxComment"># if (!slice-equal?(word-slice, &quot;==&quot;)) goto next check</span>
<span id="L253" class="LineNr"> 253 </span>    <span class="subxS1Comment"># . eax = slice-equal?(word-slice, &quot;==&quot;)</span>
<span id="L254" class="LineNr"> 254 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L255" class="LineNr"> 255 </span>    68/push  <span class="Constant">&quot;==&quot;</span>/imm32
<span id="L256" class="LineNr"> 256 </span>    52/push-edx
<span id="L257" class="LineNr"> 257 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L258" class="LineNr"> 258 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L259" class="LineNr"> 259 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L260" class="LineNr"> 260 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L261" class="LineNr"> 261 </span>    <span class="subxS1Comment"># . if (eax == 0) goto check3</span>
<span id="L262" class="LineNr"> 262 </span>    3d/compare-eax-and  0/imm32
<span id="L263" class="LineNr"> 263 </span>    0f 84/jump-if-equal  $subx-pack:check3/disp32
<span id="L264" class="LineNr"> 264 </span>    <span class="subxComment"># word-slice = next-word(line)</span>
<span id="L265" class="LineNr"> 265 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L266" class="LineNr"> 266 </span>    52/push-edx
<span id="L267" class="LineNr"> 267 </span>    51/push-ecx
<span id="L268" class="LineNr"> 268 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L269" class="LineNr"> 269 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L270" class="LineNr"> 270 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L271" class="LineNr"> 271 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L272" class="Folded"> 272 </span><span class="Folded">+-- 42 lines: #?     # dump segment name -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L314" class="LineNr"> 314 </span>    <span class="subxComment"># in-code? = slice-equal?(word-slice, &quot;code&quot;)</span>
<span id="L315" class="LineNr"> 315 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L316" class="LineNr"> 316 </span>    68/push  <span class="Constant">&quot;code&quot;</span>/imm32
<span id="L317" class="LineNr"> 317 </span>    52/push-edx
<span id="L318" class="LineNr"> 318 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L319" class="LineNr"> 319 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L320" class="LineNr"> 320 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L321" class="LineNr"> 321 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L322" class="LineNr"> 322 </span>    <span class="subxS2Comment"># . . in-code? = eax</span>
<span id="L323" class="LineNr"> 323 </span>    89/copy                         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to ebx</span>
<span id="L324" class="LineNr"> 324 </span>    <span class="subxComment"># write-stream-data(out, line)</span>
<span id="L325" class="LineNr"> 325 </span>    eb/jump  $subx-pack:pass-through/disp8
<span id="L326" class="LineNr"> 326 </span><span class="Constant">$subx-pack:check3</span>:
<span id="L327" class="LineNr"> 327 </span>    <span class="subxComment"># else rewind-stream(line)</span>
<span id="L328" class="LineNr"> 328 </span>    <span class="subxS1Comment"># . rewind-stream(line)</span>
<span id="L329" class="LineNr"> 329 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L330" class="LineNr"> 330 </span>    51/push-ecx
<span id="L331" class="LineNr"> 331 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L332" class="LineNr"> 332 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L333" class="LineNr"> 333 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L334" class="LineNr"> 334 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L335" class="LineNr"> 335 </span>    <span class="subxComment"># if (in-code? != 0) convert-instruction(line, out)</span>
<span id="L336" class="LineNr"> 336 </span>    81          7/subop/compare     3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># compare ebx</span>
<span id="L337" class="LineNr"> 337 </span>    74/jump-if-equal  $subx-pack:data/disp8
<span id="L338" class="LineNr"> 338 </span><span class="Constant">$subx-pack:code</span>:
<span id="L339" class="LineNr"> 339 </span>    <span class="subxS1Comment"># . convert-instruction(line, out)</span>
<span id="L340" class="LineNr"> 340 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L341" class="LineNr"> 341 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L342" class="LineNr"> 342 </span>    51/push-ecx
<span id="L343" class="LineNr"> 343 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L344" class="LineNr"> 344 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L345" class="LineNr"> 345 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L346" class="LineNr"> 346 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L347" class="LineNr"> 347 </span>    <span class="subxS1Comment"># . loop</span>
<span id="L348" class="LineNr"> 348 </span>    e9/jump  $subx-pack:<span class="Constant">loop</span>/disp32
<span id="L349" class="LineNr"> 349 </span><span class="Constant">$subx-pack:data</span>:
<span id="L350" class="LineNr"> 350 </span>    <span class="subxComment"># else convert-data(line, out)</span>
<span id="L351" class="LineNr"> 351 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L352" class="LineNr"> 352 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L353" class="LineNr"> 353 </span>    51/push-ecx
<span id="L354" class="LineNr"> 354 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L355" class="LineNr"> 355 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L356" class="LineNr"> 356 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L357" class="LineNr"> 357 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L358" class="LineNr"> 358 </span>    <span class="subxS1Comment"># . loop</span>
<span id="L359" class="LineNr"> 359 </span>    e9/jump  $subx-pack:<span class="Constant">loop</span>/disp32
<span id="L360" class="LineNr"> 360 </span><span class="Constant">$subx-pack:pass-through</span>:
<span id="L361" class="LineNr"> 361 </span>    <span class="subxComment"># write-stream-data(out, line)</span>
<span id="L362" class="LineNr"> 362 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L363" class="LineNr"> 363 </span>    51/push-ecx
<span id="L364" class="LineNr"> 364 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L365" class="LineNr"> 365 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L366" class="LineNr"> 366 </span>    e8/call  <a href='../074write-stream-data.subx.html#L11'>write-stream-data</a>/disp32
<span id="L367" class="LineNr"> 367 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L368" class="LineNr"> 368 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L369" class="LineNr"> 369 </span>    <span class="subxS1Comment"># . loop</span>
<span id="L370" class="LineNr"> 370 </span>    e9/jump  $subx-pack:<span class="Constant">loop</span>/disp32
<span id="L371" class="LineNr"> 371 </span><span class="Constant">$subx-pack:break</span>:
<span id="L372" class="LineNr"> 372 </span>    <span class="subxComment"># flush(out)</span>
<span id="L373" class="LineNr"> 373 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L374" class="LineNr"> 374 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L375" class="LineNr"> 375 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L376" class="LineNr"> 376 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L377" class="LineNr"> 377 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L378" class="LineNr"> 378 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L379" class="LineNr"> 379 </span><span class="Constant">$subx-pack:end</span>:
<span id="L380" class="LineNr"> 380 </span>    <span class="subxS1Comment"># . reclaim locals</span>
<span id="L381" class="LineNr"> 381 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x214/imm32       <span class="subxComment"># add to esp</span>
<span id="L382" class="LineNr"> 382 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L383" class="LineNr"> 383 </span>    5b/pop-to-ebx
<span id="L384" class="LineNr"> 384 </span>    5a/pop-to-edx
<span id="L385" class="LineNr"> 385 </span>    59/pop-to-ecx
<span id="L386" class="LineNr"> 386 </span>    58/pop-to-eax
<span id="L387" class="LineNr"> 387 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L388" class="LineNr"> 388 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L389" class="LineNr"> 389 </span>    5d/pop-to-ebp
<span id="L390" class="LineNr"> 390 </span>    c3/return
<span id="L391" class="LineNr"> 391 </span>
<span id="L392" class="LineNr"> 392 </span><span class="subxTest">test-subx-pack-passes-empty-lines-through</span>:
<span id="L393" class="LineNr"> 393 </span>    <span class="subxComment"># if a line is empty, pass it along unchanged</span>
<span id="L394" class="LineNr"> 394 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L395" class="LineNr"> 395 </span>    55/push-ebp
<span id="L396" class="LineNr"> 396 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L397" class="LineNr"> 397 </span>    <span class="subxComment"># setup</span>
<span id="L398" class="LineNr"> 398 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L399" class="LineNr"> 399 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L400" class="LineNr"> 400 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L401" class="LineNr"> 401 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L402" class="LineNr"> 402 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L403" class="LineNr"> 403 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L404" class="LineNr"> 404 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L405" class="LineNr"> 405 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-buffered-file+4)</span>
<span id="L406" class="LineNr"> 406 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L407" class="LineNr"> 407 </span>    b8/copy-to-eax  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L408" class="LineNr"> 408 </span>    05/add-to-eax  4/imm32
<span id="L409" class="LineNr"> 409 </span>    50/push-eax
<span id="L410" class="LineNr"> 410 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L411" class="LineNr"> 411 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L412" class="LineNr"> 412 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L413" class="LineNr"> 413 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L414" class="LineNr"> 414 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L415" class="LineNr"> 415 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L416" class="LineNr"> 416 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L417" class="LineNr"> 417 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L418" class="LineNr"> 418 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L419" class="LineNr"> 419 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L420" class="LineNr"> 420 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L421" class="LineNr"> 421 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L422" class="LineNr"> 422 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L423" class="LineNr"> 423 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L424" class="LineNr"> 424 </span>    05/add-to-eax  4/imm32
<span id="L425" class="LineNr"> 425 </span>    50/push-eax
<span id="L426" class="LineNr"> 426 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L427" class="LineNr"> 427 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L428" class="LineNr"> 428 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L429" class="LineNr"> 429 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L430" class="LineNr"> 430 </span>    <span class="subxComment"># write nothing to input</span>
<span id="L431" class="LineNr"> 431 </span>    <span class="subxComment"># subx-pack(_test-input-buffered-file, _test-output-buffered-file)</span>
<span id="L432" class="LineNr"> 432 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L433" class="LineNr"> 433 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L434" class="LineNr"> 434 </span>    68/push  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L435" class="LineNr"> 435 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L436" class="LineNr"> 436 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L437" class="LineNr"> 437 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L438" class="LineNr"> 438 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L439" class="LineNr"> 439 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L440" class="LineNr"> 440 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L441" class="LineNr"> 441 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L442" class="LineNr"> 442 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L443" class="LineNr"> 443 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L444" class="LineNr"> 444 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L445" class="LineNr"> 445 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L446" class="LineNr"> 446 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L447" class="LineNr"> 447 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;&quot;, msg)</span>
<span id="L448" class="LineNr"> 448 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L449" class="LineNr"> 449 </span>    68/push  <span class="Constant">&quot;F - test-subx-pack-passes-empty-lines-through&quot;</span>/imm32
<span id="L450" class="LineNr"> 450 </span>    68/push  <span class="Constant">&quot;&quot;</span>/imm32
<span id="L451" class="LineNr"> 451 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L452" class="LineNr"> 452 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L453" class="LineNr"> 453 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L454" class="LineNr"> 454 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L455" class="LineNr"> 455 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L456" class="LineNr"> 456 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L457" class="LineNr"> 457 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L458" class="LineNr"> 458 </span>    5d/pop-to-ebp
<span id="L459" class="LineNr"> 459 </span>    c3/return
<span id="L460" class="LineNr"> 460 </span>
<span id="L461" class="LineNr"> 461 </span><span class="subxTest">test-subx-pack-passes-lines-with-just-whitespace-through</span>:
<span id="L462" class="LineNr"> 462 </span>    <span class="subxComment"># if a line is empty, pass it along unchanged</span>
<span id="L463" class="LineNr"> 463 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L464" class="LineNr"> 464 </span>    55/push-ebp
<span id="L465" class="LineNr"> 465 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L466" class="LineNr"> 466 </span>    <span class="subxComment"># setup</span>
<span id="L467" class="LineNr"> 467 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L468" class="LineNr"> 468 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L469" class="LineNr"> 469 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L470" class="LineNr"> 470 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L471" class="LineNr"> 471 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L472" class="LineNr"> 472 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L473" class="LineNr"> 473 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L474" class="LineNr"> 474 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-buffered-file+4)</span>
<span id="L475" class="LineNr"> 475 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L476" class="LineNr"> 476 </span>    b8/copy-to-eax  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L477" class="LineNr"> 477 </span>    05/add-to-eax  4/imm32
<span id="L478" class="LineNr"> 478 </span>    50/push-eax
<span id="L479" class="LineNr"> 479 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L480" class="LineNr"> 480 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L481" class="LineNr"> 481 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L482" class="LineNr"> 482 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L483" class="LineNr"> 483 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L484" class="LineNr"> 484 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L485" class="LineNr"> 485 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L486" class="LineNr"> 486 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L487" class="LineNr"> 487 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L488" class="LineNr"> 488 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L489" class="LineNr"> 489 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L490" class="LineNr"> 490 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L491" class="LineNr"> 491 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L492" class="LineNr"> 492 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L493" class="LineNr"> 493 </span>    05/add-to-eax  4/imm32
<span id="L494" class="LineNr"> 494 </span>    50/push-eax
<span id="L495" class="LineNr"> 495 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L496" class="LineNr"> 496 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L497" class="LineNr"> 497 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L498" class="LineNr"> 498 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L499" class="LineNr"> 499 </span>    <span class="subxComment"># initialize input</span>
<span id="L500" class="LineNr"> 500 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;    &quot;)</span>
<span id="L501" class="LineNr"> 501 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L502" class="LineNr"> 502 </span>    68/push  <span class="Constant">&quot;    &quot;</span>/imm32
<span id="L503" class="LineNr"> 503 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L504" class="LineNr"> 504 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L505" class="LineNr"> 505 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L506" class="LineNr"> 506 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L507" class="LineNr"> 507 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L508" class="LineNr"> 508 </span>    <span class="subxComment"># subx-pack(_test-input-buffered-file, _test-output-buffered-file)</span>
<span id="L509" class="LineNr"> 509 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L510" class="LineNr"> 510 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L511" class="LineNr"> 511 </span>    68/push  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L512" class="LineNr"> 512 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L513" class="LineNr"> 513 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L514" class="LineNr"> 514 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L515" class="LineNr"> 515 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L516" class="LineNr"> 516 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L517" class="LineNr"> 517 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L518" class="LineNr"> 518 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L519" class="LineNr"> 519 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L520" class="LineNr"> 520 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L521" class="LineNr"> 521 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L522" class="LineNr"> 522 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L523" class="LineNr"> 523 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L524" class="LineNr"> 524 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;    &quot;, msg)</span>
<span id="L525" class="LineNr"> 525 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L526" class="LineNr"> 526 </span>    68/push  <span class="Constant">&quot;F - test-subx-pack-passes-with-just-whitespace-through&quot;</span>/imm32
<span id="L527" class="LineNr"> 527 </span>    68/push  <span class="Constant">&quot;    &quot;</span>/imm32
<span id="L528" class="LineNr"> 528 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L529" class="LineNr"> 529 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L530" class="LineNr"> 530 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L531" class="LineNr"> 531 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L532" class="LineNr"> 532 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L533" class="LineNr"> 533 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L534" class="LineNr"> 534 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L535" class="LineNr"> 535 </span>    5d/pop-to-ebp
<span id="L536" class="LineNr"> 536 </span>    c3/return
<span id="L537" class="LineNr"> 537 </span>
<span id="L538" class="LineNr"> 538 </span><span class="subxTest">test-subx-pack-passes-segment-headers-through</span>:
<span id="L539" class="LineNr"> 539 </span>    <span class="subxComment"># if a line starts with '==', pass it along unchanged</span>
<span id="L540" class="LineNr"> 540 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L541" class="LineNr"> 541 </span>    55/push-ebp
<span id="L542" class="LineNr"> 542 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L543" class="LineNr"> 543 </span>    <span class="subxComment"># setup</span>
<span id="L544" class="LineNr"> 544 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L545" class="LineNr"> 545 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L546" class="LineNr"> 546 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L547" class="LineNr"> 547 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L548" class="LineNr"> 548 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L549" class="LineNr"> 549 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L550" class="LineNr"> 550 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L551" class="LineNr"> 551 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-buffered-file+4)</span>
<span id="L552" class="LineNr"> 552 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L553" class="LineNr"> 553 </span>    b8/copy-to-eax  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L554" class="LineNr"> 554 </span>    05/add-to-eax  4/imm32
<span id="L555" class="LineNr"> 555 </span>    50/push-eax
<span id="L556" class="LineNr"> 556 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L557" class="LineNr"> 557 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L558" class="LineNr"> 558 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L559" class="LineNr"> 559 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L560" class="LineNr"> 560 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L561" class="LineNr"> 561 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L562" class="LineNr"> 562 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L563" class="LineNr"> 563 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L564" class="LineNr"> 564 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L565" class="LineNr"> 565 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L566" class="LineNr"> 566 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L567" class="LineNr"> 567 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L568" class="LineNr"> 568 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L569" class="LineNr"> 569 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L570" class="LineNr"> 570 </span>    05/add-to-eax  4/imm32
<span id="L571" class="LineNr"> 571 </span>    50/push-eax
<span id="L572" class="LineNr"> 572 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L573" class="LineNr"> 573 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L574" class="LineNr"> 574 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L575" class="LineNr"> 575 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L576" class="LineNr"> 576 </span>    <span class="subxComment"># initialize input</span>
<span id="L577" class="LineNr"> 577 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;== abcd 0x1&quot;)</span>
<span id="L578" class="LineNr"> 578 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L579" class="LineNr"> 579 </span>    68/push  <span class="Constant">&quot;== abcd 0x1&quot;</span>/imm32
<span id="L580" class="LineNr"> 580 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L581" class="LineNr"> 581 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L582" class="LineNr"> 582 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L583" class="LineNr"> 583 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L584" class="LineNr"> 584 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L585" class="LineNr"> 585 </span>    <span class="subxComment"># subx-pack(_test-input-buffered-file, _test-output-buffered-file)</span>
<span id="L586" class="LineNr"> 586 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L587" class="LineNr"> 587 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L588" class="LineNr"> 588 </span>    68/push  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L589" class="LineNr"> 589 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L590" class="LineNr"> 590 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L591" class="LineNr"> 591 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L592" class="LineNr"> 592 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L593" class="LineNr"> 593 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L594" class="LineNr"> 594 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L595" class="LineNr"> 595 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L596" class="LineNr"> 596 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L597" class="LineNr"> 597 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L598" class="LineNr"> 598 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L599" class="LineNr"> 599 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L600" class="LineNr"> 600 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L601" class="LineNr"> 601 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;== abcd 0x1&quot;, msg)</span>
<span id="L602" class="LineNr"> 602 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L603" class="LineNr"> 603 </span>    68/push  <span class="Constant">&quot;F - test-subx-pack-passes-segment-headers-through&quot;</span>/imm32
<span id="L604" class="LineNr"> 604 </span>    68/push  <span class="Constant">&quot;== abcd 0x1&quot;</span>/imm32
<span id="L605" class="LineNr"> 605 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L606" class="LineNr"> 606 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L607" class="LineNr"> 607 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L608" class="LineNr"> 608 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L609" class="LineNr"> 609 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L610" class="LineNr"> 610 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L611" class="LineNr"> 611 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L612" class="LineNr"> 612 </span>    5d/pop-to-ebp
<span id="L613" class="LineNr"> 613 </span>    c3/return
<span id="L614" class="LineNr"> 614 </span>
<span id="L615" class="LineNr"> 615 </span><span class="subxTest">test-subx-pack-in-data-segment</span>:
<span id="L616" class="LineNr"> 616 </span>    <span class="subxComment"># correctly process lines in the data segment</span>
<span id="L617" class="LineNr"> 617 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L618" class="LineNr"> 618 </span>    55/push-ebp
<span id="L619" class="LineNr"> 619 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L620" class="LineNr"> 620 </span>    <span class="subxComment"># setup</span>
<span id="L621" class="LineNr"> 621 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L622" class="LineNr"> 622 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L623" class="LineNr"> 623 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L624" class="LineNr"> 624 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L625" class="LineNr"> 625 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L626" class="LineNr"> 626 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L627" class="LineNr"> 627 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L628" class="LineNr"> 628 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-buffered-file+4)</span>
<span id="L629" class="LineNr"> 629 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L630" class="LineNr"> 630 </span>    b8/copy-to-eax  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L631" class="LineNr"> 631 </span>    05/add-to-eax  4/imm32
<span id="L632" class="LineNr"> 632 </span>    50/push-eax
<span id="L633" class="LineNr"> 633 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L634" class="LineNr"> 634 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L635" class="LineNr"> 635 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L636" class="LineNr"> 636 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L637" class="LineNr"> 637 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L638" class="LineNr"> 638 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L639" class="LineNr"> 639 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L640" class="LineNr"> 640 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L641" class="LineNr"> 641 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L642" class="LineNr"> 642 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L643" class="LineNr"> 643 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L644" class="LineNr"> 644 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L645" class="LineNr"> 645 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L646" class="LineNr"> 646 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L647" class="LineNr"> 647 </span>    05/add-to-eax  4/imm32
<span id="L648" class="LineNr"> 648 </span>    50/push-eax
<span id="L649" class="LineNr"> 649 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L650" class="LineNr"> 650 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L651" class="LineNr"> 651 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L652" class="LineNr"> 652 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L653" class="LineNr"> 653 </span>    <span class="subxComment"># initialize input</span>
<span id="L654" class="LineNr"> 654 </span>    <span class="subxComment">#   == code 0x1</span>
<span id="L655" class="LineNr"> 655 </span>    <span class="subxComment">#   == data 0x2</span>
<span id="L656" class="LineNr"> 656 </span>    <span class="subxComment">#   3 4/imm32</span>
<span id="L657" class="LineNr"> 657 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;== code 0x1&quot;)</span>
<span id="L658" class="LineNr"> 658 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L659" class="LineNr"> 659 </span>    68/push  <span class="Constant">&quot;== code 0x1\n&quot;</span>/imm32
<span id="L660" class="LineNr"> 660 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L661" class="LineNr"> 661 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L662" class="LineNr"> 662 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L663" class="LineNr"> 663 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L664" class="LineNr"> 664 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L665" class="LineNr"> 665 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;== data 0x2\n&quot;)</span>
<span id="L666" class="LineNr"> 666 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L667" class="LineNr"> 667 </span>    68/push  <span class="Constant">&quot;== data 0x2\n&quot;</span>/imm32
<span id="L668" class="LineNr"> 668 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L669" class="LineNr"> 669 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L670" class="LineNr"> 670 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L671" class="LineNr"> 671 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L672" class="LineNr"> 672 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L673" class="LineNr"> 673 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;3 4/imm32\n&quot;)</span>
<span id="L674" class="LineNr"> 674 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L675" class="LineNr"> 675 </span>    68/push  <span class="Constant">&quot;3 4/imm32\n&quot;</span>/imm32
<span id="L676" class="LineNr"> 676 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L677" class="LineNr"> 677 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L678" class="LineNr"> 678 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L679" class="LineNr"> 679 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L680" class="LineNr"> 680 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L681" class="LineNr"> 681 </span>    <span class="subxComment"># subx-pack(_test-input-buffered-file, _test-output-buffered-file)</span>
<span id="L682" class="LineNr"> 682 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L683" class="LineNr"> 683 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L684" class="LineNr"> 684 </span>    68/push  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L685" class="LineNr"> 685 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L686" class="LineNr"> 686 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L687" class="LineNr"> 687 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L688" class="LineNr"> 688 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L689" class="LineNr"> 689 </span>    <span class="subxComment"># check output</span>
<span id="L690" class="Folded"> 690 </span><span class="Folded">+-- 26 lines: #?     # debug print -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L716" class="LineNr"> 716 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L717" class="LineNr"> 717 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L718" class="LineNr"> 718 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L719" class="LineNr"> 719 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L720" class="LineNr"> 720 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L721" class="LineNr"> 721 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L722" class="LineNr"> 722 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L723" class="LineNr"> 723 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;== code 0x1&quot;, msg)</span>
<span id="L724" class="LineNr"> 724 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L725" class="LineNr"> 725 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L615'>test-subx-pack-in-data-segment</a>/0&quot;</span>/imm32
<span id="L726" class="LineNr"> 726 </span>    68/push  <span class="Constant">&quot;== code 0x1&quot;</span>/imm32
<span id="L727" class="LineNr"> 727 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L728" class="LineNr"> 728 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L729" class="LineNr"> 729 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L730" class="LineNr"> 730 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L731" class="LineNr"> 731 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L732" class="LineNr"> 732 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;== data 0x2&quot;, msg)</span>
<span id="L733" class="LineNr"> 733 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L734" class="LineNr"> 734 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L615'>test-subx-pack-in-data-segment</a>/1&quot;</span>/imm32
<span id="L735" class="LineNr"> 735 </span>    68/push  <span class="Constant">&quot;== data 0x2&quot;</span>/imm32
<span id="L736" class="LineNr"> 736 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L737" class="LineNr"> 737 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L738" class="LineNr"> 738 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L739" class="LineNr"> 739 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L740" class="LineNr"> 740 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L741" class="LineNr"> 741 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;03 04 00 00 00 &quot;, msg)</span>
<span id="L742" class="LineNr"> 742 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L743" class="LineNr"> 743 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L615'>test-subx-pack-in-data-segment</a>/2&quot;</span>/imm32
<span id="L744" class="LineNr"> 744 </span>    68/push  <span class="Constant">&quot;03 04 00 00 00 &quot;</span>/imm32
<span id="L745" class="LineNr"> 745 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L746" class="LineNr"> 746 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L747" class="LineNr"> 747 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L748" class="LineNr"> 748 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L749" class="LineNr"> 749 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L750" class="LineNr"> 750 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L751" class="LineNr"> 751 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L752" class="LineNr"> 752 </span>    5d/pop-to-ebp
<span id="L753" class="LineNr"> 753 </span>    c3/return
<span id="L754" class="LineNr"> 754 </span>
<span id="L755" class="LineNr"> 755 </span><span class="subxTest">test-subx-pack-code-and-data-segments</span>:
<span id="L756" class="LineNr"> 756 </span>    <span class="subxComment"># correctly process lines in both code and data segments</span>
<span id="L757" class="LineNr"> 757 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L758" class="LineNr"> 758 </span>    55/push-ebp
<span id="L759" class="LineNr"> 759 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L760" class="LineNr"> 760 </span>    <span class="subxComment"># setup</span>
<span id="L761" class="LineNr"> 761 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L762" class="LineNr"> 762 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L763" class="LineNr"> 763 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L764" class="LineNr"> 764 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L765" class="LineNr"> 765 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L766" class="LineNr"> 766 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L767" class="LineNr"> 767 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L768" class="LineNr"> 768 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-buffered-file+4)</span>
<span id="L769" class="LineNr"> 769 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L770" class="LineNr"> 770 </span>    b8/copy-to-eax  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L771" class="LineNr"> 771 </span>    05/add-to-eax  4/imm32
<span id="L772" class="LineNr"> 772 </span>    50/push-eax
<span id="L773" class="LineNr"> 773 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L774" class="LineNr"> 774 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L775" class="LineNr"> 775 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L776" class="LineNr"> 776 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L777" class="LineNr"> 777 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L778" class="LineNr"> 778 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L779" class="LineNr"> 779 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L780" class="LineNr"> 780 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L781" class="LineNr"> 781 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L782" class="LineNr"> 782 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L783" class="LineNr"> 783 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L784" class="LineNr"> 784 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L785" class="LineNr"> 785 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L786" class="LineNr"> 786 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L787" class="LineNr"> 787 </span>    05/add-to-eax  4/imm32
<span id="L788" class="LineNr"> 788 </span>    50/push-eax
<span id="L789" class="LineNr"> 789 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L790" class="LineNr"> 790 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L791" class="LineNr"> 791 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L792" class="LineNr"> 792 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L793" class="LineNr"> 793 </span>    <span class="subxComment"># initialize input</span>
<span id="L794" class="LineNr"> 794 </span>    <span class="subxComment">#   == code 0x1</span>
<span id="L795" class="LineNr"> 795 </span>    <span class="subxComment">#   e8/call 20/disp32</span>
<span id="L796" class="LineNr"> 796 </span>    <span class="subxComment">#   68/push 0x20/imm8</span>
<span id="L797" class="LineNr"> 797 </span>    <span class="subxComment">#   == data 0x2</span>
<span id="L798" class="LineNr"> 798 </span>    <span class="subxComment">#   3 4/imm32</span>
<span id="L799" class="LineNr"> 799 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;== code 0x1\n&quot;)</span>
<span id="L800" class="LineNr"> 800 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L801" class="LineNr"> 801 </span>    68/push  <span class="Constant">&quot;== code 0x1\n&quot;</span>/imm32
<span id="L802" class="LineNr"> 802 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L803" class="LineNr"> 803 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L804" class="LineNr"> 804 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L805" class="LineNr"> 805 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L806" class="LineNr"> 806 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L807" class="LineNr"> 807 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;e8/call 20/disp32\n&quot;)</span>
<span id="L808" class="LineNr"> 808 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L809" class="LineNr"> 809 </span>    68/push  <span class="Constant">&quot;e8/call 20/disp32\n&quot;</span>/imm32
<span id="L810" class="LineNr"> 810 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L811" class="LineNr"> 811 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L812" class="LineNr"> 812 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L813" class="LineNr"> 813 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L814" class="LineNr"> 814 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L815" class="LineNr"> 815 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;68/push 0x20/imm8\n&quot;)</span>
<span id="L816" class="LineNr"> 816 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L817" class="LineNr"> 817 </span>    68/push  <span class="Constant">&quot;68/push 0x20/imm8\n&quot;</span>/imm32
<span id="L818" class="LineNr"> 818 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L819" class="LineNr"> 819 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L820" class="LineNr"> 820 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L821" class="LineNr"> 821 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L822" class="LineNr"> 822 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L823" class="LineNr"> 823 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;== data 0x2\n&quot;)</span>
<span id="L824" class="LineNr"> 824 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L825" class="LineNr"> 825 </span>    68/push  <span class="Constant">&quot;== data 0x2\n&quot;</span>/imm32
<span id="L826" class="LineNr"> 826 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L827" class="LineNr"> 827 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L828" class="LineNr"> 828 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L829" class="LineNr"> 829 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L830" class="LineNr"> 830 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L831" class="LineNr"> 831 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;3 4/imm32\n&quot;)</span>
<span id="L832" class="LineNr"> 832 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L833" class="LineNr"> 833 </span>    68/push  <span class="Constant">&quot;3 4/imm32\n&quot;</span>/imm32
<span id="L834" class="LineNr"> 834 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L835" class="LineNr"> 835 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L836" class="LineNr"> 836 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L837" class="LineNr"> 837 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L838" class="LineNr"> 838 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L839" class="LineNr"> 839 </span>    <span class="subxComment"># subx-pack(_test-input-buffered-file, _test-output-buffered-file)</span>
<span id="L840" class="LineNr"> 840 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L841" class="LineNr"> 841 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L842" class="LineNr"> 842 </span>    68/push  <a href='../061read-byte.subx.html#L319'>_test-input-buffered-file</a>/imm32
<span id="L843" class="LineNr"> 843 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L844" class="LineNr"> 844 </span>    e8/call  <a href='pack.subx.html#L100'>subx-pack</a>/disp32
<span id="L845" class="LineNr"> 845 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L846" class="LineNr"> 846 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L847" class="LineNr"> 847 </span>    <span class="subxComment"># check output</span>
<span id="L848" class="LineNr"> 848 </span>    <span class="subxComment">#   == code 0x1</span>
<span id="L849" class="LineNr"> 849 </span>    <span class="subxComment">#   e8 20 00 00 00  # e8/call 20/disp32</span>
<span id="L850" class="LineNr"> 850 </span>    <span class="subxComment">#   68 20  # 68/push 0x20/imm8</span>
<span id="L851" class="LineNr"> 851 </span>    <span class="subxComment">#   == data 0x2</span>
<span id="L852" class="LineNr"> 852 </span>    <span class="subxComment">#   03 04 00 00 00</span>
<span id="L853" class="Folded"> 853 </span><span class="Folded">+-- 26 lines: #?     # debug print -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L879" class="LineNr"> 879 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L880" class="LineNr"> 880 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L881" class="LineNr"> 881 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L882" class="LineNr"> 882 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L883" class="LineNr"> 883 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L884" class="LineNr"> 884 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L885" class="LineNr"> 885 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L886" class="LineNr"> 886 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;== code 0x1&quot;, msg)</span>
<span id="L887" class="LineNr"> 887 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L888" class="LineNr"> 888 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L755'>test-subx-pack-code-and-data-segments</a>/0&quot;</span>/imm32
<span id="L889" class="LineNr"> 889 </span>    68/push  <span class="Constant">&quot;== code 0x1&quot;</span>/imm32
<span id="L890" class="LineNr"> 890 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L891" class="LineNr"> 891 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L892" class="LineNr"> 892 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L893" class="LineNr"> 893 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L894" class="LineNr"> 894 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L895" class="LineNr"> 895 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;e8 20 00 00 00  # e8/call 20/disp32&quot;, msg)</span>
<span id="L896" class="LineNr"> 896 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L897" class="LineNr"> 897 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L755'>test-subx-pack-code-and-data-segments</a>/1&quot;</span>/imm32
<span id="L898" class="LineNr"> 898 </span>    68/push  <span class="Constant">&quot;e8 20 00 00 00  # e8/call 20/disp32&quot;</span>/imm32
<span id="L899" class="LineNr"> 899 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L900" class="LineNr"> 900 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L901" class="LineNr"> 901 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L902" class="LineNr"> 902 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L903" class="LineNr"> 903 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L904" class="LineNr"> 904 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;68 20  # 68/push 0x20/imm8&quot;, msg)</span>
<span id="L905" class="LineNr"> 905 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L906" class="LineNr"> 906 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L755'>test-subx-pack-code-and-data-segments</a>/2&quot;</span>/imm32
<span id="L907" class="LineNr"> 907 </span>    68/push  <span class="Constant">&quot;68 20  # 68/push 0x20/imm8&quot;</span>/imm32
<span id="L908" class="LineNr"> 908 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L909" class="LineNr"> 909 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L910" class="LineNr"> 910 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L911" class="LineNr"> 911 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L912" class="LineNr"> 912 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L913" class="LineNr"> 913 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;== data 0x2&quot;, msg)</span>
<span id="L914" class="LineNr"> 914 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L915" class="LineNr"> 915 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L755'>test-subx-pack-code-and-data-segments</a>/3&quot;</span>/imm32
<span id="L916" class="LineNr"> 916 </span>    68/push  <span class="Constant">&quot;== data 0x2&quot;</span>/imm32
<span id="L917" class="LineNr"> 917 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L918" class="LineNr"> 918 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L919" class="LineNr"> 919 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L920" class="LineNr"> 920 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L921" class="LineNr"> 921 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L922" class="LineNr"> 922 </span>    <span class="subxS1Comment"># . check-next-stream-line-equal(_test-output-stream, &quot;03 04 00 00 00 &quot;, msg)</span>
<span id="L923" class="LineNr"> 923 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L924" class="LineNr"> 924 </span>    68/push  <span class="Constant">&quot;F - <a href='pack.subx.html#L755'>test-subx-pack-code-and-data-segments</a>/4&quot;</span>/imm32
<span id="L925" class="LineNr"> 925 </span>    68/push  <span class="Constant">&quot;03 04 00 00 00 &quot;</span>/imm32
<span id="L926" class="LineNr"> 926 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L927" class="LineNr"> 927 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L928" class="LineNr"> 928 </span>    e8/call  <a href='../058stream-equal.subx.html#L563'>check-next-stream-line-equal</a>/disp32
<span id="L929" class="LineNr"> 929 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L930" class="LineNr"> 930 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L931" class="LineNr"> 931 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L932" class="LineNr"> 932 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L933" class="LineNr"> 933 </span>    5d/pop-to-ebp
<span id="L934" class="LineNr"> 934 </span>    c3/return
<span id="L935" class="LineNr"> 935 </span>
<span id="L936" class="LineNr"> 936 </span><span class="subxFunction">convert-data</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L937" class="LineNr"> 937 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L938" class="LineNr"> 938 </span>    <span class="subxComment">#   var word-slice = {0, 0}</span>
<span id="L939" class="LineNr"> 939 </span>    <span class="subxComment">#   while true</span>
<span id="L940" class="LineNr"> 940 </span>    <span class="subxComment">#     word-slice = next-word(line)</span>
<span id="L941" class="LineNr"> 941 </span>    <span class="subxComment">#     if slice-empty?(word-slice)                 # end of file (maybe including trailing whitespace)</span>
<span id="L942" class="LineNr"> 942 </span>    <span class="subxComment">#       break  # skip emitting some whitespace</span>
<span id="L943" class="LineNr"> 943 </span>    <span class="subxComment">#     if slice-starts-with?(word-slice, &quot;#&quot;)      # comment</span>
<span id="L944" class="LineNr"> 944 </span>    <span class="subxComment">#       write-slice-buffered(out, word-slice)</span>
<span id="L945" class="LineNr"> 945 </span>    <span class="subxComment">#       return</span>
<span id="L946" class="LineNr"> 946 </span>    <span class="subxComment">#     if slice-ends-with?(word-slice, &quot;:&quot;)        # label</span>
<span id="L947" class="LineNr"> 947 </span>    <span class="subxComment">#       write-stream-data(out, line)</span>
<span id="L948" class="LineNr"> 948 </span>    <span class="subxComment">#       return</span>
<span id="L949" class="LineNr"> 949 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;imm32&quot;)</span>
<span id="L950" class="LineNr"> 950 </span>    <span class="subxComment">#       emit(out, word-slice, 4)</span>
<span id="L951" class="LineNr"> 951 </span>    <span class="subxComment">#     # disp32 is not permitted in data segments, and anything else is only a byte long</span>
<span id="L952" class="LineNr"> 952 </span>    <span class="subxComment">#     else</span>
<span id="L953" class="LineNr"> 953 </span>    <span class="subxComment">#       emit(out, word-slice, 1)</span>
<span id="L954" class="LineNr"> 954 </span>    <span class="subxComment">#   write-buffered(out, &quot;\n&quot;)</span>
<span id="L955" class="LineNr"> 955 </span>    <span class="subxComment">#</span>
<span id="L956" class="LineNr"> 956 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L957" class="LineNr"> 957 </span>    55/push-ebp
<span id="L958" class="LineNr"> 958 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L959" class="LineNr"> 959 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L960" class="LineNr"> 960 </span>    50/push-eax
<span id="L961" class="LineNr"> 961 </span>    51/push-ecx
<span id="L962" class="LineNr"> 962 </span>    52/push-edx
<span id="L963" class="LineNr"> 963 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L964" class="LineNr"> 964 </span>    68/push  0/imm32/end
<span id="L965" class="LineNr"> 965 </span>    68/push  0/imm32/start
<span id="L966" class="LineNr"> 966 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L967" class="Folded"> 967 </span><span class="Folded">+-- 26 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L993" class="LineNr"> 993 </span><span class="Constant">$convert-data:loop</span>:
<span id="L994" class="LineNr"> 994 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L995" class="LineNr"> 995 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L996" class="LineNr"> 996 </span>    51/push-ecx
<span id="L997" class="LineNr"> 997 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L998" class="LineNr"> 998 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L999" class="LineNr"> 999 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L1000" class="LineNr">1000 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1001" class="LineNr">1001 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1002" class="Folded">1002 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1044" class="LineNr">1044 </span><span class="Constant">$convert-data:check0</span>:
<span id="L1045" class="LineNr">1045 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L1046" class="LineNr">1046 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L1047" class="LineNr">1047 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1048" class="LineNr">1048 </span>    51/push-ecx
<span id="L1049" class="LineNr">1049 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1050" class="LineNr">1050 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L1051" class="LineNr">1051 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1052" class="LineNr">1052 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1053" class="LineNr">1053 </span>    <span class="subxS1Comment"># . if (eax != 0) break</span>
<span id="L1054" class="LineNr">1054 </span>    3d/compare-eax-and  0/imm32
<span id="L1055" class="LineNr">1055 </span>    0f 85/jump-if-not-equal  $convert-data:<span class="Constant">break</span>/disp32
<span id="L1056" class="LineNr">1056 </span><span class="Constant">$convert-data:check-for-comment</span>:
<span id="L1057" class="LineNr">1057 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;))</span>
<span id="L1058" class="LineNr">1058 </span>    <span class="subxS1Comment"># . start/edx = word-slice-&gt;start</span>
<span id="L1059" class="LineNr">1059 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L1060" class="LineNr">1060 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L1061" class="LineNr">1061 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L1062" class="LineNr">1062 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L1063" class="LineNr">1063 </span>    <span class="subxS1Comment"># . if (eax != '#') goto next check</span>
<span id="L1064" class="LineNr">1064 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L1065" class="LineNr">1065 </span>    75/jump-if-not-equal  $convert-data:check-for-label/disp8
<span id="L1066" class="LineNr">1066 </span><span class="Constant">$convert-data:comment</span>:
<span id="L1067" class="LineNr">1067 </span>    <span class="subxComment"># write-slice-buffered(out, word-slice)</span>
<span id="L1068" class="LineNr">1068 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1069" class="LineNr">1069 </span>    51/push-ecx
<span id="L1070" class="LineNr">1070 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1071" class="LineNr">1071 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1072" class="LineNr">1072 </span>    e8/call  <a href='../072slice.subx.html#L878'>write-slice-buffered</a>/disp32
<span id="L1073" class="LineNr">1073 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1074" class="LineNr">1074 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1075" class="LineNr">1075 </span>    <span class="subxComment"># return</span>
<span id="L1076" class="LineNr">1076 </span>    0f 85/jump-if-not-equal  $convert-data:end/disp32
<span id="L1077" class="LineNr">1077 </span><span class="Constant">$convert-data:check-for-label</span>:
<span id="L1078" class="LineNr">1078 </span>    <span class="subxComment"># if (slice-ends-with?(word-slice, &quot;:&quot;))</span>
<span id="L1079" class="LineNr">1079 </span>    <span class="subxS1Comment"># . end/edx = word-slice-&gt;end</span>
<span id="L1080" class="LineNr">1080 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to edx</span>
<span id="L1081" class="LineNr">1081 </span>    <span class="subxS1Comment"># . c/eax = *(end-1)</span>
<span id="L1082" class="LineNr">1082 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L1083" class="LineNr">1083 </span>    8a/copy-byte                    1/mod/*+disp8   2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL    -1/disp8       <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ecx to AL</span>
<span id="L1084" class="LineNr">1084 </span>    <span class="subxS1Comment"># . if (eax != ':') goto next check</span>
<span id="L1085" class="LineNr">1085 </span>    3d/compare-eax-and  0x3a/imm32/colon
<span id="L1086" class="LineNr">1086 </span>    75/jump-if-not-equal  $convert-data:check-for-imm32/disp8
<span id="L1087" class="LineNr">1087 </span><span class="Constant">$convert-data:label</span>:
<span id="L1088" class="LineNr">1088 </span>    <span class="subxComment"># write-stream-data(out, line)</span>
<span id="L1089" class="LineNr">1089 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1090" class="LineNr">1090 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1091" class="LineNr">1091 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1092" class="LineNr">1092 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1093" class="LineNr">1093 </span>    e8/call  <a href='../074write-stream-data.subx.html#L11'>write-stream-data</a>/disp32
<span id="L1094" class="LineNr">1094 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1095" class="LineNr">1095 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1096" class="LineNr">1096 </span>    <span class="subxComment"># return</span>
<span id="L1097" class="LineNr">1097 </span>    75/jump-if-not-equal  $convert-data:end/disp8
<span id="L1098" class="LineNr">1098 </span><span class="Constant">$convert-data:check-for-imm32</span>:
<span id="L1099" class="LineNr">1099 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;imm32&quot;))</span>
<span id="L1100" class="LineNr">1100 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;imm32&quot;)</span>
<span id="L1101" class="LineNr">1101 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1102" class="LineNr">1102 </span>    68/push  <span class="Constant">&quot;imm32&quot;</span>/imm32
<span id="L1103" class="LineNr">1103 </span>    51/push-ecx
<span id="L1104" class="LineNr">1104 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1105" class="LineNr">1105 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L1106" class="LineNr">1106 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1107" class="LineNr">1107 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1108" class="LineNr">1108 </span>    <span class="subxS1Comment"># . if (eax == 0) process as a single byte</span>
<span id="L1109" class="LineNr">1109 </span>    3d/compare-eax-and  0/imm32
<span id="L1110" class="LineNr">1110 </span>    74/jump-if-equal  $convert-data:single-byte/disp8
<span id="L1111" class="LineNr">1111 </span><span class="Constant">$convert-data:imm32</span>:
<span id="L1112" class="LineNr">1112 </span>    <span class="subxComment"># emit(out, word-slice, 4)</span>
<span id="L1113" class="LineNr">1113 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1114" class="LineNr">1114 </span>    68/push  4/imm32
<span id="L1115" class="LineNr">1115 </span>    51/push-ecx
<span id="L1116" class="LineNr">1116 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1117" class="LineNr">1117 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1118" class="LineNr">1118 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L1119" class="LineNr">1119 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1120" class="LineNr">1120 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1121" class="LineNr">1121 </span>    e9/jump  $convert-data:<span class="Constant">loop</span>/disp32
<span id="L1122" class="LineNr">1122 </span><span class="Constant">$convert-data:single-byte</span>:
<span id="L1123" class="LineNr">1123 </span>    <span class="subxComment"># emit(out, word-slice, 1)</span>
<span id="L1124" class="LineNr">1124 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1125" class="LineNr">1125 </span>    68/push  1/imm32
<span id="L1126" class="LineNr">1126 </span>    51/push-ecx
<span id="L1127" class="LineNr">1127 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1128" class="LineNr">1128 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1129" class="LineNr">1129 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L1130" class="LineNr">1130 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1131" class="LineNr">1131 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1132" class="LineNr">1132 </span>    e9/jump  $convert-data:<span class="Constant">loop</span>/disp32
<span id="L1133" class="LineNr">1133 </span><span class="Constant">$convert-data:break</span>:
<span id="L1134" class="LineNr">1134 </span>    <span class="subxComment"># write-buffered(out, &quot;\n&quot;)</span>
<span id="L1135" class="LineNr">1135 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1136" class="LineNr">1136 </span>    68/push  <span class="SpecialChar"><a href='../051test.subx.html#L83'>Newline</a></span>/imm32
<span id="L1137" class="LineNr">1137 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1138" class="LineNr">1138 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1139" class="LineNr">1139 </span>    e8/call  <a href='../065write-buffered.subx.html#L8'>write-buffered</a>/disp32
<span id="L1140" class="LineNr">1140 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1141" class="LineNr">1141 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1142" class="LineNr">1142 </span><span class="Constant">$convert-data:end</span>:
<span id="L1143" class="LineNr">1143 </span>    <span class="subxS1Comment"># . reclaim locals</span>
<span id="L1144" class="LineNr">1144 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1145" class="LineNr">1145 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L1146" class="LineNr">1146 </span>    5a/pop-to-edx
<span id="L1147" class="LineNr">1147 </span>    59/pop-to-ecx
<span id="L1148" class="LineNr">1148 </span>    58/pop-to-eax
<span id="L1149" class="LineNr">1149 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1150" class="LineNr">1150 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1151" class="LineNr">1151 </span>    5d/pop-to-ebp
<span id="L1152" class="LineNr">1152 </span>    c3/return
<span id="L1153" class="LineNr">1153 </span>
<span id="L1154" class="LineNr">1154 </span><span class="subxTest">test-convert-data-passes-comments-through</span>:
<span id="L1155" class="LineNr">1155 </span>    <span class="subxComment"># if a line starts with '#', pass it along unchanged</span>
<span id="L1156" class="LineNr">1156 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1157" class="LineNr">1157 </span>    55/push-ebp
<span id="L1158" class="LineNr">1158 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1159" class="LineNr">1159 </span>    <span class="subxComment"># setup</span>
<span id="L1160" class="LineNr">1160 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1161" class="LineNr">1161 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1162" class="LineNr">1162 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1163" class="LineNr">1163 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1164" class="LineNr">1164 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1165" class="LineNr">1165 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1166" class="LineNr">1166 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1167" class="LineNr">1167 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1168" class="LineNr">1168 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1169" class="LineNr">1169 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1170" class="LineNr">1170 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1171" class="LineNr">1171 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1172" class="LineNr">1172 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1173" class="LineNr">1173 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1174" class="LineNr">1174 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1175" class="LineNr">1175 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1176" class="LineNr">1176 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1177" class="LineNr">1177 </span>    05/add-to-eax  4/imm32
<span id="L1178" class="LineNr">1178 </span>    50/push-eax
<span id="L1179" class="LineNr">1179 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1180" class="LineNr">1180 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1181" class="LineNr">1181 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1182" class="LineNr">1182 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1183" class="LineNr">1183 </span>    <span class="subxComment"># initialize input</span>
<span id="L1184" class="LineNr">1184 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;# abcd&quot;)</span>
<span id="L1185" class="LineNr">1185 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1186" class="LineNr">1186 </span>    68/push  <span class="Constant">&quot;# abcd&quot;</span>/imm32
<span id="L1187" class="LineNr">1187 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1188" class="LineNr">1188 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1189" class="LineNr">1189 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1190" class="LineNr">1190 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1191" class="LineNr">1191 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1192" class="LineNr">1192 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1193" class="LineNr">1193 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1194" class="LineNr">1194 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1195" class="LineNr">1195 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1196" class="LineNr">1196 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1197" class="LineNr">1197 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1198" class="LineNr">1198 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1199" class="LineNr">1199 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1200" class="LineNr">1200 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L1201" class="LineNr">1201 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1202" class="LineNr">1202 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1203" class="LineNr">1203 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1204" class="LineNr">1204 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1205" class="LineNr">1205 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1206" class="LineNr">1206 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1207" class="LineNr">1207 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1208" class="Folded">1208 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1234" class="LineNr">1234 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;# abcd&quot;, msg)</span>
<span id="L1235" class="LineNr">1235 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1236" class="LineNr">1236 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-passes-comments-through&quot;</span>/imm32
<span id="L1237" class="LineNr">1237 </span>    68/push  <span class="Constant">&quot;# abcd&quot;</span>/imm32
<span id="L1238" class="LineNr">1238 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1239" class="LineNr">1239 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1240" class="LineNr">1240 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1241" class="LineNr">1241 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1242" class="LineNr">1242 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1243" class="LineNr">1243 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1244" class="LineNr">1244 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1245" class="LineNr">1245 </span>    5d/pop-to-ebp
<span id="L1246" class="LineNr">1246 </span>    c3/return
<span id="L1247" class="LineNr">1247 </span>
<span id="L1248" class="LineNr">1248 </span><span class="subxTest">test-convert-data-passes-labels-through</span>:
<span id="L1249" class="LineNr">1249 </span>    <span class="subxComment"># if the first word ends with ':', pass along the entire line unchanged</span>
<span id="L1250" class="LineNr">1250 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1251" class="LineNr">1251 </span>    55/push-ebp
<span id="L1252" class="LineNr">1252 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1253" class="LineNr">1253 </span>    <span class="subxComment"># setup</span>
<span id="L1254" class="LineNr">1254 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1255" class="LineNr">1255 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1256" class="LineNr">1256 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1257" class="LineNr">1257 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1258" class="LineNr">1258 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1259" class="LineNr">1259 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1260" class="LineNr">1260 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1261" class="LineNr">1261 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1262" class="LineNr">1262 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1263" class="LineNr">1263 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1264" class="LineNr">1264 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1265" class="LineNr">1265 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1266" class="LineNr">1266 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1267" class="LineNr">1267 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1268" class="LineNr">1268 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1269" class="LineNr">1269 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1270" class="LineNr">1270 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1271" class="LineNr">1271 </span>    05/add-to-eax  4/imm32
<span id="L1272" class="LineNr">1272 </span>    50/push-eax
<span id="L1273" class="LineNr">1273 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1274" class="LineNr">1274 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1275" class="LineNr">1275 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1276" class="LineNr">1276 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1277" class="LineNr">1277 </span>    <span class="subxComment"># initialize input</span>
<span id="L1278" class="LineNr">1278 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;ab: # cd&quot;)</span>
<span id="L1279" class="LineNr">1279 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1280" class="LineNr">1280 </span>    68/push  <span class="Constant">&quot;ab: # cd&quot;</span>/imm32
<span id="L1281" class="LineNr">1281 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1282" class="LineNr">1282 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1283" class="LineNr">1283 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1284" class="LineNr">1284 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1285" class="LineNr">1285 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1286" class="LineNr">1286 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1287" class="LineNr">1287 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1288" class="LineNr">1288 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1289" class="LineNr">1289 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1290" class="LineNr">1290 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1291" class="LineNr">1291 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1292" class="LineNr">1292 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1293" class="LineNr">1293 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1294" class="LineNr">1294 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L1295" class="LineNr">1295 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1296" class="LineNr">1296 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1297" class="LineNr">1297 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1298" class="LineNr">1298 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1299" class="LineNr">1299 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1300" class="LineNr">1300 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1301" class="LineNr">1301 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1302" class="LineNr">1302 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;ab: # cd&quot;, msg)</span>
<span id="L1303" class="LineNr">1303 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1304" class="LineNr">1304 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-passes-labels-through&quot;</span>/imm32
<span id="L1305" class="LineNr">1305 </span>    68/push  <span class="Constant">&quot;ab: # cd&quot;</span>/imm32
<span id="L1306" class="LineNr">1306 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1307" class="LineNr">1307 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1308" class="LineNr">1308 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1309" class="LineNr">1309 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1310" class="LineNr">1310 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1311" class="LineNr">1311 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1312" class="LineNr">1312 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1313" class="LineNr">1313 </span>    5d/pop-to-ebp
<span id="L1314" class="LineNr">1314 </span>    c3/return
<span id="L1315" class="LineNr">1315 </span>
<span id="L1316" class="LineNr">1316 </span><span class="subxTest">test-convert-data-passes-names-through</span>:
<span id="L1317" class="LineNr">1317 </span>    <span class="subxComment"># If a word is a valid name, just emit it unchanged.</span>
<span id="L1318" class="LineNr">1318 </span>    <span class="subxComment"># Later phases will deal with it.</span>
<span id="L1319" class="LineNr">1319 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1320" class="LineNr">1320 </span>    55/push-ebp
<span id="L1321" class="LineNr">1321 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1322" class="LineNr">1322 </span>    <span class="subxComment"># setup</span>
<span id="L1323" class="LineNr">1323 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1324" class="LineNr">1324 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1325" class="LineNr">1325 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1326" class="LineNr">1326 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1327" class="LineNr">1327 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1328" class="LineNr">1328 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1329" class="LineNr">1329 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1330" class="LineNr">1330 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1331" class="LineNr">1331 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1332" class="LineNr">1332 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1333" class="LineNr">1333 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1334" class="LineNr">1334 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1335" class="LineNr">1335 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1336" class="LineNr">1336 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1337" class="LineNr">1337 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1338" class="LineNr">1338 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1339" class="LineNr">1339 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1340" class="LineNr">1340 </span>    05/add-to-eax  4/imm32
<span id="L1341" class="LineNr">1341 </span>    50/push-eax
<span id="L1342" class="LineNr">1342 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1343" class="LineNr">1343 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1344" class="LineNr">1344 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1345" class="LineNr">1345 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1346" class="LineNr">1346 </span>    <span class="subxComment"># initialize input</span>
<span id="L1347" class="LineNr">1347 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;abcd/imm32&quot;)</span>
<span id="L1348" class="LineNr">1348 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1349" class="LineNr">1349 </span>    68/push  <span class="Constant">&quot;abcd/imm32&quot;</span>/imm32
<span id="L1350" class="LineNr">1350 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1351" class="LineNr">1351 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1352" class="LineNr">1352 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1353" class="LineNr">1353 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1354" class="LineNr">1354 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1355" class="LineNr">1355 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1356" class="LineNr">1356 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1357" class="LineNr">1357 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1358" class="LineNr">1358 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1359" class="LineNr">1359 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1360" class="LineNr">1360 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1361" class="LineNr">1361 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1362" class="LineNr">1362 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1363" class="LineNr">1363 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L1364" class="LineNr">1364 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1365" class="LineNr">1365 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1366" class="LineNr">1366 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1367" class="LineNr">1367 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1368" class="LineNr">1368 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1369" class="LineNr">1369 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1370" class="LineNr">1370 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1371" class="LineNr">1371 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;abcd/imm32 \n&quot;, msg)</span>
<span id="L1372" class="LineNr">1372 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1373" class="LineNr">1373 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-passes-names-through&quot;</span>/imm32
<span id="L1374" class="LineNr">1374 </span>    68/push  <span class="Constant">&quot;abcd/imm32 \n&quot;</span>/imm32
<span id="L1375" class="LineNr">1375 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1376" class="LineNr">1376 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1377" class="LineNr">1377 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1378" class="LineNr">1378 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1379" class="LineNr">1379 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1380" class="LineNr">1380 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1381" class="LineNr">1381 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1382" class="LineNr">1382 </span>    5d/pop-to-ebp
<span id="L1383" class="LineNr">1383 </span>    c3/return
<span id="L1384" class="LineNr">1384 </span>
<span id="L1385" class="LineNr">1385 </span><span class="subxTest">test-convert-data-handles-imm32</span>:
<span id="L1386" class="LineNr">1386 </span>    <span class="subxComment"># If a word has the /imm32 metadata, emit it in 4 bytes.</span>
<span id="L1387" class="LineNr">1387 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1388" class="LineNr">1388 </span>    55/push-ebp
<span id="L1389" class="LineNr">1389 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1390" class="LineNr">1390 </span>    <span class="subxComment"># setup</span>
<span id="L1391" class="LineNr">1391 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1392" class="LineNr">1392 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1393" class="LineNr">1393 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1394" class="LineNr">1394 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1395" class="LineNr">1395 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1396" class="LineNr">1396 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1397" class="LineNr">1397 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1398" class="LineNr">1398 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1399" class="LineNr">1399 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1400" class="LineNr">1400 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1401" class="LineNr">1401 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1402" class="LineNr">1402 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1403" class="LineNr">1403 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1404" class="LineNr">1404 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1405" class="LineNr">1405 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1406" class="LineNr">1406 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1407" class="LineNr">1407 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1408" class="LineNr">1408 </span>    05/add-to-eax  4/imm32
<span id="L1409" class="LineNr">1409 </span>    50/push-eax
<span id="L1410" class="LineNr">1410 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1411" class="LineNr">1411 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1412" class="LineNr">1412 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1413" class="LineNr">1413 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1414" class="LineNr">1414 </span>    <span class="subxComment"># initialize input</span>
<span id="L1415" class="LineNr">1415 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;30/imm32&quot;)</span>
<span id="L1416" class="LineNr">1416 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1417" class="LineNr">1417 </span>    68/push  <span class="Constant">&quot;30/imm32&quot;</span>/imm32
<span id="L1418" class="LineNr">1418 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1419" class="LineNr">1419 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1420" class="LineNr">1420 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1421" class="LineNr">1421 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1422" class="LineNr">1422 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1423" class="LineNr">1423 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1424" class="LineNr">1424 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1425" class="LineNr">1425 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1426" class="LineNr">1426 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1427" class="LineNr">1427 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1428" class="LineNr">1428 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1429" class="LineNr">1429 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1430" class="LineNr">1430 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1431" class="LineNr">1431 </span>    <span class="subxComment"># check that 4 bytes were written</span>
<span id="L1432" class="LineNr">1432 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1433" class="LineNr">1433 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1434" class="LineNr">1434 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1435" class="LineNr">1435 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1436" class="LineNr">1436 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1437" class="LineNr">1437 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1438" class="LineNr">1438 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1439" class="LineNr">1439 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;30 00 00 00 \n&quot;, msg)</span>
<span id="L1440" class="LineNr">1440 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1441" class="LineNr">1441 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-handles-imm32&quot;</span>/imm32
<span id="L1442" class="LineNr">1442 </span>    68/push  <span class="Constant">&quot;30 00 00 00 \n&quot;</span>/imm32
<span id="L1443" class="LineNr">1443 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1444" class="LineNr">1444 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1445" class="LineNr">1445 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1446" class="LineNr">1446 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1447" class="LineNr">1447 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1448" class="LineNr">1448 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1449" class="LineNr">1449 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1450" class="LineNr">1450 </span>    5d/pop-to-ebp
<span id="L1451" class="LineNr">1451 </span>    c3/return
<span id="L1452" class="LineNr">1452 </span>
<span id="L1453" class="LineNr">1453 </span><span class="subxTest">test-convert-data-handles-single-byte</span>:
<span id="L1454" class="LineNr">1454 </span>    <span class="subxComment"># Any metadata but /imm32 will emit a single byte.</span>
<span id="L1455" class="LineNr">1455 </span>    <span class="subxComment"># Data segments can't have /disp32, and SubX doesn't support 16-bit operands.</span>
<span id="L1456" class="LineNr">1456 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1457" class="LineNr">1457 </span>    55/push-ebp
<span id="L1458" class="LineNr">1458 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1459" class="LineNr">1459 </span>    <span class="subxComment"># setup</span>
<span id="L1460" class="LineNr">1460 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1461" class="LineNr">1461 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1462" class="LineNr">1462 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1463" class="LineNr">1463 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1464" class="LineNr">1464 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1465" class="LineNr">1465 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1466" class="LineNr">1466 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1467" class="LineNr">1467 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1468" class="LineNr">1468 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1469" class="LineNr">1469 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1470" class="LineNr">1470 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1471" class="LineNr">1471 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1472" class="LineNr">1472 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1473" class="LineNr">1473 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1474" class="LineNr">1474 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1475" class="LineNr">1475 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1476" class="LineNr">1476 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1477" class="LineNr">1477 </span>    05/add-to-eax  4/imm32
<span id="L1478" class="LineNr">1478 </span>    50/push-eax
<span id="L1479" class="LineNr">1479 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1480" class="LineNr">1480 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1481" class="LineNr">1481 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1482" class="LineNr">1482 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1483" class="LineNr">1483 </span>    <span class="subxComment"># initialize input</span>
<span id="L1484" class="LineNr">1484 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;30/imm16&quot;)</span>
<span id="L1485" class="LineNr">1485 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1486" class="LineNr">1486 </span>    68/push  <span class="Constant">&quot;30/imm16&quot;</span>/imm32
<span id="L1487" class="LineNr">1487 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1488" class="LineNr">1488 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1489" class="LineNr">1489 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1490" class="LineNr">1490 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1491" class="LineNr">1491 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1492" class="LineNr">1492 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1493" class="LineNr">1493 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1494" class="LineNr">1494 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1495" class="LineNr">1495 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1496" class="LineNr">1496 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1497" class="LineNr">1497 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1498" class="LineNr">1498 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1499" class="LineNr">1499 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1500" class="LineNr">1500 </span>    <span class="subxComment"># check that a single byte was written (imm16 is not a valid operand type)</span>
<span id="L1501" class="LineNr">1501 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1502" class="LineNr">1502 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1503" class="LineNr">1503 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1504" class="LineNr">1504 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1505" class="LineNr">1505 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1506" class="LineNr">1506 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1507" class="LineNr">1507 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1508" class="LineNr">1508 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;30 \n&quot;, msg)</span>
<span id="L1509" class="LineNr">1509 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1510" class="LineNr">1510 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-handles-single-byte&quot;</span>/imm32
<span id="L1511" class="LineNr">1511 </span>    68/push  <span class="Constant">&quot;30 \n&quot;</span>/imm32
<span id="L1512" class="LineNr">1512 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1513" class="LineNr">1513 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1514" class="LineNr">1514 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1515" class="LineNr">1515 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1516" class="LineNr">1516 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1517" class="LineNr">1517 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1518" class="LineNr">1518 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1519" class="LineNr">1519 </span>    5d/pop-to-ebp
<span id="L1520" class="LineNr">1520 </span>    c3/return
<span id="L1521" class="LineNr">1521 </span>
<span id="L1522" class="LineNr">1522 </span><span class="subxTest">test-convert-data-multiple-bytes</span>:
<span id="L1523" class="LineNr">1523 </span>    <span class="subxComment"># Multiple single-byte words in input stream get processed one by one.</span>
<span id="L1524" class="LineNr">1524 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1525" class="LineNr">1525 </span>    55/push-ebp
<span id="L1526" class="LineNr">1526 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1527" class="LineNr">1527 </span>    <span class="subxComment"># setup</span>
<span id="L1528" class="LineNr">1528 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1529" class="LineNr">1529 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1530" class="LineNr">1530 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1531" class="LineNr">1531 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1532" class="LineNr">1532 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1533" class="LineNr">1533 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1534" class="LineNr">1534 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1535" class="LineNr">1535 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1536" class="LineNr">1536 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1537" class="LineNr">1537 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1538" class="LineNr">1538 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1539" class="LineNr">1539 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1540" class="LineNr">1540 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1541" class="LineNr">1541 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1542" class="LineNr">1542 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1543" class="LineNr">1543 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1544" class="LineNr">1544 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1545" class="LineNr">1545 </span>    05/add-to-eax  4/imm32
<span id="L1546" class="LineNr">1546 </span>    50/push-eax
<span id="L1547" class="LineNr">1547 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1548" class="LineNr">1548 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1549" class="LineNr">1549 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1550" class="LineNr">1550 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1551" class="LineNr">1551 </span>    <span class="subxComment"># initialize input</span>
<span id="L1552" class="LineNr">1552 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;1 2&quot;)</span>
<span id="L1553" class="LineNr">1553 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1554" class="LineNr">1554 </span>    68/push  <span class="Constant">&quot;1 2&quot;</span>/imm32
<span id="L1555" class="LineNr">1555 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1556" class="LineNr">1556 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1557" class="LineNr">1557 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1558" class="LineNr">1558 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1559" class="LineNr">1559 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1560" class="LineNr">1560 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1561" class="LineNr">1561 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1562" class="LineNr">1562 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1563" class="LineNr">1563 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1564" class="LineNr">1564 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1565" class="LineNr">1565 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1566" class="LineNr">1566 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1567" class="LineNr">1567 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1568" class="LineNr">1568 </span>    <span class="subxComment"># check output</span>
<span id="L1569" class="LineNr">1569 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1570" class="LineNr">1570 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1571" class="LineNr">1571 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1572" class="LineNr">1572 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1573" class="LineNr">1573 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1574" class="LineNr">1574 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1575" class="LineNr">1575 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1576" class="LineNr">1576 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;01 02 \n&quot;, msg)</span>
<span id="L1577" class="LineNr">1577 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1578" class="LineNr">1578 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-multiple-bytes&quot;</span>/imm32
<span id="L1579" class="LineNr">1579 </span>    68/push  <span class="Constant">&quot;01 02 \n&quot;</span>/imm32
<span id="L1580" class="LineNr">1580 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1581" class="LineNr">1581 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1582" class="LineNr">1582 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1583" class="LineNr">1583 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1584" class="LineNr">1584 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1585" class="LineNr">1585 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1586" class="LineNr">1586 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1587" class="LineNr">1587 </span>    5d/pop-to-ebp
<span id="L1588" class="LineNr">1588 </span>    c3/return
<span id="L1589" class="LineNr">1589 </span>
<span id="L1590" class="LineNr">1590 </span><span class="subxTest">test-convert-data-byte-then-name</span>:
<span id="L1591" class="LineNr">1591 </span>    <span class="subxComment"># Single-byte word followed by valid name get processed one by one.</span>
<span id="L1592" class="LineNr">1592 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1593" class="LineNr">1593 </span>    55/push-ebp
<span id="L1594" class="LineNr">1594 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1595" class="LineNr">1595 </span>    <span class="subxComment"># setup</span>
<span id="L1596" class="LineNr">1596 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1597" class="LineNr">1597 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1598" class="LineNr">1598 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1599" class="LineNr">1599 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1600" class="LineNr">1600 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1601" class="LineNr">1601 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1602" class="LineNr">1602 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1603" class="LineNr">1603 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1604" class="LineNr">1604 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1605" class="LineNr">1605 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1606" class="LineNr">1606 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1607" class="LineNr">1607 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1608" class="LineNr">1608 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1609" class="LineNr">1609 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1610" class="LineNr">1610 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1611" class="LineNr">1611 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1612" class="LineNr">1612 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1613" class="LineNr">1613 </span>    05/add-to-eax  4/imm32
<span id="L1614" class="LineNr">1614 </span>    50/push-eax
<span id="L1615" class="LineNr">1615 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1616" class="LineNr">1616 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1617" class="LineNr">1617 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1618" class="LineNr">1618 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1619" class="LineNr">1619 </span>    <span class="subxComment"># initialize input</span>
<span id="L1620" class="LineNr">1620 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;30 abcd/o&quot;)</span>
<span id="L1621" class="LineNr">1621 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1622" class="LineNr">1622 </span>    68/push  <span class="Constant">&quot;30 abcd/o&quot;</span>/imm32
<span id="L1623" class="LineNr">1623 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1624" class="LineNr">1624 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1625" class="LineNr">1625 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1626" class="LineNr">1626 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1627" class="LineNr">1627 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1628" class="LineNr">1628 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1629" class="LineNr">1629 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1630" class="LineNr">1630 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1631" class="LineNr">1631 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1632" class="LineNr">1632 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1633" class="LineNr">1633 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1634" class="LineNr">1634 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1635" class="LineNr">1635 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1636" class="LineNr">1636 </span>    <span class="subxComment"># check output</span>
<span id="L1637" class="LineNr">1637 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1638" class="LineNr">1638 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1639" class="LineNr">1639 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1640" class="LineNr">1640 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1641" class="LineNr">1641 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1642" class="LineNr">1642 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1643" class="LineNr">1643 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1644" class="LineNr">1644 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;30 abcd/o \n&quot;, msg)</span>
<span id="L1645" class="LineNr">1645 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1646" class="LineNr">1646 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-byte-then-name&quot;</span>/imm32
<span id="L1647" class="LineNr">1647 </span>    68/push  <span class="Constant">&quot;30 abcd/o \n&quot;</span>/imm32
<span id="L1648" class="LineNr">1648 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1649" class="LineNr">1649 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1650" class="LineNr">1650 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1651" class="LineNr">1651 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1652" class="LineNr">1652 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1653" class="LineNr">1653 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1654" class="LineNr">1654 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1655" class="LineNr">1655 </span>    5d/pop-to-ebp
<span id="L1656" class="LineNr">1656 </span>    c3/return
<span id="L1657" class="LineNr">1657 </span>
<span id="L1658" class="LineNr">1658 </span><span class="subxTest">test-convert-data-multiple-words</span>:
<span id="L1659" class="LineNr">1659 </span>    <span class="subxComment"># Multiple words in input stream get processed one by one.</span>
<span id="L1660" class="LineNr">1660 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1661" class="LineNr">1661 </span>    55/push-ebp
<span id="L1662" class="LineNr">1662 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1663" class="LineNr">1663 </span>    <span class="subxComment"># setup</span>
<span id="L1664" class="LineNr">1664 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1665" class="LineNr">1665 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1666" class="LineNr">1666 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1667" class="LineNr">1667 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1668" class="LineNr">1668 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1669" class="LineNr">1669 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1670" class="LineNr">1670 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1671" class="LineNr">1671 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1672" class="LineNr">1672 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1673" class="LineNr">1673 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1674" class="LineNr">1674 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1675" class="LineNr">1675 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1676" class="LineNr">1676 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1677" class="LineNr">1677 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1678" class="LineNr">1678 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1679" class="LineNr">1679 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1680" class="LineNr">1680 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1681" class="LineNr">1681 </span>    05/add-to-eax  4/imm32
<span id="L1682" class="LineNr">1682 </span>    50/push-eax
<span id="L1683" class="LineNr">1683 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1684" class="LineNr">1684 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1685" class="LineNr">1685 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1686" class="LineNr">1686 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1687" class="LineNr">1687 </span>    <span class="subxComment"># initialize input</span>
<span id="L1688" class="LineNr">1688 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;30 abcd/o 42e1/imm32&quot;)</span>
<span id="L1689" class="LineNr">1689 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1690" class="LineNr">1690 </span>    68/push  <span class="Constant">&quot;30 abcd/o 42e1/imm32&quot;</span>/imm32
<span id="L1691" class="LineNr">1691 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1692" class="LineNr">1692 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1693" class="LineNr">1693 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1694" class="LineNr">1694 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1695" class="LineNr">1695 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1696" class="LineNr">1696 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1697" class="LineNr">1697 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1698" class="LineNr">1698 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1699" class="LineNr">1699 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1700" class="LineNr">1700 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1701" class="LineNr">1701 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1702" class="LineNr">1702 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1703" class="LineNr">1703 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1704" class="LineNr">1704 </span>    <span class="subxComment"># check output</span>
<span id="L1705" class="LineNr">1705 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1706" class="LineNr">1706 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1707" class="LineNr">1707 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1708" class="LineNr">1708 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1709" class="LineNr">1709 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1710" class="LineNr">1710 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1711" class="LineNr">1711 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1712" class="Folded">1712 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1738" class="LineNr">1738 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;30 abcd/o 42 e1 00 00 \n&quot;, msg)</span>
<span id="L1739" class="LineNr">1739 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1740" class="LineNr">1740 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-multiple-words&quot;</span>/imm32
<span id="L1741" class="LineNr">1741 </span>    68/push  <span class="Constant">&quot;30 abcd/o e1 42 00 00 \n&quot;</span>/imm32
<span id="L1742" class="LineNr">1742 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1743" class="LineNr">1743 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1744" class="LineNr">1744 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1745" class="LineNr">1745 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1746" class="LineNr">1746 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1747" class="LineNr">1747 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1748" class="LineNr">1748 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1749" class="LineNr">1749 </span>    5d/pop-to-ebp
<span id="L1750" class="LineNr">1750 </span>    c3/return
<span id="L1751" class="LineNr">1751 </span>
<span id="L1752" class="LineNr">1752 </span><span class="subxTest">test-convert-data-trailing-comment</span>:
<span id="L1753" class="LineNr">1753 </span>    <span class="subxComment"># Trailing comments in data segment get appropriately ignored.</span>
<span id="L1754" class="LineNr">1754 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1755" class="LineNr">1755 </span>    55/push-ebp
<span id="L1756" class="LineNr">1756 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1757" class="LineNr">1757 </span>    <span class="subxComment"># setup</span>
<span id="L1758" class="LineNr">1758 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L1759" class="LineNr">1759 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1760" class="LineNr">1760 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1761" class="LineNr">1761 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1762" class="LineNr">1762 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1763" class="LineNr">1763 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1764" class="LineNr">1764 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1765" class="LineNr">1765 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L1766" class="LineNr">1766 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1767" class="LineNr">1767 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1768" class="LineNr">1768 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1769" class="LineNr">1769 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1770" class="LineNr">1770 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1771" class="LineNr">1771 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1772" class="LineNr">1772 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L1773" class="LineNr">1773 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1774" class="LineNr">1774 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1775" class="LineNr">1775 </span>    05/add-to-eax  4/imm32
<span id="L1776" class="LineNr">1776 </span>    50/push-eax
<span id="L1777" class="LineNr">1777 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1778" class="LineNr">1778 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L1779" class="LineNr">1779 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1780" class="LineNr">1780 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1781" class="LineNr">1781 </span>    <span class="subxComment"># initialize input</span>
<span id="L1782" class="LineNr">1782 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;30/imm32 # comment&quot;)</span>
<span id="L1783" class="LineNr">1783 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1784" class="LineNr">1784 </span>    68/push  <span class="Constant">&quot;30/imm32 # comment&quot;</span>/imm32
<span id="L1785" class="LineNr">1785 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1786" class="LineNr">1786 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1787" class="LineNr">1787 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L1788" class="LineNr">1788 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1789" class="LineNr">1789 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1790" class="LineNr">1790 </span>    <span class="subxComment"># convert-data(_test-input-stream, _test-output-buffered-file)</span>
<span id="L1791" class="LineNr">1791 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1792" class="LineNr">1792 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1793" class="LineNr">1793 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L1794" class="LineNr">1794 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1795" class="LineNr">1795 </span>    e8/call  <a href='pack.subx.html#L936'>convert-data</a>/disp32
<span id="L1796" class="LineNr">1796 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1797" class="LineNr">1797 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1798" class="LineNr">1798 </span>    <span class="subxComment"># check output</span>
<span id="L1799" class="LineNr">1799 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L1800" class="LineNr">1800 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1801" class="LineNr">1801 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L1802" class="LineNr">1802 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1803" class="LineNr">1803 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L1804" class="LineNr">1804 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1805" class="LineNr">1805 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1806" class="Folded">1806 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1832" class="LineNr">1832 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;30 00 00 00 # comment&quot;, msg)</span>
<span id="L1833" class="LineNr">1833 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1834" class="LineNr">1834 </span>    68/push  <span class="Constant">&quot;F - test-convert-data-trailing-comment&quot;</span>/imm32
<span id="L1835" class="LineNr">1835 </span>    68/push  <span class="Constant">&quot;30 00 00 00 # comment&quot;</span>/imm32
<span id="L1836" class="LineNr">1836 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L1837" class="LineNr">1837 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1838" class="LineNr">1838 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L1839" class="LineNr">1839 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1840" class="LineNr">1840 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L1841" class="LineNr">1841 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1842" class="LineNr">1842 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1843" class="LineNr">1843 </span>    5d/pop-to-ebp
<span id="L1844" class="LineNr">1844 </span>    c3/return
<span id="L1845" class="LineNr">1845 </span>
<span id="L1846" class="LineNr">1846 </span><span class="subxComment"># pack an instruction, following the C++ version</span>
<span id="L1847" class="LineNr">1847 </span><span class="subxComment">#</span>
<span id="L1848" class="LineNr">1848 </span><span class="subxComment"># zero error handling at the moment (continuing to rely on the C++ version for that):</span>
<span id="L1849" class="LineNr">1849 </span><span class="subxComment">#   missing fields are always 0-filled</span>
<span id="L1850" class="LineNr">1850 </span><span class="subxComment">#   bytes never mentioned are silently dropped; if you don't provide /mod, /rm32 or /r32 you don't get a 0 ModR/M byte. You get *no* ModR/M byte.</span>
<span id="L1851" class="LineNr">1851 </span><span class="subxComment">#   may pick up any of duplicate operands in an instruction</span>
<span id="L1852" class="LineNr">1852 </span><span class="subxComment">#   silently drop extraneous operands</span>
<span id="L1853" class="LineNr">1853 </span><span class="subxComment">#   unceremoniously abort on non-numeric operands except disp or imm</span>
<span id="L1854" class="LineNr">1854 </span><span class="subxComment">#   opcodes must be lowercase and zero padded</span>
<span id="L1855" class="LineNr">1855 </span><span class="subxComment">#   opcodes with misleading operand metadata may get duplicated as operands as well. don't rely on this.</span>
<span id="L1856" class="LineNr">1856 </span><span class="subxFunction">convert-instruction</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L1857" class="LineNr">1857 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L1858" class="LineNr">1858 </span>    <span class="subxComment">#   # some early exits</span>
<span id="L1859" class="LineNr">1859 </span>    <span class="subxComment">#   var word-slice = next-word(line)</span>
<span id="L1860" class="LineNr">1860 </span>    <span class="subxComment">#   if slice-empty?(word-slice)</span>
<span id="L1861" class="LineNr">1861 </span>    <span class="subxComment">#     write-stream-data(out, line)</span>
<span id="L1862" class="LineNr">1862 </span>    <span class="subxComment">#     return</span>
<span id="L1863" class="LineNr">1863 </span>    <span class="subxComment">#   if slice-starts-with?(word-slice, &quot;#&quot;)</span>
<span id="L1864" class="LineNr">1864 </span>    <span class="subxComment">#     write-stream-data(out, line)</span>
<span id="L1865" class="LineNr">1865 </span>    <span class="subxComment">#     return</span>
<span id="L1866" class="LineNr">1866 </span>    <span class="subxComment">#   if slice-ends-with?(word-slice, &quot;:&quot;)</span>
<span id="L1867" class="LineNr">1867 </span>    <span class="subxComment">#     write-stream-data(out, line)</span>
<span id="L1868" class="LineNr">1868 </span>    <span class="subxComment">#     return</span>
<span id="L1869" class="LineNr">1869 </span>    <span class="subxComment">#   # really convert</span>
<span id="L1870" class="LineNr">1870 </span>    <span class="subxComment">#   emit-opcodes(line, out)</span>
<span id="L1871" class="LineNr">1871 </span>    <span class="subxComment">#   emit-modrm(line, out)</span>
<span id="L1872" class="LineNr">1872 </span>    <span class="subxComment">#   emit-sib(line, out)</span>
<span id="L1873" class="LineNr">1873 </span>    <span class="subxComment">#   emit-disp(line, out)</span>
<span id="L1874" class="LineNr">1874 </span>    <span class="subxComment">#   emit-imm(line, out)</span>
<span id="L1875" class="LineNr">1875 </span>    <span class="subxComment">#   emit-line-in-comment(line, out)</span>
<span id="L1876" class="LineNr">1876 </span>    <span class="subxComment">#</span>
<span id="L1877" class="LineNr">1877 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L1878" class="LineNr">1878 </span>    55/push-ebp
<span id="L1879" class="LineNr">1879 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L1880" class="LineNr">1880 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L1881" class="LineNr">1881 </span>    50/push-eax
<span id="L1882" class="LineNr">1882 </span>    51/push-ecx
<span id="L1883" class="LineNr">1883 </span>    52/push-edx
<span id="L1884" class="LineNr">1884 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L1885" class="LineNr">1885 </span>    68/push  0/imm32/end
<span id="L1886" class="LineNr">1886 </span>    68/push  0/imm32/start
<span id="L1887" class="LineNr">1887 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L1888" class="LineNr">1888 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L1889" class="LineNr">1889 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1890" class="LineNr">1890 </span>    51/push-ecx
<span id="L1891" class="LineNr">1891 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1892" class="LineNr">1892 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1893" class="LineNr">1893 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L1894" class="LineNr">1894 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1895" class="LineNr">1895 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1896" class="LineNr">1896 </span><span class="Constant">$convert-instruction:check0</span>:
<span id="L1897" class="LineNr">1897 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L1898" class="LineNr">1898 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L1899" class="LineNr">1899 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1900" class="LineNr">1900 </span>    51/push-ecx
<span id="L1901" class="LineNr">1901 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1902" class="LineNr">1902 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L1903" class="LineNr">1903 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1904" class="LineNr">1904 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L1905" class="LineNr">1905 </span>    <span class="subxS1Comment"># . if (eax != 0) pass through</span>
<span id="L1906" class="LineNr">1906 </span>    3d/compare-eax-and  0/imm32
<span id="L1907" class="LineNr">1907 </span>    75/jump-if-not-equal  $convert-instruction:pass-through/disp8
<span id="L1908" class="LineNr">1908 </span><span class="Constant">$convert-instruction:check1</span>:
<span id="L1909" class="LineNr">1909 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;)) write-stream-data(out, line)</span>
<span id="L1910" class="LineNr">1910 </span>    <span class="subxS1Comment"># . start/edx = word-slice-&gt;start</span>
<span id="L1911" class="LineNr">1911 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L1912" class="LineNr">1912 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L1913" class="LineNr">1913 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L1914" class="LineNr">1914 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L1915" class="LineNr">1915 </span>    <span class="subxS1Comment"># . if (eax == '#') pass through</span>
<span id="L1916" class="LineNr">1916 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L1917" class="LineNr">1917 </span>    74/jump-if-equal  $convert-instruction:pass-through/disp8
<span id="L1918" class="LineNr">1918 </span><span class="Constant">$convert-instruction:check2</span>:
<span id="L1919" class="LineNr">1919 </span>    <span class="subxComment"># if (slice-ends-with?(word-slice, &quot;:&quot;)) write-stream-data(out, line)</span>
<span id="L1920" class="LineNr">1920 </span>    <span class="subxS1Comment"># . end/edx = word-slice-&gt;end</span>
<span id="L1921" class="LineNr">1921 </span>    8b/copy                         1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx   4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ecx+4) to edx</span>
<span id="L1922" class="LineNr">1922 </span>    <span class="subxS1Comment"># . c/eax = *(end-1)</span>
<span id="L1923" class="LineNr">1923 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L1924" class="LineNr">1924 </span>    8a/copy-byte                    1/mod/*+disp8   2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL    -1/disp8       <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ecx to AL</span>
<span id="L1925" class="LineNr">1925 </span>    <span class="subxS1Comment"># . if (eax == ':') pass through</span>
<span id="L1926" class="LineNr">1926 </span>    3d/compare-eax-and  0x3a/imm32/colon
<span id="L1927" class="LineNr">1927 </span>    75/jump-if-not-equal  $convert-instruction:really-convert/disp8
<span id="L1928" class="LineNr">1928 </span><span class="Constant">$convert-instruction:pass-through</span>:
<span id="L1929" class="LineNr">1929 </span>    <span class="subxComment"># write-stream-data(out, line)</span>
<span id="L1930" class="LineNr">1930 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1931" class="LineNr">1931 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1932" class="LineNr">1932 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1933" class="LineNr">1933 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1934" class="LineNr">1934 </span>    e8/call  <a href='../074write-stream-data.subx.html#L11'>write-stream-data</a>/disp32
<span id="L1935" class="LineNr">1935 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1936" class="LineNr">1936 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1937" class="LineNr">1937 </span>    <span class="subxComment"># return</span>
<span id="L1938" class="LineNr">1938 </span>    eb/jump  $convert-instruction:end/disp8
<span id="L1939" class="LineNr">1939 </span><span class="Constant">$convert-instruction:really-convert</span>:
<span id="L1940" class="LineNr">1940 </span>    <span class="subxComment"># emit-opcodes(line, out)</span>
<span id="L1941" class="LineNr">1941 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1942" class="LineNr">1942 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1943" class="LineNr">1943 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1944" class="LineNr">1944 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1945" class="LineNr">1945 </span>    e8/call  <a href='pack.subx.html#L2000'>emit-opcodes</a>/disp32
<span id="L1946" class="LineNr">1946 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1947" class="LineNr">1947 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1948" class="LineNr">1948 </span>    <span class="subxComment"># emit-modrm(line, out)</span>
<span id="L1949" class="LineNr">1949 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1950" class="LineNr">1950 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1951" class="LineNr">1951 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1952" class="LineNr">1952 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1953" class="LineNr">1953 </span>    e8/call  <a href='pack.subx.html#L2296'>emit-modrm</a>/disp32
<span id="L1954" class="LineNr">1954 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1955" class="LineNr">1955 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1956" class="LineNr">1956 </span>    <span class="subxComment"># emit-sib(line, out)</span>
<span id="L1957" class="LineNr">1957 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1958" class="LineNr">1958 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1959" class="LineNr">1959 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1960" class="LineNr">1960 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1961" class="LineNr">1961 </span>    e8/call  <a href='pack.subx.html#L2615'>emit-sib</a>/disp32
<span id="L1962" class="LineNr">1962 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1963" class="LineNr">1963 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1964" class="LineNr">1964 </span>    <span class="subxComment"># emit-disp(line, out)</span>
<span id="L1965" class="LineNr">1965 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1966" class="LineNr">1966 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1967" class="LineNr">1967 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1968" class="LineNr">1968 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1969" class="LineNr">1969 </span>    e8/call  <a href='pack.subx.html#L2898'>emit-disp</a>/disp32
<span id="L1970" class="LineNr">1970 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1971" class="LineNr">1971 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1972" class="LineNr">1972 </span>    <span class="subxComment"># emit-imm(line, out)</span>
<span id="L1973" class="LineNr">1973 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1974" class="LineNr">1974 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1975" class="LineNr">1975 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1976" class="LineNr">1976 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1977" class="LineNr">1977 </span>    e8/call  <a href='pack.subx.html#L3119'>emit-imm</a>/disp32
<span id="L1978" class="LineNr">1978 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1979" class="LineNr">1979 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1980" class="LineNr">1980 </span>    <span class="subxComment"># emit-line-in-comment(line, out)</span>
<span id="L1981" class="LineNr">1981 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L1982" class="LineNr">1982 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L1983" class="LineNr">1983 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L1984" class="LineNr">1984 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L1985" class="LineNr">1985 </span>    e8/call  <a href='pack.subx.html#L3340'>emit-line-in-comment</a>/disp32
<span id="L1986" class="LineNr">1986 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L1987" class="LineNr">1987 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1988" class="LineNr">1988 </span><span class="Constant">$convert-instruction:end</span>:
<span id="L1989" class="LineNr">1989 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L1990" class="LineNr">1990 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L1991" class="LineNr">1991 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L1992" class="LineNr">1992 </span>    5a/pop-to-edx
<span id="L1993" class="LineNr">1993 </span>    59/pop-to-ecx
<span id="L1994" class="LineNr">1994 </span>    58/pop-to-eax
<span id="L1995" class="LineNr">1995 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L1996" class="LineNr">1996 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L1997" class="LineNr">1997 </span>    5d/pop-to-ebp
<span id="L1998" class="LineNr">1998 </span>    c3/return
<span id="L1999" class="LineNr">1999 </span>
<span id="L2000" class="LineNr">2000 </span><span class="subxFunction">emit-opcodes</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L2001" class="LineNr">2001 </span>    <span class="subxComment"># opcodes occupy 1-3 bytes:</span>
<span id="L2002" class="LineNr">2002 </span>    <span class="subxComment">#   xx</span>
<span id="L2003" class="LineNr">2003 </span>    <span class="subxComment">#   0f xx</span>
<span id="L2004" class="LineNr">2004 </span>    <span class="subxComment">#   f2 xx</span>
<span id="L2005" class="LineNr">2005 </span>    <span class="subxComment">#   f3 xx</span>
<span id="L2006" class="LineNr">2006 </span>    <span class="subxComment">#   f2 0f xx</span>
<span id="L2007" class="LineNr">2007 </span>    <span class="subxComment">#   f3 0f xx</span>
<span id="L2008" class="LineNr">2008 </span>    <span class="subxComment">#</span>
<span id="L2009" class="LineNr">2009 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L2010" class="LineNr">2010 </span>    <span class="subxComment">#   rewind-stream(line)</span>
<span id="L2011" class="LineNr">2011 </span>    <span class="subxComment">#</span>
<span id="L2012" class="LineNr">2012 </span>    <span class="subxComment">#   var op1 = next-word(line)</span>
<span id="L2013" class="LineNr">2013 </span>    <span class="subxComment">#   if (slice-empty?(op1) || slice-starts-with?(op1, &quot;#&quot;)) return</span>
<span id="L2014" class="LineNr">2014 </span>    <span class="subxComment">#   op1 = next-token-from-slice(op1-&gt;start, op1-&gt;end, &quot;/&quot;)</span>
<span id="L2015" class="LineNr">2015 </span>    <span class="subxComment">#   write-slice-buffered(out, op1)</span>
<span id="L2016" class="LineNr">2016 </span>    <span class="subxComment">#   if !slice-equal?(op1, &quot;0f&quot;) &amp;&amp; !slice-equal?(op1, &quot;f2&quot;) &amp;&amp; !slice-equal?(op1, &quot;f3&quot;)</span>
<span id="L2017" class="LineNr">2017 </span>    <span class="subxComment">#     return</span>
<span id="L2018" class="LineNr">2018 </span>    <span class="subxComment">#</span>
<span id="L2019" class="LineNr">2019 </span>    <span class="subxComment">#   var op2 = next-word(line)</span>
<span id="L2020" class="LineNr">2020 </span>    <span class="subxComment">#   if (slice-empty?(op2) || slice-starts-with?(op2, &quot;#&quot;)) return</span>
<span id="L2021" class="LineNr">2021 </span>    <span class="subxComment">#   op2 = next-token-from-slice(op2-&gt;start, op2-&gt;end, &quot;/&quot;)</span>
<span id="L2022" class="LineNr">2022 </span>    <span class="subxComment">#   write-slice-buffered(out, op2)</span>
<span id="L2023" class="LineNr">2023 </span>    <span class="subxComment">#   if slice-equal?(op1, &quot;0f&quot;)</span>
<span id="L2024" class="LineNr">2024 </span>    <span class="subxComment">#     return</span>
<span id="L2025" class="LineNr">2025 </span>    <span class="subxComment">#   if !slice-equal?(op2, &quot;0f&quot;)</span>
<span id="L2026" class="LineNr">2026 </span>    <span class="subxComment">#     return</span>
<span id="L2027" class="LineNr">2027 </span>    <span class="subxComment">#</span>
<span id="L2028" class="LineNr">2028 </span>    <span class="subxComment">#   var op3 = next-word(line)</span>
<span id="L2029" class="LineNr">2029 </span>    <span class="subxComment">#   if (slice-empty?(op3) || slice-starts-with?(op3, &quot;#&quot;)) return</span>
<span id="L2030" class="LineNr">2030 </span>    <span class="subxComment">#   op3 = next-token-from-slice(op3-&gt;start, op3-&gt;end, &quot;/&quot;)</span>
<span id="L2031" class="LineNr">2031 </span>    <span class="subxComment">#   write-slice-buffered(out, op3)</span>
<span id="L2032" class="LineNr">2032 </span>    <span class="subxComment">#</span>
<span id="L2033" class="LineNr">2033 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L2034" class="LineNr">2034 </span>    55/push-ebp
<span id="L2035" class="LineNr">2035 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L2036" class="LineNr">2036 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L2037" class="LineNr">2037 </span>    50/push-eax
<span id="L2038" class="LineNr">2038 </span>    51/push-ecx
<span id="L2039" class="LineNr">2039 </span>    52/push-edx
<span id="L2040" class="LineNr">2040 </span>    53/push-ebx
<span id="L2041" class="LineNr">2041 </span>    <span class="subxComment"># var op1/ecx = {0, 0}</span>
<span id="L2042" class="LineNr">2042 </span>    68/push  0/imm32/end
<span id="L2043" class="LineNr">2043 </span>    68/push  0/imm32/start
<span id="L2044" class="LineNr">2044 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L2045" class="LineNr">2045 </span>    <span class="subxComment"># var op2/edx = {0, 0}</span>
<span id="L2046" class="LineNr">2046 </span>    68/push  0/imm32/end
<span id="L2047" class="LineNr">2047 </span>    68/push  0/imm32/start
<span id="L2048" class="LineNr">2048 </span>    89/copy                         3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to edx</span>
<span id="L2049" class="LineNr">2049 </span>    <span class="subxComment"># rewind-stream(line)</span>
<span id="L2050" class="LineNr">2050 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2051" class="LineNr">2051 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2052" class="LineNr">2052 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2053" class="LineNr">2053 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L2054" class="LineNr">2054 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2055" class="LineNr">2055 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2056" class="LineNr">2056 </span><span class="Constant">$emit-opcodes:op1</span>:
<span id="L2057" class="LineNr">2057 </span>    <span class="subxComment"># next-word(line, op1)</span>
<span id="L2058" class="LineNr">2058 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2059" class="LineNr">2059 </span>    51/push-ecx
<span id="L2060" class="LineNr">2060 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2061" class="LineNr">2061 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2062" class="LineNr">2062 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2063" class="LineNr">2063 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2064" class="LineNr">2064 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2065" class="LineNr">2065 </span>    <span class="subxComment"># if (slice-empty?(op1)) return</span>
<span id="L2066" class="LineNr">2066 </span>    <span class="subxS1Comment"># . eax = slice-empty?(op1)</span>
<span id="L2067" class="LineNr">2067 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2068" class="LineNr">2068 </span>    51/push-ecx
<span id="L2069" class="LineNr">2069 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2070" class="LineNr">2070 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L2071" class="LineNr">2071 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2072" class="LineNr">2072 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2073" class="LineNr">2073 </span>    <span class="subxS1Comment"># . if (eax != 0) return</span>
<span id="L2074" class="LineNr">2074 </span>    3d/compare-eax-and  0/imm32
<span id="L2075" class="LineNr">2075 </span>    0f 85/jump-if-not-equal  $emit-opcodes:end/disp32
<span id="L2076" class="LineNr">2076 </span>    <span class="subxComment"># if (slice-starts-with?(op1, &quot;#&quot;)) return</span>
<span id="L2077" class="LineNr">2077 </span>    <span class="subxS1Comment"># . start/ebx = op1-&gt;start</span>
<span id="L2078" class="LineNr">2078 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to ebx</span>
<span id="L2079" class="LineNr">2079 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L2080" class="LineNr">2080 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L2081" class="LineNr">2081 </span>    8a/copy-byte                    0/mod/indirect  3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ebx to AL</span>
<span id="L2082" class="LineNr">2082 </span>    <span class="subxS1Comment"># . if (eax == '#') return</span>
<span id="L2083" class="LineNr">2083 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L2084" class="LineNr">2084 </span>    0f 84/jump-if-equal  $emit-opcodes:end/disp32
<span id="L2085" class="LineNr">2085 </span>    <span class="subxComment"># op1 = next-token-from-slice(op1-&gt;start, op1-&gt;end, '/')</span>
<span id="L2086" class="LineNr">2086 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2087" class="LineNr">2087 </span>    51/push-ecx
<span id="L2088" class="LineNr">2088 </span>    68/push  0x2f/imm32/slash
<span id="L2089" class="LineNr">2089 </span>    ff          6/subop/push        1/mod/*+disp8   1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ecx+4)</span>
<span id="L2090" class="LineNr">2090 </span>    ff          6/subop/push        0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># push *ecx</span>
<span id="L2091" class="LineNr">2091 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2092" class="LineNr">2092 </span>    e8/call  <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32
<span id="L2093" class="LineNr">2093 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2094" class="LineNr">2094 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L2095" class="LineNr">2095 </span>    <span class="subxComment"># write-slice-buffered(out, op1)</span>
<span id="L2096" class="LineNr">2096 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2097" class="LineNr">2097 </span>    51/push-ecx
<span id="L2098" class="LineNr">2098 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2099" class="LineNr">2099 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2100" class="LineNr">2100 </span>    e8/call  <a href='../072slice.subx.html#L878'>write-slice-buffered</a>/disp32
<span id="L2101" class="LineNr">2101 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2102" class="LineNr">2102 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2103" class="LineNr">2103 </span>    <span class="subxComment"># write-buffered(out, &quot; &quot;)</span>
<span id="L2104" class="LineNr">2104 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2105" class="LineNr">2105 </span>    68/push  <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>/imm32
<span id="L2106" class="LineNr">2106 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2107" class="LineNr">2107 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2108" class="LineNr">2108 </span>    e8/call  <a href='../065write-buffered.subx.html#L8'>write-buffered</a>/disp32
<span id="L2109" class="LineNr">2109 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2110" class="LineNr">2110 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2111" class="LineNr">2111 </span>    <span class="subxComment"># if (slice-equal?(op1, &quot;0f&quot;)) goto op2</span>
<span id="L2112" class="LineNr">2112 </span>    <span class="subxS1Comment"># . eax = slice-equal?(op1, &quot;0f&quot;)</span>
<span id="L2113" class="LineNr">2113 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2114" class="LineNr">2114 </span>    68/push  <span class="Constant">&quot;0f&quot;</span>/imm32
<span id="L2115" class="LineNr">2115 </span>    51/push-ecx
<span id="L2116" class="LineNr">2116 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2117" class="LineNr">2117 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L2118" class="LineNr">2118 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2119" class="LineNr">2119 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2120" class="LineNr">2120 </span>    <span class="subxS1Comment"># . if (eax != 0) goto op2</span>
<span id="L2121" class="LineNr">2121 </span>    3d/compare-eax-and  0/imm32
<span id="L2122" class="LineNr">2122 </span>    75/jump-if-not-equal  $emit-opcodes:op2/disp8
<span id="L2123" class="LineNr">2123 </span>    <span class="subxComment"># if (slice-equal?(op1, &quot;f2&quot;)) goto op2</span>
<span id="L2124" class="LineNr">2124 </span>    <span class="subxS1Comment"># . eax = slice-equal?(op1, &quot;f2&quot;)</span>
<span id="L2125" class="LineNr">2125 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2126" class="LineNr">2126 </span>    68/push  <span class="Constant">&quot;f2&quot;</span>/imm32
<span id="L2127" class="LineNr">2127 </span>    51/push-ecx
<span id="L2128" class="LineNr">2128 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2129" class="LineNr">2129 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L2130" class="LineNr">2130 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2131" class="LineNr">2131 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2132" class="LineNr">2132 </span>    <span class="subxS1Comment"># . if (eax != 0) goto op2</span>
<span id="L2133" class="LineNr">2133 </span>    3d/compare-eax-and  0/imm32
<span id="L2134" class="LineNr">2134 </span>    75/jump-if-not-equal  $emit-opcodes:op2/disp8
<span id="L2135" class="LineNr">2135 </span>    <span class="subxComment"># if (slice-equal?(op1, &quot;f3&quot;)) goto op2</span>
<span id="L2136" class="LineNr">2136 </span>    <span class="subxS1Comment"># . eax = slice-equal?(op1, &quot;f3&quot;)</span>
<span id="L2137" class="LineNr">2137 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2138" class="LineNr">2138 </span>    68/push  <span class="Constant">&quot;f3&quot;</span>/imm32
<span id="L2139" class="LineNr">2139 </span>    51/push-ecx
<span id="L2140" class="LineNr">2140 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2141" class="LineNr">2141 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L2142" class="LineNr">2142 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2143" class="LineNr">2143 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2144" class="LineNr">2144 </span>    <span class="subxS1Comment"># . if (eax != 0) goto op2</span>
<span id="L2145" class="LineNr">2145 </span>    3d/compare-eax-and  0/imm32
<span id="L2146" class="LineNr">2146 </span>    75/jump-if-not-equal  $emit-opcodes:op2/disp8
<span id="L2147" class="LineNr">2147 </span>    <span class="subxComment"># otherwise return</span>
<span id="L2148" class="LineNr">2148 </span>    e9/jump  $emit-opcodes:end/disp32
<span id="L2149" class="LineNr">2149 </span><span class="Constant">$emit-opcodes:op2</span>:
<span id="L2150" class="LineNr">2150 </span>    <span class="subxComment"># next-word(line, op2)</span>
<span id="L2151" class="LineNr">2151 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2152" class="LineNr">2152 </span>    52/push-edx
<span id="L2153" class="LineNr">2153 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2154" class="LineNr">2154 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2155" class="LineNr">2155 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2156" class="LineNr">2156 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2157" class="LineNr">2157 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2158" class="LineNr">2158 </span>    <span class="subxComment"># if (slice-empty?(op2)) return</span>
<span id="L2159" class="LineNr">2159 </span>    <span class="subxS1Comment"># . eax = slice-empty?(op2)</span>
<span id="L2160" class="LineNr">2160 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2161" class="LineNr">2161 </span>    52/push-edx
<span id="L2162" class="LineNr">2162 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2163" class="LineNr">2163 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L2164" class="LineNr">2164 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2165" class="LineNr">2165 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2166" class="LineNr">2166 </span>    <span class="subxS1Comment"># . if (eax != 0) return</span>
<span id="L2167" class="LineNr">2167 </span>    3d/compare-eax-and  0/imm32
<span id="L2168" class="LineNr">2168 </span>    0f 85/jump-if-not-equal  $emit-opcodes:end/disp32
<span id="L2169" class="LineNr">2169 </span>    <span class="subxComment"># if (slice-starts-with?(op2, &quot;#&quot;)) return</span>
<span id="L2170" class="LineNr">2170 </span>    <span class="subxS1Comment"># . start/ebx = op2-&gt;start</span>
<span id="L2171" class="LineNr">2171 </span>    8b/copy                         0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *edx to ebx</span>
<span id="L2172" class="LineNr">2172 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L2173" class="LineNr">2173 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L2174" class="LineNr">2174 </span>    8a/copy-byte                    0/mod/indirect  3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ebx to AL</span>
<span id="L2175" class="LineNr">2175 </span>    <span class="subxS1Comment"># . if (eax == '#') return</span>
<span id="L2176" class="LineNr">2176 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L2177" class="LineNr">2177 </span>    0f 84/jump-if-equal  $emit-opcodes:end/disp32
<span id="L2178" class="LineNr">2178 </span>    <span class="subxComment"># op2 = next-token-from-slice(op2-&gt;start, op2-&gt;end, '/')</span>
<span id="L2179" class="LineNr">2179 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2180" class="LineNr">2180 </span>    52/push-edx
<span id="L2181" class="LineNr">2181 </span>    68/push  0x2f/imm32/slash
<span id="L2182" class="LineNr">2182 </span>    ff          6/subop/push        1/mod/*+disp8   2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(edx+4)</span>
<span id="L2183" class="LineNr">2183 </span>    ff          6/subop/push        0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># push *edx</span>
<span id="L2184" class="LineNr">2184 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2185" class="LineNr">2185 </span>    e8/call  <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32
<span id="L2186" class="LineNr">2186 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2187" class="LineNr">2187 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L2188" class="LineNr">2188 </span>    <span class="subxComment"># write-slice-buffered(out, op2)</span>
<span id="L2189" class="LineNr">2189 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2190" class="LineNr">2190 </span>    52/push-edx
<span id="L2191" class="LineNr">2191 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2192" class="LineNr">2192 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2193" class="LineNr">2193 </span>    e8/call  <a href='../072slice.subx.html#L878'>write-slice-buffered</a>/disp32
<span id="L2194" class="LineNr">2194 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2195" class="LineNr">2195 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2196" class="LineNr">2196 </span>    <span class="subxComment"># write-buffered(out, &quot; &quot;)</span>
<span id="L2197" class="LineNr">2197 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2198" class="LineNr">2198 </span>    68/push  <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>/imm32
<span id="L2199" class="LineNr">2199 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2200" class="LineNr">2200 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2201" class="LineNr">2201 </span>    e8/call  <a href='../065write-buffered.subx.html#L8'>write-buffered</a>/disp32
<span id="L2202" class="LineNr">2202 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2203" class="LineNr">2203 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2204" class="LineNr">2204 </span>    <span class="subxComment"># if (slice-equal?(op1, &quot;0f&quot;)) return</span>
<span id="L2205" class="LineNr">2205 </span>    <span class="subxS1Comment"># . eax = slice-equal?(op1, &quot;0f&quot;)</span>
<span id="L2206" class="LineNr">2206 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2207" class="LineNr">2207 </span>    68/push  <span class="Constant">&quot;0f&quot;</span>/imm32
<span id="L2208" class="LineNr">2208 </span>    51/push-ecx
<span id="L2209" class="LineNr">2209 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2210" class="LineNr">2210 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L2211" class="LineNr">2211 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2212" class="LineNr">2212 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2213" class="LineNr">2213 </span>    <span class="subxS1Comment"># . if (eax != 0) return</span>
<span id="L2214" class="LineNr">2214 </span>    3d/compare-eax-and  0/imm32
<span id="L2215" class="LineNr">2215 </span>    0f 85/jump-if-not-equal  $emit-opcodes:end/disp32
<span id="L2216" class="LineNr">2216 </span>    <span class="subxComment"># if (!slice-equal?(op2, &quot;0f&quot;)) return</span>
<span id="L2217" class="LineNr">2217 </span>    <span class="subxS1Comment"># . eax = slice-equal?(op2, &quot;0f&quot;)</span>
<span id="L2218" class="LineNr">2218 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2219" class="LineNr">2219 </span>    68/push  <span class="Constant">&quot;0f&quot;</span>/imm32
<span id="L2220" class="LineNr">2220 </span>    52/push-edx
<span id="L2221" class="LineNr">2221 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2222" class="LineNr">2222 </span>    e8/call  <a href='../072slice.subx.html#L91'>slice-equal?</a>/disp32
<span id="L2223" class="LineNr">2223 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2224" class="LineNr">2224 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2225" class="LineNr">2225 </span>    <span class="subxS1Comment"># . if (eax == 0) return</span>
<span id="L2226" class="LineNr">2226 </span>    3d/compare-eax-and  0/imm32
<span id="L2227" class="LineNr">2227 </span>    0f 84/jump-if-equal  $emit-opcodes:end/disp32
<span id="L2228" class="LineNr">2228 </span><span class="Constant">$emit-opcodes:op3</span>:
<span id="L2229" class="LineNr">2229 </span>    <span class="subxComment"># next-word(line, op3)  # reuse op2/edx</span>
<span id="L2230" class="LineNr">2230 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2231" class="LineNr">2231 </span>    52/push-edx
<span id="L2232" class="LineNr">2232 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2233" class="LineNr">2233 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2234" class="LineNr">2234 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2235" class="LineNr">2235 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2236" class="LineNr">2236 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2237" class="LineNr">2237 </span>    <span class="subxComment"># if (slice-empty?(op3)) return</span>
<span id="L2238" class="LineNr">2238 </span>    <span class="subxS1Comment"># . eax = slice-empty?(op3)</span>
<span id="L2239" class="LineNr">2239 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2240" class="LineNr">2240 </span>    52/push-edx
<span id="L2241" class="LineNr">2241 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2242" class="LineNr">2242 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L2243" class="LineNr">2243 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2244" class="LineNr">2244 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2245" class="LineNr">2245 </span>    <span class="subxS1Comment"># . if (eax != 0) return</span>
<span id="L2246" class="LineNr">2246 </span>    3d/compare-eax-and  0/imm32
<span id="L2247" class="LineNr">2247 </span>    0f 85/jump-if-not-equal  $emit-opcodes:end/disp32
<span id="L2248" class="LineNr">2248 </span>    <span class="subxComment"># if (slice-starts-with?(op3, &quot;#&quot;)) return</span>
<span id="L2249" class="LineNr">2249 </span>    <span class="subxS1Comment"># . start/ebx = op2-&gt;start</span>
<span id="L2250" class="LineNr">2250 </span>    8b/copy                         0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *edx to ebx</span>
<span id="L2251" class="LineNr">2251 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L2252" class="LineNr">2252 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L2253" class="LineNr">2253 </span>    8a/copy-byte                    0/mod/indirect  3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *ebx to AL</span>
<span id="L2254" class="LineNr">2254 </span>    <span class="subxS1Comment"># . if (eax == '#') return</span>
<span id="L2255" class="LineNr">2255 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L2256" class="LineNr">2256 </span>    0f 84/jump-if-equal  $emit-opcodes:end/disp32
<span id="L2257" class="LineNr">2257 </span>    <span class="subxComment"># op3 = next-token-from-slice(op3-&gt;start, op3-&gt;end, '/')</span>
<span id="L2258" class="LineNr">2258 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2259" class="LineNr">2259 </span>    52/push-edx
<span id="L2260" class="LineNr">2260 </span>    68/push  0x2f/imm32/slash
<span id="L2261" class="LineNr">2261 </span>    ff          6/subop/push        1/mod/*+disp8   2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(edx+4)</span>
<span id="L2262" class="LineNr">2262 </span>    ff          6/subop/push        0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># push *edx</span>
<span id="L2263" class="LineNr">2263 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2264" class="LineNr">2264 </span>    e8/call  <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32
<span id="L2265" class="LineNr">2265 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2266" class="LineNr">2266 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L2267" class="LineNr">2267 </span>    <span class="subxComment"># write-slice-buffered(out, op3)</span>
<span id="L2268" class="LineNr">2268 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2269" class="LineNr">2269 </span>    52/push-edx
<span id="L2270" class="LineNr">2270 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2271" class="LineNr">2271 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2272" class="LineNr">2272 </span>    e8/call  <a href='../072slice.subx.html#L878'>write-slice-buffered</a>/disp32
<span id="L2273" class="LineNr">2273 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2274" class="LineNr">2274 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2275" class="LineNr">2275 </span>    <span class="subxComment"># write-buffered(out, &quot; &quot;)</span>
<span id="L2276" class="LineNr">2276 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2277" class="LineNr">2277 </span>    68/push  <span class="SpecialChar"><a href='../051test.subx.html#L94'>Space</a></span>/imm32
<span id="L2278" class="LineNr">2278 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2279" class="LineNr">2279 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2280" class="LineNr">2280 </span>    e8/call  <a href='../065write-buffered.subx.html#L8'>write-buffered</a>/disp32
<span id="L2281" class="LineNr">2281 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2282" class="LineNr">2282 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2283" class="LineNr">2283 </span><span class="Constant">$emit-opcodes:end</span>:
<span id="L2284" class="LineNr">2284 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L2285" class="LineNr">2285 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L2286" class="LineNr">2286 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L2287" class="LineNr">2287 </span>    5b/pop-to-ebx
<span id="L2288" class="LineNr">2288 </span>    5a/pop-to-edx
<span id="L2289" class="LineNr">2289 </span>    59/pop-to-ecx
<span id="L2290" class="LineNr">2290 </span>    58/pop-to-eax
<span id="L2291" class="LineNr">2291 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L2292" class="LineNr">2292 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L2293" class="LineNr">2293 </span>    5d/pop-to-ebp
<span id="L2294" class="LineNr">2294 </span>    c3/return
<span id="L2295" class="LineNr">2295 </span>
<span id="L2296" class="LineNr">2296 </span><span class="subxFunction">emit-modrm</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L2297" class="LineNr">2297 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L2298" class="LineNr">2298 </span>    <span class="subxComment">#   rewind-stream(line)</span>
<span id="L2299" class="LineNr">2299 </span>    <span class="subxComment">#   var has-modrm? = false, mod = 0, rm32 = 0, r32 = 0</span>
<span id="L2300" class="LineNr">2300 </span>    <span class="subxComment">#   var word-slice = {0, 0}</span>
<span id="L2301" class="LineNr">2301 </span>    <span class="subxComment">#   while true</span>
<span id="L2302" class="LineNr">2302 </span>    <span class="subxComment">#     word-slice = next-word(line)</span>
<span id="L2303" class="LineNr">2303 </span>    <span class="subxComment">#     if (slice-empty?(word-slice)) break</span>
<span id="L2304" class="LineNr">2304 </span>    <span class="subxComment">#     if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L2305" class="LineNr">2305 </span>    <span class="subxComment">#     if (has-metadata?(word-slice, &quot;mod&quot;))</span>
<span id="L2306" class="LineNr">2306 </span>    <span class="subxComment">#       mod = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2307" class="LineNr">2307 </span>    <span class="subxComment">#       has-modrm? = true</span>
<span id="L2308" class="LineNr">2308 </span>    <span class="subxComment">#     else if (has-metadata?(word-slice, &quot;rm32&quot;))</span>
<span id="L2309" class="LineNr">2309 </span>    <span class="subxComment">#       rm32 = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2310" class="LineNr">2310 </span>    <span class="subxComment">#       has-modrm? = true</span>
<span id="L2311" class="LineNr">2311 </span>    <span class="subxComment">#     else if (has-metadata?(word-slice, &quot;r32&quot;) or has-metadata?(word-slice, &quot;subop&quot;))</span>
<span id="L2312" class="LineNr">2312 </span>    <span class="subxComment">#       r32 = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2313" class="LineNr">2313 </span>    <span class="subxComment">#       has-modrm? = true</span>
<span id="L2314" class="LineNr">2314 </span>    <span class="subxComment">#   if has-modrm?</span>
<span id="L2315" class="LineNr">2315 </span>    <span class="subxComment">#     var modrm = mod &amp; 0b11</span>
<span id="L2316" class="LineNr">2316 </span>    <span class="subxComment">#     modrm &lt;&lt;= 3</span>
<span id="L2317" class="LineNr">2317 </span>    <span class="subxComment">#     modrm |= r32 &amp; 0b111</span>
<span id="L2318" class="LineNr">2318 </span>    <span class="subxComment">#     modrm &lt;&lt;= 3</span>
<span id="L2319" class="LineNr">2319 </span>    <span class="subxComment">#     modrm |= rm32 &amp; 0b111</span>
<span id="L2320" class="LineNr">2320 </span>    <span class="subxComment">#     emit-hex(out, modrm, 1)</span>
<span id="L2321" class="LineNr">2321 </span>    <span class="subxComment">#</span>
<span id="L2322" class="LineNr">2322 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L2323" class="LineNr">2323 </span>    55/push-ebp
<span id="L2324" class="LineNr">2324 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L2325" class="LineNr">2325 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L2326" class="LineNr">2326 </span>    50/push-eax
<span id="L2327" class="LineNr">2327 </span>    51/push-ecx
<span id="L2328" class="LineNr">2328 </span>    52/push-edx
<span id="L2329" class="LineNr">2329 </span>    53/push-ebx
<span id="L2330" class="LineNr">2330 </span>    56/push-esi
<span id="L2331" class="LineNr">2331 </span>    57/push-edi
<span id="L2332" class="LineNr">2332 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L2333" class="LineNr">2333 </span>    68/push  0/imm32/end
<span id="L2334" class="LineNr">2334 </span>    68/push  0/imm32/start
<span id="L2335" class="LineNr">2335 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L2336" class="LineNr">2336 </span>    <span class="subxComment"># var has-modrm?/edx = false</span>
<span id="L2337" class="LineNr">2337 </span>    31/xor                          3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear edx</span>
<span id="L2338" class="LineNr">2338 </span>    <span class="subxComment"># var mod/ebx = 0</span>
<span id="L2339" class="LineNr">2339 </span>    31/xor                          3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear ebx</span>
<span id="L2340" class="LineNr">2340 </span>    <span class="subxComment"># var rm32/esi = 0</span>
<span id="L2341" class="LineNr">2341 </span>    31/xor                          3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear esi</span>
<span id="L2342" class="LineNr">2342 </span>    <span class="subxComment"># var r32/edi = 0</span>
<span id="L2343" class="LineNr">2343 </span>    31/xor                          3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear edi</span>
<span id="L2344" class="LineNr">2344 </span>    <span class="subxComment"># rewind-stream(line)</span>
<span id="L2345" class="LineNr">2345 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2346" class="LineNr">2346 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2347" class="LineNr">2347 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2348" class="LineNr">2348 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L2349" class="LineNr">2349 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2350" class="LineNr">2350 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2351" class="Folded">2351 </span><span class="Folded">+-- 33 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L2384" class="LineNr">2384 </span><span class="Constant">$emit-modrm:loop</span>:
<span id="L2385" class="LineNr">2385 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L2386" class="LineNr">2386 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2387" class="LineNr">2387 </span>    51/push-ecx
<span id="L2388" class="LineNr">2388 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2389" class="LineNr">2389 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2390" class="LineNr">2390 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2391" class="LineNr">2391 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2392" class="LineNr">2392 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2393" class="Folded">2393 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L2435" class="LineNr">2435 </span><span class="Constant">$emit-modrm:check0</span>:
<span id="L2436" class="LineNr">2436 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L2437" class="LineNr">2437 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L2438" class="LineNr">2438 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2439" class="LineNr">2439 </span>    51/push-ecx
<span id="L2440" class="LineNr">2440 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2441" class="LineNr">2441 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L2442" class="LineNr">2442 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2443" class="LineNr">2443 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2444" class="LineNr">2444 </span>    <span class="subxS1Comment"># . if (eax != 0) pass through</span>
<span id="L2445" class="LineNr">2445 </span>    3d/compare-eax-and  0/imm32
<span id="L2446" class="LineNr">2446 </span>    0f 85/jump-if-not-equal  $emit-modrm:<span class="Constant">break</span>/disp32
<span id="L2447" class="LineNr">2447 </span><span class="Constant">$emit-modrm:check1</span>:
<span id="L2448" class="LineNr">2448 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L2449" class="LineNr">2449 </span>    <span class="subxS1Comment"># . spill edx</span>
<span id="L2450" class="LineNr">2450 </span>    52/push-edx
<span id="L2451" class="LineNr">2451 </span>    <span class="subxS1Comment"># . start/edx = word-slice-&gt;start</span>
<span id="L2452" class="LineNr">2452 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L2453" class="LineNr">2453 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L2454" class="LineNr">2454 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L2455" class="LineNr">2455 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L2456" class="LineNr">2456 </span>    <span class="subxS1Comment"># . restore edx</span>
<span id="L2457" class="LineNr">2457 </span>    5a/pop-to-edx
<span id="L2458" class="LineNr">2458 </span>    <span class="subxS1Comment"># . if (eax == '#') pass through</span>
<span id="L2459" class="LineNr">2459 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L2460" class="LineNr">2460 </span>    0f 84/jump-if-equal  $emit-modrm:<span class="Constant">break</span>/disp32
<span id="L2461" class="LineNr">2461 </span><span class="Constant">$emit-modrm:check-for-mod</span>:
<span id="L2462" class="LineNr">2462 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;mod&quot;))</span>
<span id="L2463" class="LineNr">2463 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;mod&quot;)</span>
<span id="L2464" class="LineNr">2464 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2465" class="LineNr">2465 </span>    68/push  <span class="Constant">&quot;mod&quot;</span>/imm32
<span id="L2466" class="LineNr">2466 </span>    51/push-ecx
<span id="L2467" class="LineNr">2467 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2468" class="LineNr">2468 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2469" class="LineNr">2469 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2470" class="LineNr">2470 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2471" class="LineNr">2471 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L2472" class="LineNr">2472 </span>    3d/compare-eax-and  0/imm32
<span id="L2473" class="LineNr">2473 </span>    74/jump-if-equal  $emit-modrm:check-for-rm32/disp8
<span id="L2474" class="LineNr">2474 </span><span class="Constant">$emit-modrm:mod</span>:
<span id="L2475" class="LineNr">2475 </span>    <span class="subxComment"># mod = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2476" class="LineNr">2476 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2477" class="LineNr">2477 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2478" class="LineNr">2478 </span>    51/push-ecx
<span id="L2479" class="LineNr">2479 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2480" class="LineNr">2480 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2481" class="LineNr">2481 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2482" class="LineNr">2482 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2483" class="LineNr">2483 </span>    <span class="subxS1Comment"># . mod = eax</span>
<span id="L2484" class="LineNr">2484 </span>    89/copy                         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to ebx</span>
<span id="L2485" class="LineNr">2485 </span>    <span class="subxComment"># has-modrm? = true</span>
<span id="L2486" class="LineNr">2486 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2487" class="LineNr">2487 </span>    <span class="subxComment"># continue</span>
<span id="L2488" class="LineNr">2488 </span>    e9/jump  $emit-modrm:<span class="Constant">loop</span>/disp32
<span id="L2489" class="LineNr">2489 </span><span class="Constant">$emit-modrm:check-for-rm32</span>:
<span id="L2490" class="LineNr">2490 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;rm32&quot;))</span>
<span id="L2491" class="LineNr">2491 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;rm32&quot;)</span>
<span id="L2492" class="LineNr">2492 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2493" class="LineNr">2493 </span>    68/push  <span class="Constant">&quot;rm32&quot;</span>/imm32
<span id="L2494" class="LineNr">2494 </span>    51/push-ecx
<span id="L2495" class="LineNr">2495 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2496" class="LineNr">2496 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2497" class="LineNr">2497 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2498" class="LineNr">2498 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2499" class="LineNr">2499 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L2500" class="LineNr">2500 </span>    3d/compare-eax-and  0/imm32
<span id="L2501" class="LineNr">2501 </span>    74/jump-if-equal  $emit-modrm:check-for-r32/disp8
<span id="L2502" class="LineNr">2502 </span><span class="Constant">$emit-modrm:rm32</span>:
<span id="L2503" class="LineNr">2503 </span>    <span class="subxComment"># rm32 = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2504" class="LineNr">2504 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2505" class="LineNr">2505 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2506" class="LineNr">2506 </span>    51/push-ecx
<span id="L2507" class="LineNr">2507 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2508" class="LineNr">2508 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2509" class="LineNr">2509 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2510" class="LineNr">2510 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2511" class="LineNr">2511 </span>    <span class="subxS1Comment"># . rm32 = eax</span>
<span id="L2512" class="LineNr">2512 </span>    89/copy                         3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to esi</span>
<span id="L2513" class="LineNr">2513 </span>    <span class="subxComment"># has-modrm? = true</span>
<span id="L2514" class="LineNr">2514 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2515" class="LineNr">2515 </span>    <span class="subxComment"># continue</span>
<span id="L2516" class="LineNr">2516 </span>    e9/jump  $emit-modrm:<span class="Constant">loop</span>/disp32
<span id="L2517" class="LineNr">2517 </span><span class="Constant">$emit-modrm:check-for-r32</span>:
<span id="L2518" class="LineNr">2518 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;r32&quot;))</span>
<span id="L2519" class="LineNr">2519 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;r32&quot;)</span>
<span id="L2520" class="LineNr">2520 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2521" class="LineNr">2521 </span>    68/push  <span class="Constant">&quot;r32&quot;</span>/imm32
<span id="L2522" class="LineNr">2522 </span>    51/push-ecx
<span id="L2523" class="LineNr">2523 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2524" class="LineNr">2524 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2525" class="LineNr">2525 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2526" class="LineNr">2526 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2527" class="LineNr">2527 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L2528" class="LineNr">2528 </span>    3d/compare-eax-and  0/imm32
<span id="L2529" class="LineNr">2529 </span>    74/jump-if-equal  $emit-modrm:check-for-subop/disp8
<span id="L2530" class="LineNr">2530 </span><span class="Constant">$emit-modrm:r32</span>:
<span id="L2531" class="LineNr">2531 </span>    <span class="subxComment"># r32 = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2532" class="LineNr">2532 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2533" class="LineNr">2533 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2534" class="LineNr">2534 </span>    51/push-ecx
<span id="L2535" class="LineNr">2535 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2536" class="LineNr">2536 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2537" class="LineNr">2537 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2538" class="LineNr">2538 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2539" class="LineNr">2539 </span>    <span class="subxS1Comment"># . r32 = eax</span>
<span id="L2540" class="LineNr">2540 </span>    89/copy                         3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to edi</span>
<span id="L2541" class="LineNr">2541 </span>    <span class="subxComment"># has-modrm? = true</span>
<span id="L2542" class="LineNr">2542 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2543" class="LineNr">2543 </span>    <span class="subxComment"># continue</span>
<span id="L2544" class="LineNr">2544 </span>    e9/jump  $emit-modrm:<span class="Constant">loop</span>/disp32
<span id="L2545" class="LineNr">2545 </span><span class="Constant">$emit-modrm:check-for-subop</span>:
<span id="L2546" class="LineNr">2546 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;subop&quot;))</span>
<span id="L2547" class="LineNr">2547 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;subop&quot;)</span>
<span id="L2548" class="LineNr">2548 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2549" class="LineNr">2549 </span>    68/push  <span class="Constant">&quot;subop&quot;</span>/imm32
<span id="L2550" class="LineNr">2550 </span>    51/push-ecx
<span id="L2551" class="LineNr">2551 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2552" class="LineNr">2552 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2553" class="LineNr">2553 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2554" class="LineNr">2554 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2555" class="LineNr">2555 </span>    <span class="subxS1Comment"># . if (eax == 0) loop</span>
<span id="L2556" class="LineNr">2556 </span>    3d/compare-eax-and  0/imm32
<span id="L2557" class="LineNr">2557 </span>    0f 84/jump-if-equal  $emit-modrm:<span class="Constant">loop</span>/disp32
<span id="L2558" class="LineNr">2558 </span><span class="Constant">$emit-modrm:subop</span>:
<span id="L2559" class="LineNr">2559 </span>    <span class="subxComment"># r32 = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2560" class="LineNr">2560 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2561" class="LineNr">2561 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2562" class="LineNr">2562 </span>    51/push-ecx
<span id="L2563" class="LineNr">2563 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2564" class="LineNr">2564 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2565" class="LineNr">2565 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2566" class="LineNr">2566 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2567" class="LineNr">2567 </span>    <span class="subxS1Comment"># . r32 = eax</span>
<span id="L2568" class="LineNr">2568 </span>    89/copy                         3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to edi</span>
<span id="L2569" class="LineNr">2569 </span>    <span class="subxComment"># has-modrm? = true</span>
<span id="L2570" class="LineNr">2570 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2571" class="LineNr">2571 </span>    <span class="subxComment"># continue</span>
<span id="L2572" class="LineNr">2572 </span>    e9/jump  $emit-modrm:<span class="Constant">loop</span>/disp32
<span id="L2573" class="LineNr">2573 </span><span class="Constant">$emit-modrm:break</span>:
<span id="L2574" class="LineNr">2574 </span>    <span class="subxComment"># if (!has-modrm?) return</span>
<span id="L2575" class="LineNr">2575 </span>    81          7/subop/compare     3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># compare edx</span>
<span id="L2576" class="LineNr">2576 </span>    74/jump-if-equal  $emit-modrm:end/disp8
<span id="L2577" class="LineNr">2577 </span><span class="Constant">$emit-modrm:calculate</span>:
<span id="L2578" class="LineNr">2578 </span>    <span class="subxComment"># modrm/ebx = mod &amp; 0b11</span>
<span id="L2579" class="LineNr">2579 </span>    81          4/subop/and         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              3/imm32/0b11      <span class="subxComment"># bitwise and of ebx</span>
<span id="L2580" class="LineNr">2580 </span>    <span class="subxComment"># modrm &lt;&lt;= 3</span>
<span id="L2581" class="LineNr">2581 </span>    c1/shift    4/subop/left        3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              3/imm8            <span class="subxComment"># shift ebx left by 3 bits</span>
<span id="L2582" class="LineNr">2582 </span>    <span class="subxComment"># modrm |= r32 &amp; 0b111</span>
<span id="L2583" class="LineNr">2583 </span>    81          4/subop/and         3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              7/imm32/0b111     <span class="subxComment"># bitwise and of edi</span>
<span id="L2584" class="LineNr">2584 </span>    09/or                           3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># ebx = bitwise OR with edi</span>
<span id="L2585" class="LineNr">2585 </span>    <span class="subxComment"># modrm &lt;&lt;= 3</span>
<span id="L2586" class="LineNr">2586 </span>    c1/shift    4/subop/left        3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              3/imm8            <span class="subxComment"># shift ebx left by 3 bits</span>
<span id="L2587" class="LineNr">2587 </span>    <span class="subxComment"># modrm |= rm32 &amp; 0b111</span>
<span id="L2588" class="LineNr">2588 </span>    81          4/subop/and         3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              7/imm32/0b111     <span class="subxComment"># bitwise and of esi</span>
<span id="L2589" class="LineNr">2589 </span>    09/or                           3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># ebx = bitwise OR with esi</span>
<span id="L2590" class="LineNr">2590 </span><span class="Constant">$emit-modrm:<a href='../079emit.subx.html#L10'>emit</a></span>:
<span id="L2591" class="LineNr">2591 </span>    <span class="subxComment"># emit-hex(out, modrm, 1)</span>
<span id="L2592" class="LineNr">2592 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2593" class="LineNr">2593 </span>    68/push  1/imm32
<span id="L2594" class="LineNr">2594 </span>    53/push-ebx
<span id="L2595" class="LineNr">2595 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2596" class="LineNr">2596 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2597" class="LineNr">2597 </span>    e8/call  <a href='../078emit-hex.subx.html#L7'>emit-hex</a>/disp32
<span id="L2598" class="LineNr">2598 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2599" class="LineNr">2599 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L2600" class="LineNr">2600 </span><span class="Constant">$emit-modrm:end</span>:
<span id="L2601" class="LineNr">2601 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L2602" class="LineNr">2602 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2603" class="LineNr">2603 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L2604" class="LineNr">2604 </span>    5f/pop-to-edi
<span id="L2605" class="LineNr">2605 </span>    5e/pop-to-esi
<span id="L2606" class="LineNr">2606 </span>    5b/pop-to-ebx
<span id="L2607" class="LineNr">2607 </span>    5a/pop-to-edx
<span id="L2608" class="LineNr">2608 </span>    59/pop-to-ecx
<span id="L2609" class="LineNr">2609 </span>    58/pop-to-eax
<span id="L2610" class="LineNr">2610 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L2611" class="LineNr">2611 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L2612" class="LineNr">2612 </span>    5d/pop-to-ebp
<span id="L2613" class="LineNr">2613 </span>    c3/return
<span id="L2614" class="LineNr">2614 </span>
<span id="L2615" class="LineNr">2615 </span><span class="subxFunction">emit-sib</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L2616" class="LineNr">2616 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L2617" class="LineNr">2617 </span>    <span class="subxComment">#   var has-sib? = false, base = 0, index = 0, scale = 0</span>
<span id="L2618" class="LineNr">2618 </span>    <span class="subxComment">#   var word-slice = {0, 0}</span>
<span id="L2619" class="LineNr">2619 </span>    <span class="subxComment">#   while true</span>
<span id="L2620" class="LineNr">2620 </span>    <span class="subxComment">#     word-slice = next-word(line)</span>
<span id="L2621" class="LineNr">2621 </span>    <span class="subxComment">#     if (slice-empty?(word-slice)) break</span>
<span id="L2622" class="LineNr">2622 </span>    <span class="subxComment">#     if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L2623" class="LineNr">2623 </span>    <span class="subxComment">#     if (has-metadata?(word-slice, &quot;base&quot;)</span>
<span id="L2624" class="LineNr">2624 </span>    <span class="subxComment">#       base = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2625" class="LineNr">2625 </span>    <span class="subxComment">#       has-sib? = true</span>
<span id="L2626" class="LineNr">2626 </span>    <span class="subxComment">#     else if (has-metadata?(word-slice, &quot;index&quot;)</span>
<span id="L2627" class="LineNr">2627 </span>    <span class="subxComment">#       index = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2628" class="LineNr">2628 </span>    <span class="subxComment">#       has-sib? = true</span>
<span id="L2629" class="LineNr">2629 </span>    <span class="subxComment">#     else if (has-metadata?(word-slice, &quot;scale&quot;)</span>
<span id="L2630" class="LineNr">2630 </span>    <span class="subxComment">#       scale = parse-hex-int(next-token-from-slice(word-slice, &quot;/&quot;))</span>
<span id="L2631" class="LineNr">2631 </span>    <span class="subxComment">#       has-sib? = true</span>
<span id="L2632" class="LineNr">2632 </span>    <span class="subxComment">#   if has-sib?</span>
<span id="L2633" class="LineNr">2633 </span>    <span class="subxComment">#     var sib = scale &amp; 0b11</span>
<span id="L2634" class="LineNr">2634 </span>    <span class="subxComment">#     sib &lt;&lt;= 2</span>
<span id="L2635" class="LineNr">2635 </span>    <span class="subxComment">#     sib |= index &amp; 0b111</span>
<span id="L2636" class="LineNr">2636 </span>    <span class="subxComment">#     sib &lt;&lt;= 3</span>
<span id="L2637" class="LineNr">2637 </span>    <span class="subxComment">#     sib |= base &amp; 0b111</span>
<span id="L2638" class="LineNr">2638 </span>    <span class="subxComment">#     emit-hex(out, sib, 1)</span>
<span id="L2639" class="LineNr">2639 </span>    <span class="subxComment">#</span>
<span id="L2640" class="LineNr">2640 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L2641" class="LineNr">2641 </span>    55/push-ebp
<span id="L2642" class="LineNr">2642 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L2643" class="LineNr">2643 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L2644" class="LineNr">2644 </span>    50/push-eax
<span id="L2645" class="LineNr">2645 </span>    51/push-ecx
<span id="L2646" class="LineNr">2646 </span>    52/push-edx
<span id="L2647" class="LineNr">2647 </span>    53/push-ebx
<span id="L2648" class="LineNr">2648 </span>    56/push-esi
<span id="L2649" class="LineNr">2649 </span>    57/push-edi
<span id="L2650" class="LineNr">2650 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L2651" class="LineNr">2651 </span>    68/push  0/imm32/end
<span id="L2652" class="LineNr">2652 </span>    68/push  0/imm32/start
<span id="L2653" class="LineNr">2653 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L2654" class="LineNr">2654 </span>    <span class="subxComment"># var has-sib?/edx = false</span>
<span id="L2655" class="LineNr">2655 </span>    31/xor                          3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear edx</span>
<span id="L2656" class="LineNr">2656 </span>    <span class="subxComment"># var scale/ebx = 0</span>
<span id="L2657" class="LineNr">2657 </span>    31/xor                          3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          3/r32/ebx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear ebx</span>
<span id="L2658" class="LineNr">2658 </span>    <span class="subxComment"># var base/esi = 0</span>
<span id="L2659" class="LineNr">2659 </span>    31/xor                          3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear esi</span>
<span id="L2660" class="LineNr">2660 </span>    <span class="subxComment"># var index/edi = 0</span>
<span id="L2661" class="LineNr">2661 </span>    31/xor                          3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear edi</span>
<span id="L2662" class="LineNr">2662 </span>    <span class="subxComment"># rewind-stream(line)</span>
<span id="L2663" class="LineNr">2663 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2664" class="LineNr">2664 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2665" class="LineNr">2665 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2666" class="LineNr">2666 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L2667" class="LineNr">2667 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2668" class="LineNr">2668 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2669" class="LineNr">2669 </span><span class="Constant">$emit-sib:loop</span>:
<span id="L2670" class="Folded">2670 </span><span class="Folded">+-- 26 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L2696" class="LineNr">2696 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L2697" class="LineNr">2697 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2698" class="LineNr">2698 </span>    51/push-ecx
<span id="L2699" class="LineNr">2699 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2700" class="LineNr">2700 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2701" class="LineNr">2701 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2702" class="LineNr">2702 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2703" class="LineNr">2703 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2704" class="Folded">2704 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L2746" class="LineNr">2746 </span><span class="Constant">$emit-sib:check0</span>:
<span id="L2747" class="LineNr">2747 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L2748" class="LineNr">2748 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L2749" class="LineNr">2749 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2750" class="LineNr">2750 </span>    51/push-ecx
<span id="L2751" class="LineNr">2751 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2752" class="LineNr">2752 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L2753" class="LineNr">2753 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2754" class="LineNr">2754 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2755" class="LineNr">2755 </span>    <span class="subxS1Comment"># . if (eax != 0) pass through</span>
<span id="L2756" class="LineNr">2756 </span>    3d/compare-eax-and  0/imm32
<span id="L2757" class="LineNr">2757 </span>    0f 85/jump-if-not-equal  $emit-sib:<span class="Constant">break</span>/disp32
<span id="L2758" class="LineNr">2758 </span><span class="Constant">$emit-sib:check1</span>:
<span id="L2759" class="LineNr">2759 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L2760" class="LineNr">2760 </span>    <span class="subxS1Comment"># . spill edx</span>
<span id="L2761" class="LineNr">2761 </span>    52/push-edx
<span id="L2762" class="LineNr">2762 </span>    <span class="subxS1Comment"># . start/edx = word-slice-&gt;start</span>
<span id="L2763" class="LineNr">2763 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L2764" class="LineNr">2764 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L2765" class="LineNr">2765 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L2766" class="LineNr">2766 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L2767" class="LineNr">2767 </span>    <span class="subxS1Comment"># . restore edx</span>
<span id="L2768" class="LineNr">2768 </span>    5a/pop-to-edx
<span id="L2769" class="LineNr">2769 </span>    <span class="subxS1Comment"># . if (eax == '#') pass through</span>
<span id="L2770" class="LineNr">2770 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L2771" class="LineNr">2771 </span>    0f 84/jump-if-equal  $emit-sib:<span class="Constant">break</span>/disp32
<span id="L2772" class="LineNr">2772 </span><span class="Constant">$emit-sib:check-for-scale</span>:
<span id="L2773" class="LineNr">2773 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;scale&quot;))</span>
<span id="L2774" class="LineNr">2774 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;scale&quot;)</span>
<span id="L2775" class="LineNr">2775 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2776" class="LineNr">2776 </span>    68/push  <span class="Constant">&quot;scale&quot;</span>/imm32
<span id="L2777" class="LineNr">2777 </span>    51/push-ecx
<span id="L2778" class="LineNr">2778 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2779" class="LineNr">2779 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2780" class="LineNr">2780 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2781" class="LineNr">2781 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2782" class="LineNr">2782 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L2783" class="LineNr">2783 </span>    3d/compare-eax-and  0/imm32
<span id="L2784" class="LineNr">2784 </span>    74/jump-if-equal  $emit-sib:check-for-base/disp8
<span id="L2785" class="LineNr">2785 </span><span class="Constant">$emit-sib:scale</span>:
<span id="L2786" class="LineNr">2786 </span>    <span class="subxComment"># scale = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2787" class="LineNr">2787 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2788" class="LineNr">2788 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2789" class="LineNr">2789 </span>    51/push-ecx
<span id="L2790" class="LineNr">2790 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2791" class="LineNr">2791 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2792" class="LineNr">2792 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2793" class="LineNr">2793 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2794" class="LineNr">2794 </span>    <span class="subxS1Comment"># . scale = eax</span>
<span id="L2795" class="LineNr">2795 </span>    89/copy                         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to ebx</span>
<span id="L2796" class="LineNr">2796 </span>    <span class="subxComment"># has-sib? = true</span>
<span id="L2797" class="LineNr">2797 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2798" class="LineNr">2798 </span>    <span class="subxComment"># continue</span>
<span id="L2799" class="LineNr">2799 </span>    e9/jump  $emit-sib:<span class="Constant">loop</span>/disp32
<span id="L2800" class="LineNr">2800 </span><span class="Constant">$emit-sib:check-for-base</span>:
<span id="L2801" class="LineNr">2801 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;base&quot;))</span>
<span id="L2802" class="LineNr">2802 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;base&quot;)</span>
<span id="L2803" class="LineNr">2803 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2804" class="LineNr">2804 </span>    68/push  <span class="Constant">&quot;base&quot;</span>/imm32
<span id="L2805" class="LineNr">2805 </span>    51/push-ecx
<span id="L2806" class="LineNr">2806 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2807" class="LineNr">2807 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2808" class="LineNr">2808 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2809" class="LineNr">2809 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2810" class="LineNr">2810 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L2811" class="LineNr">2811 </span>    3d/compare-eax-and  0/imm32
<span id="L2812" class="LineNr">2812 </span>    74/jump-if-equal  $emit-sib:check-for-index/disp8
<span id="L2813" class="LineNr">2813 </span><span class="Constant">$emit-sib:base</span>:
<span id="L2814" class="LineNr">2814 </span>    <span class="subxComment"># base = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2815" class="LineNr">2815 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2816" class="LineNr">2816 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2817" class="LineNr">2817 </span>    51/push-ecx
<span id="L2818" class="LineNr">2818 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2819" class="LineNr">2819 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2820" class="LineNr">2820 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2821" class="LineNr">2821 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2822" class="LineNr">2822 </span>    <span class="subxS1Comment"># . base = eax</span>
<span id="L2823" class="LineNr">2823 </span>    89/copy                         3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to esi</span>
<span id="L2824" class="LineNr">2824 </span>    <span class="subxComment"># has-sib? = true</span>
<span id="L2825" class="LineNr">2825 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2826" class="LineNr">2826 </span>    <span class="subxComment"># continue</span>
<span id="L2827" class="LineNr">2827 </span>    e9/jump  $emit-sib:<span class="Constant">loop</span>/disp32
<span id="L2828" class="LineNr">2828 </span><span class="Constant">$emit-sib:check-for-index</span>:
<span id="L2829" class="LineNr">2829 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;index&quot;))</span>
<span id="L2830" class="LineNr">2830 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;index&quot;)</span>
<span id="L2831" class="LineNr">2831 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2832" class="LineNr">2832 </span>    68/push  <span class="Constant">&quot;index&quot;</span>/imm32
<span id="L2833" class="LineNr">2833 </span>    51/push-ecx
<span id="L2834" class="LineNr">2834 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2835" class="LineNr">2835 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L2836" class="LineNr">2836 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2837" class="LineNr">2837 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2838" class="LineNr">2838 </span>    <span class="subxS1Comment"># . if (eax == 0) loop</span>
<span id="L2839" class="LineNr">2839 </span>    3d/compare-eax-and  0/imm32
<span id="L2840" class="LineNr">2840 </span>    0f 84/jump-if-equal  $emit-sib:<span class="Constant">loop</span>/disp32
<span id="L2841" class="LineNr">2841 </span><span class="Constant">$emit-sib:index</span>:
<span id="L2842" class="LineNr">2842 </span>    <span class="subxComment"># index = parse-hex-int(next-token-from-slice(word-slice-&gt;start, word-slice-&gt;end, '/'))</span>
<span id="L2843" class="LineNr">2843 </span>    <span class="subxS1Comment"># . eax = parse-datum-of-word(word-slice)</span>
<span id="L2844" class="LineNr">2844 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2845" class="LineNr">2845 </span>    51/push-ecx
<span id="L2846" class="LineNr">2846 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2847" class="LineNr">2847 </span>    e8/call  <a href='pack.subx.html#L5948'>parse-datum-of-word</a>/disp32
<span id="L2848" class="LineNr">2848 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2849" class="LineNr">2849 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2850" class="LineNr">2850 </span>    <span class="subxS1Comment"># . index = eax</span>
<span id="L2851" class="LineNr">2851 </span>    89/copy                         3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to edi</span>
<span id="L2852" class="LineNr">2852 </span>    <span class="subxComment"># has-sib? = true</span>
<span id="L2853" class="LineNr">2853 </span>    ba/copy-to-edx  1/imm32/true
<span id="L2854" class="LineNr">2854 </span>    <span class="subxComment"># continue</span>
<span id="L2855" class="LineNr">2855 </span>    e9/jump  $emit-sib:<span class="Constant">loop</span>/disp32
<span id="L2856" class="LineNr">2856 </span><span class="Constant">$emit-sib:break</span>:
<span id="L2857" class="LineNr">2857 </span>    <span class="subxComment"># if (!has-sib?) return</span>
<span id="L2858" class="LineNr">2858 </span>    81          7/subop/compare     3/mod/direct    2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0/imm32           <span class="subxComment"># compare edx</span>
<span id="L2859" class="LineNr">2859 </span>    74/jump-if-equal  $emit-sib:end/disp8
<span id="L2860" class="LineNr">2860 </span><span class="Constant">$emit-sib:calculate</span>:
<span id="L2861" class="LineNr">2861 </span>    <span class="subxComment"># sib/ebx = scale &amp; 0b11</span>
<span id="L2862" class="LineNr">2862 </span>    81          4/subop/and         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              3/imm32/0b11      <span class="subxComment"># bitwise and of ebx</span>
<span id="L2863" class="LineNr">2863 </span>    <span class="subxComment"># sib &lt;&lt;= 2</span>
<span id="L2864" class="LineNr">2864 </span>    c1/shift    4/subop/left        3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              2/imm8            <span class="subxComment"># shift ebx left by 2 bits</span>
<span id="L2865" class="LineNr">2865 </span>    <span class="subxComment"># sib |= index &amp; 0b111</span>
<span id="L2866" class="LineNr">2866 </span>    81          4/subop/and         3/mod/direct    7/rm32/edi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              7/imm32/0b111     <span class="subxComment"># bitwise and of edi</span>
<span id="L2867" class="LineNr">2867 </span>    09/or                           3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          7/r32/edi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># ebx = bitwise OR with edi</span>
<span id="L2868" class="LineNr">2868 </span>    <span class="subxComment"># sib &lt;&lt;= 3</span>
<span id="L2869" class="LineNr">2869 </span>    c1/shift    4/subop/left        3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              3/imm8            <span class="subxComment"># shift ebx left by 3 bits</span>
<span id="L2870" class="LineNr">2870 </span>    <span class="subxComment"># sib |= base &amp; 0b111</span>
<span id="L2871" class="LineNr">2871 </span>    81          4/subop/and         3/mod/direct    6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              7/imm32/0b111     <span class="subxComment"># bitwise and of esi</span>
<span id="L2872" class="LineNr">2872 </span>    09/or                           3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># ebx = bitwise OR with esi</span>
<span id="L2873" class="LineNr">2873 </span><span class="Constant">$emit-sib:<a href='../079emit.subx.html#L10'>emit</a></span>:
<span id="L2874" class="LineNr">2874 </span>    <span class="subxComment"># emit-hex(out, sib, 1)</span>
<span id="L2875" class="LineNr">2875 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2876" class="LineNr">2876 </span>    68/push  1/imm32
<span id="L2877" class="LineNr">2877 </span>    53/push-ebx
<span id="L2878" class="LineNr">2878 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L2879" class="LineNr">2879 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2880" class="LineNr">2880 </span>    e8/call  <a href='../078emit-hex.subx.html#L7'>emit-hex</a>/disp32
<span id="L2881" class="LineNr">2881 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2882" class="LineNr">2882 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L2883" class="LineNr">2883 </span><span class="Constant">$emit-sib:end</span>:
<span id="L2884" class="LineNr">2884 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L2885" class="LineNr">2885 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2886" class="LineNr">2886 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L2887" class="LineNr">2887 </span>    5f/pop-to-edi
<span id="L2888" class="LineNr">2888 </span>    5e/pop-to-esi
<span id="L2889" class="LineNr">2889 </span>    5b/pop-to-ebx
<span id="L2890" class="LineNr">2890 </span>    5a/pop-to-edx
<span id="L2891" class="LineNr">2891 </span>    59/pop-to-ecx
<span id="L2892" class="LineNr">2892 </span>    58/pop-to-eax
<span id="L2893" class="LineNr">2893 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L2894" class="LineNr">2894 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L2895" class="LineNr">2895 </span>    5d/pop-to-ebp
<span id="L2896" class="LineNr">2896 </span>    c3/return
<span id="L2897" class="LineNr">2897 </span>
<span id="L2898" class="LineNr">2898 </span><span class="subxFunction">emit-disp</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L2899" class="LineNr">2899 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L2900" class="LineNr">2900 </span>    <span class="subxComment">#   rewind-stream(line)</span>
<span id="L2901" class="LineNr">2901 </span>    <span class="subxComment">#   var word-slice = {0, 0}</span>
<span id="L2902" class="LineNr">2902 </span>    <span class="subxComment">#   while true</span>
<span id="L2903" class="LineNr">2903 </span>    <span class="subxComment">#     word-slice = next-word(line)</span>
<span id="L2904" class="LineNr">2904 </span>    <span class="subxComment">#     if (slice-empty?(word-slice)) break</span>
<span id="L2905" class="LineNr">2905 </span>    <span class="subxComment">#     if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L2906" class="LineNr">2906 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;disp32&quot;)</span>
<span id="L2907" class="LineNr">2907 </span>    <span class="subxComment">#       emit(out, word-slice, 4)</span>
<span id="L2908" class="LineNr">2908 </span>    <span class="subxComment">#       break</span>
<span id="L2909" class="LineNr">2909 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;disp16&quot;)</span>
<span id="L2910" class="LineNr">2910 </span>    <span class="subxComment">#       emit(out, word-slice, 2)</span>
<span id="L2911" class="LineNr">2911 </span>    <span class="subxComment">#       break</span>
<span id="L2912" class="LineNr">2912 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;disp8&quot;)</span>
<span id="L2913" class="LineNr">2913 </span>    <span class="subxComment">#       emit(out, word-slice, 1)</span>
<span id="L2914" class="LineNr">2914 </span>    <span class="subxComment">#       break</span>
<span id="L2915" class="LineNr">2915 </span>    <span class="subxComment">#</span>
<span id="L2916" class="LineNr">2916 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L2917" class="LineNr">2917 </span>    55/push-ebp
<span id="L2918" class="LineNr">2918 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L2919" class="LineNr">2919 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L2920" class="LineNr">2920 </span>    50/push-eax
<span id="L2921" class="LineNr">2921 </span>    51/push-ecx
<span id="L2922" class="LineNr">2922 </span>    52/push-edx
<span id="L2923" class="LineNr">2923 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L2924" class="LineNr">2924 </span>    68/push  0/imm32/end
<span id="L2925" class="LineNr">2925 </span>    68/push  0/imm32/start
<span id="L2926" class="LineNr">2926 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L2927" class="LineNr">2927 </span>    <span class="subxComment"># rewind-stream(line)</span>
<span id="L2928" class="LineNr">2928 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2929" class="LineNr">2929 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2930" class="LineNr">2930 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2931" class="LineNr">2931 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L2932" class="LineNr">2932 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2933" class="LineNr">2933 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L2934" class="Folded">2934 </span><span class="Folded">+-- 26 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L2960" class="LineNr">2960 </span><span class="Constant">$emit-disp:loop</span>:
<span id="L2961" class="LineNr">2961 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L2962" class="LineNr">2962 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L2963" class="LineNr">2963 </span>    51/push-ecx
<span id="L2964" class="LineNr">2964 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L2965" class="LineNr">2965 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L2966" class="LineNr">2966 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L2967" class="LineNr">2967 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L2968" class="LineNr">2968 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L2969" class="Folded">2969 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3011" class="LineNr">3011 </span><span class="Constant">$emit-disp:check0</span>:
<span id="L3012" class="LineNr">3012 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L3013" class="LineNr">3013 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L3014" class="LineNr">3014 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3015" class="LineNr">3015 </span>    51/push-ecx
<span id="L3016" class="LineNr">3016 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3017" class="LineNr">3017 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L3018" class="LineNr">3018 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3019" class="LineNr">3019 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3020" class="LineNr">3020 </span>    <span class="subxS1Comment"># . if (eax != 0) pass through</span>
<span id="L3021" class="LineNr">3021 </span>    3d/compare-eax-and  0/imm32
<span id="L3022" class="LineNr">3022 </span>    0f 85/jump-if-not-equal  $emit-disp:<span class="Constant">break</span>/disp32
<span id="L3023" class="LineNr">3023 </span><span class="Constant">$emit-disp:check1</span>:
<span id="L3024" class="LineNr">3024 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L3025" class="LineNr">3025 </span>    <span class="subxS1Comment"># . start/edx = word-slice-&gt;start</span>
<span id="L3026" class="LineNr">3026 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L3027" class="LineNr">3027 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L3028" class="LineNr">3028 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L3029" class="LineNr">3029 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L3030" class="LineNr">3030 </span>    <span class="subxS1Comment"># . if (eax == '#') break</span>
<span id="L3031" class="LineNr">3031 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L3032" class="LineNr">3032 </span>    0f 84/jump-if-equal  $emit-disp:<span class="Constant">break</span>/disp32
<span id="L3033" class="LineNr">3033 </span><span class="Constant">$emit-disp:check-for-disp32</span>:
<span id="L3034" class="LineNr">3034 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;disp32&quot;))</span>
<span id="L3035" class="LineNr">3035 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;disp32&quot;)</span>
<span id="L3036" class="LineNr">3036 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3037" class="LineNr">3037 </span>    68/push  <span class="Constant">&quot;disp32&quot;</span>/imm32
<span id="L3038" class="LineNr">3038 </span>    51/push-ecx
<span id="L3039" class="LineNr">3039 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3040" class="LineNr">3040 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3041" class="LineNr">3041 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3042" class="LineNr">3042 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3043" class="LineNr">3043 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L3044" class="LineNr">3044 </span>    3d/compare-eax-and  0/imm32
<span id="L3045" class="LineNr">3045 </span>    74/jump-if-equal  $emit-disp:check-for-disp16/disp8
<span id="L3046" class="LineNr">3046 </span><span class="Constant">$emit-disp:disp32</span>:
<span id="L3047" class="LineNr">3047 </span>    <span class="subxComment"># emit(out, word-slice, 4)</span>
<span id="L3048" class="LineNr">3048 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3049" class="LineNr">3049 </span>    68/push  4/imm32
<span id="L3050" class="LineNr">3050 </span>    51/push-ecx
<span id="L3051" class="LineNr">3051 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3052" class="LineNr">3052 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3053" class="LineNr">3053 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3054" class="LineNr">3054 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3055" class="LineNr">3055 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3056" class="LineNr">3056 </span>    <span class="subxComment"># break</span>
<span id="L3057" class="LineNr">3057 </span>    e9/jump  $emit-disp:<span class="Constant">break</span>/disp32
<span id="L3058" class="LineNr">3058 </span><span class="Constant">$emit-disp:check-for-disp16</span>:
<span id="L3059" class="LineNr">3059 </span>    <span class="subxComment"># else if (has-metadata?(word-slice, &quot;disp16&quot;))</span>
<span id="L3060" class="LineNr">3060 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;disp16&quot;)</span>
<span id="L3061" class="LineNr">3061 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3062" class="LineNr">3062 </span>    68/push  <span class="Constant">&quot;disp16&quot;</span>/imm32
<span id="L3063" class="LineNr">3063 </span>    51/push-ecx
<span id="L3064" class="LineNr">3064 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3065" class="LineNr">3065 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3066" class="LineNr">3066 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3067" class="LineNr">3067 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3068" class="LineNr">3068 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L3069" class="LineNr">3069 </span>    3d/compare-eax-and  0/imm32
<span id="L3070" class="LineNr">3070 </span>    74/jump-if-equal  $emit-disp:check-for-disp8/disp8
<span id="L3071" class="LineNr">3071 </span><span class="Constant">$emit-disp:disp16</span>:
<span id="L3072" class="LineNr">3072 </span>    <span class="subxComment"># emit(out, word-slice, 2)</span>
<span id="L3073" class="LineNr">3073 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3074" class="LineNr">3074 </span>    68/push  2/imm32
<span id="L3075" class="LineNr">3075 </span>    51/push-ecx
<span id="L3076" class="LineNr">3076 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3077" class="LineNr">3077 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3078" class="LineNr">3078 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3079" class="LineNr">3079 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3080" class="LineNr">3080 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3081" class="LineNr">3081 </span>    <span class="subxComment"># break</span>
<span id="L3082" class="LineNr">3082 </span>    e9/jump  $emit-disp:<span class="Constant">break</span>/disp32
<span id="L3083" class="LineNr">3083 </span><span class="Constant">$emit-disp:check-for-disp8</span>:
<span id="L3084" class="LineNr">3084 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;disp8&quot;))</span>
<span id="L3085" class="LineNr">3085 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;disp8&quot;)</span>
<span id="L3086" class="LineNr">3086 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3087" class="LineNr">3087 </span>    68/push  <span class="Constant">&quot;disp8&quot;</span>/imm32
<span id="L3088" class="LineNr">3088 </span>    51/push-ecx
<span id="L3089" class="LineNr">3089 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3090" class="LineNr">3090 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3091" class="LineNr">3091 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3092" class="LineNr">3092 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3093" class="LineNr">3093 </span>    <span class="subxS1Comment"># . if (eax == 0) loop</span>
<span id="L3094" class="LineNr">3094 </span>    3d/compare-eax-and  0/imm32
<span id="L3095" class="LineNr">3095 </span>    0f 84/jump-if-equal  $emit-disp:<span class="Constant">loop</span>/disp32
<span id="L3096" class="LineNr">3096 </span><span class="Constant">$emit-disp:disp8</span>:
<span id="L3097" class="LineNr">3097 </span>    <span class="subxComment"># emit(out, word-slice, 1)</span>
<span id="L3098" class="LineNr">3098 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3099" class="LineNr">3099 </span>    68/push  1/imm32
<span id="L3100" class="LineNr">3100 </span>    51/push-ecx
<span id="L3101" class="LineNr">3101 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3102" class="LineNr">3102 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3103" class="LineNr">3103 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3104" class="LineNr">3104 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3105" class="LineNr">3105 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3106" class="LineNr">3106 </span>    <span class="subxComment"># break</span>
<span id="L3107" class="LineNr">3107 </span><span class="Constant">$emit-disp:break</span>:
<span id="L3108" class="LineNr">3108 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L3109" class="LineNr">3109 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3110" class="LineNr">3110 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L3111" class="LineNr">3111 </span>    5a/pop-to-edx
<span id="L3112" class="LineNr">3112 </span>    59/pop-to-ecx
<span id="L3113" class="LineNr">3113 </span>    58/pop-to-eax
<span id="L3114" class="LineNr">3114 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3115" class="LineNr">3115 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3116" class="LineNr">3116 </span>    5d/pop-to-ebp
<span id="L3117" class="LineNr">3117 </span>    c3/return
<span id="L3118" class="LineNr">3118 </span>
<span id="L3119" class="LineNr">3119 </span><span class="subxFunction">emit-imm</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L3120" class="LineNr">3120 </span>    <span class="subxComment"># pseudocode:</span>
<span id="L3121" class="LineNr">3121 </span>    <span class="subxComment">#   rewind-stream(line)</span>
<span id="L3122" class="LineNr">3122 </span>    <span class="subxComment">#   var word-slice = {0, 0}</span>
<span id="L3123" class="LineNr">3123 </span>    <span class="subxComment">#   while true</span>
<span id="L3124" class="LineNr">3124 </span>    <span class="subxComment">#     word-slice = next-word(line)</span>
<span id="L3125" class="LineNr">3125 </span>    <span class="subxComment">#     if (slice-empty?(word-slice)) break</span>
<span id="L3126" class="LineNr">3126 </span>    <span class="subxComment">#     if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L3127" class="LineNr">3127 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;imm32&quot;)</span>
<span id="L3128" class="LineNr">3128 </span>    <span class="subxComment">#       emit(out, word-slice, 4)</span>
<span id="L3129" class="LineNr">3129 </span>    <span class="subxComment">#       break</span>
<span id="L3130" class="LineNr">3130 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;imm16&quot;)</span>
<span id="L3131" class="LineNr">3131 </span>    <span class="subxComment">#       emit(out, word-slice, 2)</span>
<span id="L3132" class="LineNr">3132 </span>    <span class="subxComment">#       break</span>
<span id="L3133" class="LineNr">3133 </span>    <span class="subxComment">#     if has-metadata?(word-slice, &quot;imm8&quot;)</span>
<span id="L3134" class="LineNr">3134 </span>    <span class="subxComment">#       emit(out, word-slice, 1)</span>
<span id="L3135" class="LineNr">3135 </span>    <span class="subxComment">#       break</span>
<span id="L3136" class="LineNr">3136 </span>    <span class="subxComment">#</span>
<span id="L3137" class="LineNr">3137 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3138" class="LineNr">3138 </span>    55/push-ebp
<span id="L3139" class="LineNr">3139 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3140" class="LineNr">3140 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L3141" class="LineNr">3141 </span>    50/push-eax
<span id="L3142" class="LineNr">3142 </span>    51/push-ecx
<span id="L3143" class="LineNr">3143 </span>    52/push-edx
<span id="L3144" class="LineNr">3144 </span>    <span class="subxComment"># var word-slice/ecx = {0, 0}</span>
<span id="L3145" class="LineNr">3145 </span>    68/push  0/imm32/end
<span id="L3146" class="LineNr">3146 </span>    68/push  0/imm32/start
<span id="L3147" class="LineNr">3147 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L3148" class="LineNr">3148 </span>    <span class="subxComment"># rewind-stream(line)</span>
<span id="L3149" class="LineNr">3149 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3150" class="LineNr">3150 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L3151" class="LineNr">3151 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3152" class="LineNr">3152 </span>    e8/call  <a href='../055stream.subx.html#L54'>rewind-stream</a>/disp32
<span id="L3153" class="LineNr">3153 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3154" class="LineNr">3154 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3155" class="Folded">3155 </span><span class="Folded">+-- 26 lines: #?     # dump line -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3181" class="LineNr">3181 </span><span class="Constant">$emit-imm:loop</span>:
<span id="L3182" class="LineNr">3182 </span>    <span class="subxComment"># next-word(line, word-slice)</span>
<span id="L3183" class="LineNr">3183 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3184" class="LineNr">3184 </span>    51/push-ecx
<span id="L3185" class="LineNr">3185 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L3186" class="LineNr">3186 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3187" class="LineNr">3187 </span>    e8/call  <a href='../076next-word.subx.html#L10'>next-word</a>/disp32
<span id="L3188" class="LineNr">3188 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3189" class="LineNr">3189 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3190" class="Folded">3190 </span><span class="Folded">+-- 42 lines: #?     # dump word-slice -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3232" class="LineNr">3232 </span><span class="Constant">$emit-imm:check0</span>:
<span id="L3233" class="LineNr">3233 </span>    <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
<span id="L3234" class="LineNr">3234 </span>    <span class="subxS1Comment"># . eax = slice-empty?(word-slice)</span>
<span id="L3235" class="LineNr">3235 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3236" class="LineNr">3236 </span>    51/push-ecx
<span id="L3237" class="LineNr">3237 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3238" class="LineNr">3238 </span>    e8/call  <a href='../072slice.subx.html#L9'>slice-empty?</a>/disp32
<span id="L3239" class="LineNr">3239 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3240" class="LineNr">3240 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3241" class="LineNr">3241 </span>    <span class="subxS1Comment"># . if (eax != 0) pass through</span>
<span id="L3242" class="LineNr">3242 </span>    3d/compare-eax-and  0/imm32
<span id="L3243" class="LineNr">3243 </span>    0f 85/jump-if-not-equal  $emit-imm:<span class="Constant">break</span>/disp32
<span id="L3244" class="LineNr">3244 </span><span class="Constant">$emit-imm:check1</span>:
<span id="L3245" class="LineNr">3245 </span>    <span class="subxComment"># if (slice-starts-with?(word-slice, &quot;#&quot;)) break</span>
<span id="L3246" class="LineNr">3246 </span>    <span class="subxS1Comment"># . start/edx = slice-&gt;start</span>
<span id="L3247" class="LineNr">3247 </span>    8b/copy                         0/mod/indirect  1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          2/r32/edx  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy *ecx to edx</span>
<span id="L3248" class="LineNr">3248 </span>    <span class="subxS1Comment"># . c/eax = *start</span>
<span id="L3249" class="LineNr">3249 </span>    31/xor                          3/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># clear eax</span>
<span id="L3250" class="LineNr">3250 </span>    8a/copy-byte                    0/mod/indirect  2/rm32/edx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/AL   <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy byte at *edx to AL</span>
<span id="L3251" class="LineNr">3251 </span>    <span class="subxS1Comment"># . if (eax == '#') break</span>
<span id="L3252" class="LineNr">3252 </span>    3d/compare-eax-and  0x23/imm32/hash
<span id="L3253" class="LineNr">3253 </span>    0f 84/jump-if-equal  $emit-imm:<span class="Constant">break</span>/disp32
<span id="L3254" class="LineNr">3254 </span><span class="Constant">$emit-imm:check-for-imm32</span>:
<span id="L3255" class="LineNr">3255 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;imm32&quot;))</span>
<span id="L3256" class="LineNr">3256 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;imm32&quot;)</span>
<span id="L3257" class="LineNr">3257 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3258" class="LineNr">3258 </span>    68/push  <span class="Constant">&quot;imm32&quot;</span>/imm32
<span id="L3259" class="LineNr">3259 </span>    51/push-ecx
<span id="L3260" class="LineNr">3260 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3261" class="LineNr">3261 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3262" class="LineNr">3262 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3263" class="LineNr">3263 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3264" class="LineNr">3264 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L3265" class="LineNr">3265 </span>    3d/compare-eax-and  0/imm32
<span id="L3266" class="LineNr">3266 </span>    74/jump-if-equal  $emit-imm:check-for-imm16/disp8
<span id="L3267" class="LineNr">3267 </span><span class="Constant">$emit-imm:imm32</span>:
<span id="L3268" class="LineNr">3268 </span>    <span class="subxComment"># emit(out, word-slice, 4)</span>
<span id="L3269" class="LineNr">3269 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3270" class="LineNr">3270 </span>    68/push  4/imm32
<span id="L3271" class="LineNr">3271 </span>    51/push-ecx
<span id="L3272" class="LineNr">3272 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3273" class="LineNr">3273 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3274" class="LineNr">3274 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3275" class="LineNr">3275 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3276" class="LineNr">3276 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3277" class="LineNr">3277 </span>    <span class="subxComment"># break</span>
<span id="L3278" class="LineNr">3278 </span>    e9/jump  $emit-imm:<span class="Constant">break</span>/disp32
<span id="L3279" class="LineNr">3279 </span><span class="Constant">$emit-imm:check-for-imm16</span>:
<span id="L3280" class="LineNr">3280 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;imm16&quot;))</span>
<span id="L3281" class="LineNr">3281 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;imm16&quot;)</span>
<span id="L3282" class="LineNr">3282 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3283" class="LineNr">3283 </span>    68/push  <span class="Constant">&quot;imm16&quot;</span>/imm32
<span id="L3284" class="LineNr">3284 </span>    51/push-ecx
<span id="L3285" class="LineNr">3285 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3286" class="LineNr">3286 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3287" class="LineNr">3287 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3288" class="LineNr">3288 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3289" class="LineNr">3289 </span>    <span class="subxS1Comment"># . if (eax == 0) goto next check</span>
<span id="L3290" class="LineNr">3290 </span>    3d/compare-eax-and  0/imm32
<span id="L3291" class="LineNr">3291 </span>    74/jump-if-equal  $emit-imm:check-for-imm8/disp8
<span id="L3292" class="LineNr">3292 </span><span class="Constant">$emit-imm:imm16</span>:
<span id="L3293" class="LineNr">3293 </span>    <span class="subxComment"># emit(out, word-slice, 2)</span>
<span id="L3294" class="LineNr">3294 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3295" class="LineNr">3295 </span>    68/push  2/imm32
<span id="L3296" class="LineNr">3296 </span>    51/push-ecx
<span id="L3297" class="LineNr">3297 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3298" class="LineNr">3298 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3299" class="LineNr">3299 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3300" class="LineNr">3300 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3301" class="LineNr">3301 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3302" class="LineNr">3302 </span>    <span class="subxComment"># break</span>
<span id="L3303" class="LineNr">3303 </span>    e9/jump  $emit-imm:<span class="Constant">break</span>/disp32
<span id="L3304" class="LineNr">3304 </span><span class="Constant">$emit-imm:check-for-imm8</span>:
<span id="L3305" class="LineNr">3305 </span>    <span class="subxComment"># if (has-metadata?(word-slice, &quot;imm8&quot;))</span>
<span id="L3306" class="LineNr">3306 </span>    <span class="subxS1Comment"># . eax = has-metadata?(ecx, &quot;imm8&quot;)</span>
<span id="L3307" class="LineNr">3307 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3308" class="LineNr">3308 </span>    68/push  <span class="Constant">&quot;imm8&quot;</span>/imm32
<span id="L3309" class="LineNr">3309 </span>    51/push-ecx
<span id="L3310" class="LineNr">3310 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3311" class="LineNr">3311 </span>    e8/call  <a href='../077subx-words.subx.html#L8'>has-metadata?</a>/disp32
<span id="L3312" class="LineNr">3312 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3313" class="LineNr">3313 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3314" class="LineNr">3314 </span>    <span class="subxS1Comment"># . if (eax == 0) loop</span>
<span id="L3315" class="LineNr">3315 </span>    3d/compare-eax-and  0/imm32
<span id="L3316" class="LineNr">3316 </span>    0f 84/jump-if-equal  $emit-imm:<span class="Constant">loop</span>/disp32
<span id="L3317" class="LineNr">3317 </span><span class="Constant">$emit-imm:imm8</span>:
<span id="L3318" class="LineNr">3318 </span>    <span class="subxComment"># emit(out, word-slice, 1)</span>
<span id="L3319" class="LineNr">3319 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3320" class="LineNr">3320 </span>    68/push  1/imm32
<span id="L3321" class="LineNr">3321 </span>    51/push-ecx
<span id="L3322" class="LineNr">3322 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3323" class="LineNr">3323 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3324" class="LineNr">3324 </span>    e8/call  <a href='../079emit.subx.html#L10'>emit</a>/disp32
<span id="L3325" class="LineNr">3325 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3326" class="LineNr">3326 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3327" class="LineNr">3327 </span>    <span class="subxComment"># break</span>
<span id="L3328" class="LineNr">3328 </span><span class="Constant">$emit-imm:break</span>:
<span id="L3329" class="LineNr">3329 </span>    <span class="subxS1Comment"># . restore locals</span>
<span id="L3330" class="LineNr">3330 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3331" class="LineNr">3331 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L3332" class="LineNr">3332 </span>    5a/pop-to-edx
<span id="L3333" class="LineNr">3333 </span>    59/pop-to-ecx
<span id="L3334" class="LineNr">3334 </span>    58/pop-to-eax
<span id="L3335" class="LineNr">3335 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3336" class="LineNr">3336 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3337" class="LineNr">3337 </span>    5d/pop-to-ebp
<span id="L3338" class="LineNr">3338 </span>    c3/return
<span id="L3339" class="LineNr">3339 </span>
<span id="L3340" class="LineNr">3340 </span><span class="subxFunction">emit-line-in-comment</span>:  <span class="subxComment"># line : (address stream byte), out : (address buffered-file) -&gt; &lt;void&gt;</span>
<span id="L3341" class="LineNr">3341 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3342" class="LineNr">3342 </span>    55/push-ebp
<span id="L3343" class="LineNr">3343 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3344" class="LineNr">3344 </span>    <span class="subxComment"># write-buffered(out, &quot; # &quot;)</span>
<span id="L3345" class="LineNr">3345 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3346" class="LineNr">3346 </span>    68/push  <span class="Constant">&quot; # &quot;</span>/imm32
<span id="L3347" class="LineNr">3347 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3348" class="LineNr">3348 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3349" class="LineNr">3349 </span>    e8/call  <a href='../065write-buffered.subx.html#L8'>write-buffered</a>/disp32
<span id="L3350" class="LineNr">3350 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3351" class="LineNr">3351 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3352" class="LineNr">3352 </span>    <span class="subxComment"># write-stream-data(out, line)</span>
<span id="L3353" class="LineNr">3353 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3354" class="LineNr">3354 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+8)</span>
<span id="L3355" class="LineNr">3355 </span>    ff          6/subop/push        1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L3356" class="LineNr">3356 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3357" class="LineNr">3357 </span>    e8/call  <a href='../074write-stream-data.subx.html#L11'>write-stream-data</a>/disp32
<span id="L3358" class="LineNr">3358 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3359" class="LineNr">3359 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3360" class="LineNr">3360 </span><span class="Constant">$emit-line-in-comment:end</span>:
<span id="L3361" class="LineNr">3361 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3362" class="LineNr">3362 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3363" class="LineNr">3363 </span>    5d/pop-to-ebp
<span id="L3364" class="LineNr">3364 </span>    c3/return
<span id="L3365" class="LineNr">3365 </span>
<span id="L3366" class="LineNr">3366 </span><span class="subxTest">test-convert-instruction-passes-comments-through</span>:
<span id="L3367" class="LineNr">3367 </span>    <span class="subxComment"># if a line starts with '#', pass it along unchanged</span>
<span id="L3368" class="LineNr">3368 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3369" class="LineNr">3369 </span>    55/push-ebp
<span id="L3370" class="LineNr">3370 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3371" class="LineNr">3371 </span>    <span class="subxComment"># setup</span>
<span id="L3372" class="LineNr">3372 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3373" class="LineNr">3373 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3374" class="LineNr">3374 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3375" class="LineNr">3375 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3376" class="LineNr">3376 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3377" class="LineNr">3377 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3378" class="LineNr">3378 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3379" class="LineNr">3379 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3380" class="LineNr">3380 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3381" class="LineNr">3381 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3382" class="LineNr">3382 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3383" class="LineNr">3383 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3384" class="LineNr">3384 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3385" class="LineNr">3385 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3386" class="LineNr">3386 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3387" class="LineNr">3387 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3388" class="LineNr">3388 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3389" class="LineNr">3389 </span>    05/add-to-eax  4/imm32
<span id="L3390" class="LineNr">3390 </span>    50/push-eax
<span id="L3391" class="LineNr">3391 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3392" class="LineNr">3392 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3393" class="LineNr">3393 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3394" class="LineNr">3394 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3395" class="LineNr">3395 </span>    <span class="subxComment"># initialize input</span>
<span id="L3396" class="LineNr">3396 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;# abcd&quot;)</span>
<span id="L3397" class="LineNr">3397 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3398" class="LineNr">3398 </span>    68/push  <span class="Constant">&quot;# abcd&quot;</span>/imm32
<span id="L3399" class="LineNr">3399 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3400" class="LineNr">3400 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3401" class="LineNr">3401 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3402" class="LineNr">3402 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3403" class="LineNr">3403 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3404" class="LineNr">3404 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3405" class="LineNr">3405 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3406" class="LineNr">3406 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3407" class="LineNr">3407 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3408" class="LineNr">3408 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3409" class="LineNr">3409 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3410" class="LineNr">3410 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3411" class="LineNr">3411 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3412" class="LineNr">3412 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L3413" class="LineNr">3413 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3414" class="LineNr">3414 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3415" class="LineNr">3415 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3416" class="LineNr">3416 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3417" class="LineNr">3417 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3418" class="LineNr">3418 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3419" class="LineNr">3419 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3420" class="LineNr">3420 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;# abcd&quot;, msg)</span>
<span id="L3421" class="LineNr">3421 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3422" class="LineNr">3422 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-passes-comments-through&quot;</span>/imm32
<span id="L3423" class="LineNr">3423 </span>    68/push  <span class="Constant">&quot;# abcd&quot;</span>/imm32
<span id="L3424" class="LineNr">3424 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3425" class="LineNr">3425 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3426" class="LineNr">3426 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3427" class="LineNr">3427 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3428" class="LineNr">3428 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3429" class="LineNr">3429 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3430" class="LineNr">3430 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3431" class="LineNr">3431 </span>    5d/pop-to-ebp
<span id="L3432" class="LineNr">3432 </span>    c3/return
<span id="L3433" class="LineNr">3433 </span>
<span id="L3434" class="LineNr">3434 </span><span class="subxTest">test-convert-instruction-passes-labels-through</span>:
<span id="L3435" class="LineNr">3435 </span>    <span class="subxComment"># if the first word ends with ':', pass along the entire line unchanged</span>
<span id="L3436" class="LineNr">3436 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3437" class="LineNr">3437 </span>    55/push-ebp
<span id="L3438" class="LineNr">3438 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3439" class="LineNr">3439 </span>    <span class="subxComment"># setup</span>
<span id="L3440" class="LineNr">3440 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3441" class="LineNr">3441 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3442" class="LineNr">3442 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3443" class="LineNr">3443 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3444" class="LineNr">3444 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3445" class="LineNr">3445 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3446" class="LineNr">3446 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3447" class="LineNr">3447 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3448" class="LineNr">3448 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3449" class="LineNr">3449 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3450" class="LineNr">3450 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3451" class="LineNr">3451 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3452" class="LineNr">3452 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3453" class="LineNr">3453 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3454" class="LineNr">3454 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3455" class="LineNr">3455 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3456" class="LineNr">3456 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3457" class="LineNr">3457 </span>    05/add-to-eax  4/imm32
<span id="L3458" class="LineNr">3458 </span>    50/push-eax
<span id="L3459" class="LineNr">3459 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3460" class="LineNr">3460 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3461" class="LineNr">3461 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3462" class="LineNr">3462 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3463" class="LineNr">3463 </span>    <span class="subxComment"># initialize input</span>
<span id="L3464" class="LineNr">3464 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;ab: # cd&quot;)</span>
<span id="L3465" class="LineNr">3465 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3466" class="LineNr">3466 </span>    68/push  <span class="Constant">&quot;ab: # cd&quot;</span>/imm32
<span id="L3467" class="LineNr">3467 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3468" class="LineNr">3468 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3469" class="LineNr">3469 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3470" class="LineNr">3470 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3471" class="LineNr">3471 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3472" class="LineNr">3472 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3473" class="LineNr">3473 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3474" class="LineNr">3474 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3475" class="LineNr">3475 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3476" class="LineNr">3476 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3477" class="LineNr">3477 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3478" class="LineNr">3478 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3479" class="LineNr">3479 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3480" class="LineNr">3480 </span>    <span class="subxComment"># check that the line just passed through</span>
<span id="L3481" class="LineNr">3481 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3482" class="LineNr">3482 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3483" class="LineNr">3483 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3484" class="LineNr">3484 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3485" class="LineNr">3485 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3486" class="LineNr">3486 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3487" class="LineNr">3487 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3488" class="LineNr">3488 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;ab: # cd&quot;, msg)</span>
<span id="L3489" class="LineNr">3489 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3490" class="LineNr">3490 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-passes-labels-through&quot;</span>/imm32
<span id="L3491" class="LineNr">3491 </span>    68/push  <span class="Constant">&quot;ab: # cd&quot;</span>/imm32
<span id="L3492" class="LineNr">3492 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3493" class="LineNr">3493 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3494" class="LineNr">3494 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3495" class="LineNr">3495 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3496" class="LineNr">3496 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3497" class="LineNr">3497 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3498" class="LineNr">3498 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3499" class="LineNr">3499 </span>    5d/pop-to-ebp
<span id="L3500" class="LineNr">3500 </span>    c3/return
<span id="L3501" class="LineNr">3501 </span>
<span id="L3502" class="LineNr">3502 </span><span class="subxTest">test-convert-instruction-handles-single-opcode</span>:
<span id="L3503" class="LineNr">3503 </span>    <span class="subxComment"># if the instruction consists of a single opcode, strip its metadata and pass it along</span>
<span id="L3504" class="LineNr">3504 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3505" class="LineNr">3505 </span>    55/push-ebp
<span id="L3506" class="LineNr">3506 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3507" class="LineNr">3507 </span>    <span class="subxComment"># setup</span>
<span id="L3508" class="LineNr">3508 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3509" class="LineNr">3509 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3510" class="LineNr">3510 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3511" class="LineNr">3511 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3512" class="LineNr">3512 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3513" class="LineNr">3513 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3514" class="LineNr">3514 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3515" class="LineNr">3515 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3516" class="LineNr">3516 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3517" class="LineNr">3517 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3518" class="LineNr">3518 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3519" class="LineNr">3519 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3520" class="LineNr">3520 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3521" class="LineNr">3521 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3522" class="LineNr">3522 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3523" class="LineNr">3523 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3524" class="LineNr">3524 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3525" class="LineNr">3525 </span>    05/add-to-eax  4/imm32
<span id="L3526" class="LineNr">3526 </span>    50/push-eax
<span id="L3527" class="LineNr">3527 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3528" class="LineNr">3528 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3529" class="LineNr">3529 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3530" class="LineNr">3530 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3531" class="LineNr">3531 </span>    <span class="subxComment"># initialize input</span>
<span id="L3532" class="LineNr">3532 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;ab/cd # comment&quot;)</span>
<span id="L3533" class="LineNr">3533 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3534" class="LineNr">3534 </span>    68/push  <span class="Constant">&quot;ab/cd # comment&quot;</span>/imm32
<span id="L3535" class="LineNr">3535 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3536" class="LineNr">3536 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3537" class="LineNr">3537 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3538" class="LineNr">3538 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3539" class="LineNr">3539 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3540" class="LineNr">3540 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3541" class="LineNr">3541 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3542" class="LineNr">3542 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3543" class="LineNr">3543 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3544" class="LineNr">3544 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3545" class="LineNr">3545 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3546" class="LineNr">3546 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3547" class="LineNr">3547 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3548" class="LineNr">3548 </span>    <span class="subxComment"># check output</span>
<span id="L3549" class="LineNr">3549 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3550" class="LineNr">3550 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3551" class="LineNr">3551 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3552" class="LineNr">3552 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3553" class="LineNr">3553 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3554" class="LineNr">3554 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3555" class="LineNr">3555 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3556" class="Folded">3556 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3582" class="LineNr">3582 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;ab  # ab/cd # comment&quot;, msg)</span>
<span id="L3583" class="LineNr">3583 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3584" class="LineNr">3584 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-single-opcode&quot;</span>/imm32
<span id="L3585" class="LineNr">3585 </span>    68/push  <span class="Constant">&quot;ab  # ab/cd # comment&quot;</span>/imm32
<span id="L3586" class="LineNr">3586 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3587" class="LineNr">3587 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3588" class="LineNr">3588 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3589" class="LineNr">3589 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3590" class="LineNr">3590 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3591" class="LineNr">3591 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3592" class="LineNr">3592 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3593" class="LineNr">3593 </span>    5d/pop-to-ebp
<span id="L3594" class="LineNr">3594 </span>    c3/return
<span id="L3595" class="LineNr">3595 </span>
<span id="L3596" class="LineNr">3596 </span><span class="subxTest">test-convert-instruction-handles-0f-opcode</span>:
<span id="L3597" class="LineNr">3597 </span>    <span class="subxComment"># if the instruction starts with 0f opcode, include a second opcode</span>
<span id="L3598" class="LineNr">3598 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3599" class="LineNr">3599 </span>    55/push-ebp
<span id="L3600" class="LineNr">3600 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3601" class="LineNr">3601 </span>    <span class="subxComment"># setup</span>
<span id="L3602" class="LineNr">3602 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3603" class="LineNr">3603 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3604" class="LineNr">3604 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3605" class="LineNr">3605 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3606" class="LineNr">3606 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3607" class="LineNr">3607 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3608" class="LineNr">3608 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3609" class="LineNr">3609 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3610" class="LineNr">3610 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3611" class="LineNr">3611 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3612" class="LineNr">3612 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3613" class="LineNr">3613 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3614" class="LineNr">3614 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3615" class="LineNr">3615 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3616" class="LineNr">3616 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3617" class="LineNr">3617 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3618" class="LineNr">3618 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3619" class="LineNr">3619 </span>    05/add-to-eax  4/imm32
<span id="L3620" class="LineNr">3620 </span>    50/push-eax
<span id="L3621" class="LineNr">3621 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3622" class="LineNr">3622 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3623" class="LineNr">3623 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3624" class="LineNr">3624 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3625" class="LineNr">3625 </span>    <span class="subxComment"># initialize input</span>
<span id="L3626" class="LineNr">3626 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;0f/m1 ab/m2 # comment&quot;)</span>
<span id="L3627" class="LineNr">3627 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3628" class="LineNr">3628 </span>    68/push  <span class="Constant">&quot;0f/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3629" class="LineNr">3629 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3630" class="LineNr">3630 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3631" class="LineNr">3631 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3632" class="LineNr">3632 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3633" class="LineNr">3633 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3634" class="LineNr">3634 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3635" class="LineNr">3635 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3636" class="LineNr">3636 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3637" class="LineNr">3637 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3638" class="LineNr">3638 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3639" class="LineNr">3639 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3640" class="LineNr">3640 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3641" class="LineNr">3641 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3642" class="LineNr">3642 </span>    <span class="subxComment"># check output</span>
<span id="L3643" class="LineNr">3643 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3644" class="LineNr">3644 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3645" class="LineNr">3645 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3646" class="LineNr">3646 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3647" class="LineNr">3647 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3648" class="LineNr">3648 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3649" class="LineNr">3649 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3650" class="Folded">3650 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3676" class="LineNr">3676 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;0f ab  # 0f/m1 ab/m2 # comment&quot;, msg)</span>
<span id="L3677" class="LineNr">3677 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3678" class="LineNr">3678 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-0f-opcode&quot;</span>/imm32
<span id="L3679" class="LineNr">3679 </span>    68/push  <span class="Constant">&quot;0f ab  # 0f/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3680" class="LineNr">3680 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3681" class="LineNr">3681 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3682" class="LineNr">3682 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3683" class="LineNr">3683 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3684" class="LineNr">3684 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3685" class="LineNr">3685 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3686" class="LineNr">3686 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3687" class="LineNr">3687 </span>    5d/pop-to-ebp
<span id="L3688" class="LineNr">3688 </span>    c3/return
<span id="L3689" class="LineNr">3689 </span>
<span id="L3690" class="LineNr">3690 </span><span class="subxTest">test-convert-instruction-handles-f2-opcode</span>:
<span id="L3691" class="LineNr">3691 </span>    <span class="subxComment"># if the instruction starts with f2 opcode, include a second opcode</span>
<span id="L3692" class="LineNr">3692 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3693" class="LineNr">3693 </span>    55/push-ebp
<span id="L3694" class="LineNr">3694 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3695" class="LineNr">3695 </span>    <span class="subxComment"># setup</span>
<span id="L3696" class="LineNr">3696 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3697" class="LineNr">3697 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3698" class="LineNr">3698 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3699" class="LineNr">3699 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3700" class="LineNr">3700 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3701" class="LineNr">3701 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3702" class="LineNr">3702 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3703" class="LineNr">3703 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3704" class="LineNr">3704 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3705" class="LineNr">3705 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3706" class="LineNr">3706 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3707" class="LineNr">3707 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3708" class="LineNr">3708 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3709" class="LineNr">3709 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3710" class="LineNr">3710 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3711" class="LineNr">3711 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3712" class="LineNr">3712 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3713" class="LineNr">3713 </span>    05/add-to-eax  4/imm32
<span id="L3714" class="LineNr">3714 </span>    50/push-eax
<span id="L3715" class="LineNr">3715 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3716" class="LineNr">3716 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3717" class="LineNr">3717 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3718" class="LineNr">3718 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3719" class="LineNr">3719 </span>    <span class="subxComment"># initialize input</span>
<span id="L3720" class="LineNr">3720 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f2/m1 ab/m2 # comment&quot;)</span>
<span id="L3721" class="LineNr">3721 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3722" class="LineNr">3722 </span>    68/push  <span class="Constant">&quot;f2/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3723" class="LineNr">3723 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3724" class="LineNr">3724 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3725" class="LineNr">3725 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3726" class="LineNr">3726 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3727" class="LineNr">3727 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3728" class="LineNr">3728 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3729" class="LineNr">3729 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3730" class="LineNr">3730 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3731" class="LineNr">3731 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3732" class="LineNr">3732 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3733" class="LineNr">3733 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3734" class="LineNr">3734 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3735" class="LineNr">3735 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3736" class="LineNr">3736 </span>    <span class="subxComment"># check output</span>
<span id="L3737" class="LineNr">3737 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3738" class="LineNr">3738 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3739" class="LineNr">3739 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3740" class="LineNr">3740 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3741" class="LineNr">3741 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3742" class="LineNr">3742 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3743" class="LineNr">3743 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3744" class="Folded">3744 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3770" class="LineNr">3770 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f2 ab  # f2/m1 ab/m2 # comment&quot;, msg)</span>
<span id="L3771" class="LineNr">3771 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3772" class="LineNr">3772 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-f2-opcode&quot;</span>/imm32
<span id="L3773" class="LineNr">3773 </span>    68/push  <span class="Constant">&quot;f2 ab  # f2/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3774" class="LineNr">3774 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3775" class="LineNr">3775 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3776" class="LineNr">3776 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3777" class="LineNr">3777 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3778" class="LineNr">3778 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3779" class="LineNr">3779 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3780" class="LineNr">3780 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3781" class="LineNr">3781 </span>    5d/pop-to-ebp
<span id="L3782" class="LineNr">3782 </span>    c3/return
<span id="L3783" class="LineNr">3783 </span>
<span id="L3784" class="LineNr">3784 </span><span class="subxTest">test-convert-instruction-handles-f3-opcode</span>:
<span id="L3785" class="LineNr">3785 </span>    <span class="subxComment"># if the instruction starts with f3 opcode, include a second opcode</span>
<span id="L3786" class="LineNr">3786 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3787" class="LineNr">3787 </span>    55/push-ebp
<span id="L3788" class="LineNr">3788 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3789" class="LineNr">3789 </span>    <span class="subxComment"># setup</span>
<span id="L3790" class="LineNr">3790 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3791" class="LineNr">3791 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3792" class="LineNr">3792 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3793" class="LineNr">3793 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3794" class="LineNr">3794 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3795" class="LineNr">3795 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3796" class="LineNr">3796 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3797" class="LineNr">3797 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3798" class="LineNr">3798 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3799" class="LineNr">3799 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3800" class="LineNr">3800 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3801" class="LineNr">3801 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3802" class="LineNr">3802 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3803" class="LineNr">3803 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3804" class="LineNr">3804 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3805" class="LineNr">3805 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3806" class="LineNr">3806 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3807" class="LineNr">3807 </span>    05/add-to-eax  4/imm32
<span id="L3808" class="LineNr">3808 </span>    50/push-eax
<span id="L3809" class="LineNr">3809 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3810" class="LineNr">3810 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3811" class="LineNr">3811 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3812" class="LineNr">3812 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3813" class="LineNr">3813 </span>    <span class="subxComment"># initialize input</span>
<span id="L3814" class="LineNr">3814 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f3/m1 ab/m2 # comment&quot;)</span>
<span id="L3815" class="LineNr">3815 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3816" class="LineNr">3816 </span>    68/push  <span class="Constant">&quot;f3/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3817" class="LineNr">3817 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3818" class="LineNr">3818 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3819" class="LineNr">3819 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3820" class="LineNr">3820 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3821" class="LineNr">3821 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3822" class="LineNr">3822 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3823" class="LineNr">3823 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3824" class="LineNr">3824 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3825" class="LineNr">3825 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3826" class="LineNr">3826 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3827" class="LineNr">3827 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3828" class="LineNr">3828 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3829" class="LineNr">3829 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3830" class="LineNr">3830 </span>    <span class="subxComment"># check output</span>
<span id="L3831" class="LineNr">3831 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3832" class="LineNr">3832 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3833" class="LineNr">3833 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3834" class="LineNr">3834 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3835" class="LineNr">3835 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3836" class="LineNr">3836 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3837" class="LineNr">3837 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3838" class="Folded">3838 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3864" class="LineNr">3864 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f3 ab  # f3/m1 ab/m2 # comment&quot;, msg)</span>
<span id="L3865" class="LineNr">3865 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3866" class="LineNr">3866 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-f3-opcode&quot;</span>/imm32
<span id="L3867" class="LineNr">3867 </span>    68/push  <span class="Constant">&quot;f3 ab  # f3/m1 ab/m2 # comment&quot;</span>/imm32
<span id="L3868" class="LineNr">3868 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3869" class="LineNr">3869 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3870" class="LineNr">3870 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3871" class="LineNr">3871 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3872" class="LineNr">3872 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3873" class="LineNr">3873 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3874" class="LineNr">3874 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3875" class="LineNr">3875 </span>    5d/pop-to-ebp
<span id="L3876" class="LineNr">3876 </span>    c3/return
<span id="L3877" class="LineNr">3877 </span>
<span id="L3878" class="LineNr">3878 </span><span class="subxTest">test-convert-instruction-handles-f2-0f-opcode</span>:
<span id="L3879" class="LineNr">3879 </span>    <span class="subxComment"># if the instruction starts with f2 0f opcode, include a second opcode</span>
<span id="L3880" class="LineNr">3880 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3881" class="LineNr">3881 </span>    55/push-ebp
<span id="L3882" class="LineNr">3882 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3883" class="LineNr">3883 </span>    <span class="subxComment"># setup</span>
<span id="L3884" class="LineNr">3884 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3885" class="LineNr">3885 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3886" class="LineNr">3886 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3887" class="LineNr">3887 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3888" class="LineNr">3888 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3889" class="LineNr">3889 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3890" class="LineNr">3890 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3891" class="LineNr">3891 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3892" class="LineNr">3892 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3893" class="LineNr">3893 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3894" class="LineNr">3894 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3895" class="LineNr">3895 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3896" class="LineNr">3896 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3897" class="LineNr">3897 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3898" class="LineNr">3898 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3899" class="LineNr">3899 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3900" class="LineNr">3900 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3901" class="LineNr">3901 </span>    05/add-to-eax  4/imm32
<span id="L3902" class="LineNr">3902 </span>    50/push-eax
<span id="L3903" class="LineNr">3903 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3904" class="LineNr">3904 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3905" class="LineNr">3905 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3906" class="LineNr">3906 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3907" class="LineNr">3907 </span>    <span class="subxComment"># initialize input</span>
<span id="L3908" class="LineNr">3908 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f2/m1 0f/m2 ab/m3 # comment&quot;)</span>
<span id="L3909" class="LineNr">3909 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3910" class="LineNr">3910 </span>    68/push  <span class="Constant">&quot;f2/m1 0f/m2 ab/m3 # comment&quot;</span>/imm32
<span id="L3911" class="LineNr">3911 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3912" class="LineNr">3912 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3913" class="LineNr">3913 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L3914" class="LineNr">3914 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3915" class="LineNr">3915 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3916" class="LineNr">3916 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L3917" class="LineNr">3917 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3918" class="LineNr">3918 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3919" class="LineNr">3919 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3920" class="LineNr">3920 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3921" class="LineNr">3921 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L3922" class="LineNr">3922 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3923" class="LineNr">3923 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L3924" class="LineNr">3924 </span>    <span class="subxComment"># check output</span>
<span id="L3925" class="LineNr">3925 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L3926" class="LineNr">3926 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3927" class="LineNr">3927 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3928" class="LineNr">3928 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3929" class="LineNr">3929 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L3930" class="LineNr">3930 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3931" class="LineNr">3931 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3932" class="Folded">3932 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L3958" class="LineNr">3958 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f2 0f ab  # f2/m1 0f/m2 ab/m3 # comment&quot;, msg)</span>
<span id="L3959" class="LineNr">3959 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3960" class="LineNr">3960 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-f2-0f-opcode&quot;</span>/imm32
<span id="L3961" class="LineNr">3961 </span>    68/push  <span class="Constant">&quot;f2 0f ab  # f2/m1 0f/m2 ab/m3 # comment&quot;</span>/imm32
<span id="L3962" class="LineNr">3962 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3963" class="LineNr">3963 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3964" class="LineNr">3964 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L3965" class="LineNr">3965 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3966" class="LineNr">3966 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L3967" class="LineNr">3967 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L3968" class="LineNr">3968 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L3969" class="LineNr">3969 </span>    5d/pop-to-ebp
<span id="L3970" class="LineNr">3970 </span>    c3/return
<span id="L3971" class="LineNr">3971 </span>
<span id="L3972" class="LineNr">3972 </span><span class="subxTest">test-convert-instruction-handles-f3-0f-opcode</span>:
<span id="L3973" class="LineNr">3973 </span>    <span class="subxComment"># if the instruction starts with f3 0f opcode, include a second opcode</span>
<span id="L3974" class="LineNr">3974 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L3975" class="LineNr">3975 </span>    55/push-ebp
<span id="L3976" class="LineNr">3976 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L3977" class="LineNr">3977 </span>    <span class="subxComment"># setup</span>
<span id="L3978" class="LineNr">3978 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L3979" class="LineNr">3979 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3980" class="LineNr">3980 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L3981" class="LineNr">3981 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3982" class="LineNr">3982 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3983" class="LineNr">3983 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3984" class="LineNr">3984 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3985" class="LineNr">3985 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L3986" class="LineNr">3986 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3987" class="LineNr">3987 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L3988" class="LineNr">3988 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3989" class="LineNr">3989 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3990" class="LineNr">3990 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L3991" class="LineNr">3991 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L3992" class="LineNr">3992 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L3993" class="LineNr">3993 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L3994" class="LineNr">3994 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L3995" class="LineNr">3995 </span>    05/add-to-eax  4/imm32
<span id="L3996" class="LineNr">3996 </span>    50/push-eax
<span id="L3997" class="LineNr">3997 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L3998" class="LineNr">3998 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L3999" class="LineNr">3999 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4000" class="LineNr">4000 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4001" class="LineNr">4001 </span>    <span class="subxComment"># initialize input</span>
<span id="L4002" class="LineNr">4002 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f3/m1 0f/m2 ab/m3 # comment&quot;)</span>
<span id="L4003" class="LineNr">4003 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4004" class="LineNr">4004 </span>    68/push  <span class="Constant">&quot;f3/m1 0f/m2 ab/m3 # comment&quot;</span>/imm32
<span id="L4005" class="LineNr">4005 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4006" class="LineNr">4006 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4007" class="LineNr">4007 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4008" class="LineNr">4008 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4009" class="LineNr">4009 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4010" class="LineNr">4010 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4011" class="LineNr">4011 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4012" class="LineNr">4012 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4013" class="LineNr">4013 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4014" class="LineNr">4014 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4015" class="LineNr">4015 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4016" class="LineNr">4016 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4017" class="LineNr">4017 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4018" class="LineNr">4018 </span>    <span class="subxComment"># check output</span>
<span id="L4019" class="LineNr">4019 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4020" class="LineNr">4020 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4021" class="LineNr">4021 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4022" class="LineNr">4022 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4023" class="LineNr">4023 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4024" class="LineNr">4024 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4025" class="LineNr">4025 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4026" class="Folded">4026 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4052" class="LineNr">4052 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f3 0f ab  # f3/m1 0f/m2 ab/m3 # comment&quot;, msg)</span>
<span id="L4053" class="LineNr">4053 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4054" class="LineNr">4054 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-f3-0f-opcode&quot;</span>/imm32
<span id="L4055" class="LineNr">4055 </span>    68/push  <span class="Constant">&quot;f3 0f ab  # f3/m1 0f/m2 ab/m3 # comment&quot;</span>/imm32
<span id="L4056" class="LineNr">4056 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4057" class="LineNr">4057 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4058" class="LineNr">4058 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4059" class="LineNr">4059 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4060" class="LineNr">4060 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4061" class="LineNr">4061 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4062" class="LineNr">4062 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4063" class="LineNr">4063 </span>    5d/pop-to-ebp
<span id="L4064" class="LineNr">4064 </span>    c3/return
<span id="L4065" class="LineNr">4065 </span>
<span id="L4066" class="LineNr">4066 </span><span class="subxTest">test-convert-instruction-handles-unused-opcodes</span>:
<span id="L4067" class="LineNr">4067 </span>    <span class="subxComment"># if the instruction doesn't start with f2, f3 or 0f, don't include other opcodes</span>
<span id="L4068" class="LineNr">4068 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4069" class="LineNr">4069 </span>    55/push-ebp
<span id="L4070" class="LineNr">4070 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4071" class="LineNr">4071 </span>    <span class="subxComment"># setup</span>
<span id="L4072" class="LineNr">4072 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4073" class="LineNr">4073 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4074" class="LineNr">4074 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4075" class="LineNr">4075 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4076" class="LineNr">4076 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4077" class="LineNr">4077 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4078" class="LineNr">4078 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4079" class="LineNr">4079 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4080" class="LineNr">4080 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4081" class="LineNr">4081 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4082" class="LineNr">4082 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4083" class="LineNr">4083 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4084" class="LineNr">4084 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4085" class="LineNr">4085 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4086" class="LineNr">4086 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4087" class="LineNr">4087 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4088" class="LineNr">4088 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4089" class="LineNr">4089 </span>    05/add-to-eax  4/imm32
<span id="L4090" class="LineNr">4090 </span>    50/push-eax
<span id="L4091" class="LineNr">4091 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4092" class="LineNr">4092 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4093" class="LineNr">4093 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4094" class="LineNr">4094 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4095" class="LineNr">4095 </span>    <span class="subxComment"># initialize input</span>
<span id="L4096" class="LineNr">4096 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;ab/m1 cd/m2 # comment&quot;)</span>
<span id="L4097" class="LineNr">4097 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4098" class="LineNr">4098 </span>    68/push  <span class="Constant">&quot;ab/m1 cd/m2 # comment&quot;</span>/imm32
<span id="L4099" class="LineNr">4099 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4100" class="LineNr">4100 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4101" class="LineNr">4101 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4102" class="LineNr">4102 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4103" class="LineNr">4103 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4104" class="LineNr">4104 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4105" class="LineNr">4105 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4106" class="LineNr">4106 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4107" class="LineNr">4107 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4108" class="LineNr">4108 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4109" class="LineNr">4109 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4110" class="LineNr">4110 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4111" class="LineNr">4111 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4112" class="LineNr">4112 </span>    <span class="subxComment"># check output</span>
<span id="L4113" class="LineNr">4113 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4114" class="LineNr">4114 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4115" class="LineNr">4115 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4116" class="LineNr">4116 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4117" class="LineNr">4117 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4118" class="LineNr">4118 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4119" class="LineNr">4119 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4120" class="Folded">4120 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4146" class="LineNr">4146 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;ab  # f3/m1 0f/m2 ab/m3 # comment&quot;, msg)</span>
<span id="L4147" class="LineNr">4147 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4148" class="LineNr">4148 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-unused-opcodes&quot;</span>/imm32
<span id="L4149" class="LineNr">4149 </span>    68/push  <span class="Constant">&quot;ab  # ab/m1 cd/m2 # comment&quot;</span>/imm32
<span id="L4150" class="LineNr">4150 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4151" class="LineNr">4151 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4152" class="LineNr">4152 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4153" class="LineNr">4153 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4154" class="LineNr">4154 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4155" class="LineNr">4155 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4156" class="LineNr">4156 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4157" class="LineNr">4157 </span>    5d/pop-to-ebp
<span id="L4158" class="LineNr">4158 </span>    c3/return
<span id="L4159" class="LineNr">4159 </span>
<span id="L4160" class="LineNr">4160 </span><span class="subxTest">test-convert-instruction-handles-unused-second-opcodes</span>:
<span id="L4161" class="LineNr">4161 </span>    <span class="subxComment"># if the second opcode isn't 0f, don't include further opcodes</span>
<span id="L4162" class="LineNr">4162 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4163" class="LineNr">4163 </span>    55/push-ebp
<span id="L4164" class="LineNr">4164 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4165" class="LineNr">4165 </span>    <span class="subxComment"># setup</span>
<span id="L4166" class="LineNr">4166 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4167" class="LineNr">4167 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4168" class="LineNr">4168 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4169" class="LineNr">4169 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4170" class="LineNr">4170 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4171" class="LineNr">4171 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4172" class="LineNr">4172 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4173" class="LineNr">4173 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4174" class="LineNr">4174 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4175" class="LineNr">4175 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4176" class="LineNr">4176 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4177" class="LineNr">4177 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4178" class="LineNr">4178 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4179" class="LineNr">4179 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4180" class="LineNr">4180 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4181" class="LineNr">4181 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4182" class="LineNr">4182 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4183" class="LineNr">4183 </span>    05/add-to-eax  4/imm32
<span id="L4184" class="LineNr">4184 </span>    50/push-eax
<span id="L4185" class="LineNr">4185 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4186" class="LineNr">4186 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4187" class="LineNr">4187 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4188" class="LineNr">4188 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4189" class="LineNr">4189 </span>    <span class="subxComment"># initialize input</span>
<span id="L4190" class="LineNr">4190 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f2/m1 ab/m2 cd/m3 # comment&quot;)</span>
<span id="L4191" class="LineNr">4191 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4192" class="LineNr">4192 </span>    68/push  <span class="Constant">&quot;f2/m1 ab/m2 cd/m3 # comment&quot;</span>/imm32
<span id="L4193" class="LineNr">4193 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4194" class="LineNr">4194 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4195" class="LineNr">4195 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4196" class="LineNr">4196 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4197" class="LineNr">4197 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4198" class="LineNr">4198 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4199" class="LineNr">4199 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4200" class="LineNr">4200 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4201" class="LineNr">4201 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4202" class="LineNr">4202 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4203" class="LineNr">4203 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4204" class="LineNr">4204 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4205" class="LineNr">4205 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4206" class="LineNr">4206 </span>    <span class="subxComment"># check output</span>
<span id="L4207" class="LineNr">4207 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4208" class="LineNr">4208 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4209" class="LineNr">4209 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4210" class="LineNr">4210 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4211" class="LineNr">4211 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4212" class="LineNr">4212 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4213" class="LineNr">4213 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4214" class="Folded">4214 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4240" class="LineNr">4240 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f2 ab  # f2/m1 ab/m2 cd/m3 # comment&quot;, msg)</span>
<span id="L4241" class="LineNr">4241 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4242" class="LineNr">4242 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-unused-second-opcodes&quot;</span>/imm32
<span id="L4243" class="LineNr">4243 </span>    68/push  <span class="Constant">&quot;f2 ab  # f2/m1 ab/m2 cd/m3 # comment&quot;</span>/imm32
<span id="L4244" class="LineNr">4244 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4245" class="LineNr">4245 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4246" class="LineNr">4246 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4247" class="LineNr">4247 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4248" class="LineNr">4248 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4249" class="LineNr">4249 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4250" class="LineNr">4250 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4251" class="LineNr">4251 </span>    5d/pop-to-ebp
<span id="L4252" class="LineNr">4252 </span>    c3/return
<span id="L4253" class="LineNr">4253 </span>
<span id="L4254" class="LineNr">4254 </span><span class="subxTest">test-convert-instruction-handles-unused-second-opcodes-2</span>:
<span id="L4255" class="LineNr">4255 </span>    <span class="subxComment"># if the second opcode isn't 0f, don't include further opcodes</span>
<span id="L4256" class="LineNr">4256 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4257" class="LineNr">4257 </span>    55/push-ebp
<span id="L4258" class="LineNr">4258 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4259" class="LineNr">4259 </span>    <span class="subxComment"># setup</span>
<span id="L4260" class="LineNr">4260 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4261" class="LineNr">4261 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4262" class="LineNr">4262 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4263" class="LineNr">4263 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4264" class="LineNr">4264 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4265" class="LineNr">4265 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4266" class="LineNr">4266 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4267" class="LineNr">4267 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4268" class="LineNr">4268 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4269" class="LineNr">4269 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4270" class="LineNr">4270 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4271" class="LineNr">4271 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4272" class="LineNr">4272 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4273" class="LineNr">4273 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4274" class="LineNr">4274 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4275" class="LineNr">4275 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4276" class="LineNr">4276 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4277" class="LineNr">4277 </span>    05/add-to-eax  4/imm32
<span id="L4278" class="LineNr">4278 </span>    50/push-eax
<span id="L4279" class="LineNr">4279 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4280" class="LineNr">4280 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4281" class="LineNr">4281 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4282" class="LineNr">4282 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4283" class="LineNr">4283 </span>    <span class="subxComment"># initialize input</span>
<span id="L4284" class="LineNr">4284 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;f3/m1 ab/m2 cd/m3 # comment&quot;)</span>
<span id="L4285" class="LineNr">4285 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4286" class="LineNr">4286 </span>    68/push  <span class="Constant">&quot;f3/m1 ab/m2 cd/m3 # comment&quot;</span>/imm32
<span id="L4287" class="LineNr">4287 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4288" class="LineNr">4288 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4289" class="LineNr">4289 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4290" class="LineNr">4290 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4291" class="LineNr">4291 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4292" class="LineNr">4292 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4293" class="LineNr">4293 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4294" class="LineNr">4294 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4295" class="LineNr">4295 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4296" class="LineNr">4296 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4297" class="LineNr">4297 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4298" class="LineNr">4298 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4299" class="LineNr">4299 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4300" class="LineNr">4300 </span>    <span class="subxComment"># check output</span>
<span id="L4301" class="LineNr">4301 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4302" class="LineNr">4302 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4303" class="LineNr">4303 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4304" class="LineNr">4304 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4305" class="LineNr">4305 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4306" class="LineNr">4306 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4307" class="LineNr">4307 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4308" class="Folded">4308 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4334" class="LineNr">4334 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;f3 ab  # f3/m1 ab/m2 cd/m3 # comment&quot;, msg)</span>
<span id="L4335" class="LineNr">4335 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4336" class="LineNr">4336 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-unused-second-opcodes&quot;</span>/imm32
<span id="L4337" class="LineNr">4337 </span>    68/push  <span class="Constant">&quot;f3 ab  # f3/m1 ab/m2 cd/m3 # comment&quot;</span>/imm32
<span id="L4338" class="LineNr">4338 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4339" class="LineNr">4339 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4340" class="LineNr">4340 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4341" class="LineNr">4341 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4342" class="LineNr">4342 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4343" class="LineNr">4343 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4344" class="LineNr">4344 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4345" class="LineNr">4345 </span>    5d/pop-to-ebp
<span id="L4346" class="LineNr">4346 </span>    c3/return
<span id="L4347" class="LineNr">4347 </span>
<span id="L4348" class="LineNr">4348 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte</span>:
<span id="L4349" class="LineNr">4349 </span>    <span class="subxComment"># pack mod, rm32 and r32 operands into ModR/M byte</span>
<span id="L4350" class="LineNr">4350 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4351" class="LineNr">4351 </span>    55/push-ebp
<span id="L4352" class="LineNr">4352 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4353" class="LineNr">4353 </span>    <span class="subxComment"># setup</span>
<span id="L4354" class="LineNr">4354 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4355" class="LineNr">4355 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4356" class="LineNr">4356 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4357" class="LineNr">4357 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4358" class="LineNr">4358 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4359" class="LineNr">4359 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4360" class="LineNr">4360 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4361" class="LineNr">4361 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4362" class="LineNr">4362 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4363" class="LineNr">4363 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4364" class="LineNr">4364 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4365" class="LineNr">4365 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4366" class="LineNr">4366 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4367" class="LineNr">4367 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4368" class="LineNr">4368 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4369" class="LineNr">4369 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4370" class="LineNr">4370 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4371" class="LineNr">4371 </span>    05/add-to-eax  4/imm32
<span id="L4372" class="LineNr">4372 </span>    50/push-eax
<span id="L4373" class="LineNr">4373 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4374" class="LineNr">4374 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4375" class="LineNr">4375 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4376" class="LineNr">4376 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4377" class="LineNr">4377 </span>    <span class="subxComment"># initialize input</span>
<span id="L4378" class="LineNr">4378 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 0/rm32 1/r32&quot;)</span>
<span id="L4379" class="LineNr">4379 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4380" class="LineNr">4380 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 0/rm32 1/r32&quot;</span>/imm32
<span id="L4381" class="LineNr">4381 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4382" class="LineNr">4382 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4383" class="LineNr">4383 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4384" class="LineNr">4384 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4385" class="LineNr">4385 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4386" class="LineNr">4386 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4387" class="LineNr">4387 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4388" class="LineNr">4388 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4389" class="LineNr">4389 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4390" class="LineNr">4390 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4391" class="LineNr">4391 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4392" class="LineNr">4392 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4393" class="LineNr">4393 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4394" class="LineNr">4394 </span>    <span class="subxComment"># check output</span>
<span id="L4395" class="LineNr">4395 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4396" class="LineNr">4396 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4397" class="LineNr">4397 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4398" class="LineNr">4398 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4399" class="LineNr">4399 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4400" class="LineNr">4400 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4401" class="LineNr">4401 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4402" class="Folded">4402 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4428" class="LineNr">4428 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 08  # 8b/copy 0/mod 0/rm32 1/r32&quot;, msg)</span>
<span id="L4429" class="LineNr">4429 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4430" class="LineNr">4430 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-modrm-byte&quot;</span>/imm32
<span id="L4431" class="LineNr">4431 </span>    68/push  <span class="Constant">&quot;8b 08  # 8b/copy 0/mod 0/rm32 1/r32&quot;</span>/imm32
<span id="L4432" class="LineNr">4432 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4433" class="LineNr">4433 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4434" class="LineNr">4434 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4435" class="LineNr">4435 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4436" class="LineNr">4436 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4437" class="LineNr">4437 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4438" class="LineNr">4438 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4439" class="LineNr">4439 </span>    5d/pop-to-ebp
<span id="L4440" class="LineNr">4440 </span>    c3/return
<span id="L4441" class="LineNr">4441 </span>
<span id="L4442" class="LineNr">4442 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte-with-non-zero-mod</span>:
<span id="L4443" class="LineNr">4443 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4444" class="LineNr">4444 </span>    55/push-ebp
<span id="L4445" class="LineNr">4445 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4446" class="LineNr">4446 </span>    <span class="subxComment"># setup</span>
<span id="L4447" class="LineNr">4447 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4448" class="LineNr">4448 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4449" class="LineNr">4449 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4450" class="LineNr">4450 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4451" class="LineNr">4451 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4452" class="LineNr">4452 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4453" class="LineNr">4453 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4454" class="LineNr">4454 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4455" class="LineNr">4455 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4456" class="LineNr">4456 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4457" class="LineNr">4457 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4458" class="LineNr">4458 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4459" class="LineNr">4459 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4460" class="LineNr">4460 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4461" class="LineNr">4461 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4462" class="LineNr">4462 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4463" class="LineNr">4463 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4464" class="LineNr">4464 </span>    05/add-to-eax  4/imm32
<span id="L4465" class="LineNr">4465 </span>    50/push-eax
<span id="L4466" class="LineNr">4466 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4467" class="LineNr">4467 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4468" class="LineNr">4468 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4469" class="LineNr">4469 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4470" class="LineNr">4470 </span>    <span class="subxComment"># initialize input</span>
<span id="L4471" class="LineNr">4471 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;01/add 3/mod/direct 3/rm32/ebx 1/r32/ecx&quot;)</span>
<span id="L4472" class="LineNr">4472 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4473" class="LineNr">4473 </span>    68/push  <span class="Constant">&quot;01/add 3/mod/direct 3/rm32/ebx 1/r32/ecx&quot;</span>/imm32
<span id="L4474" class="LineNr">4474 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4475" class="LineNr">4475 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4476" class="LineNr">4476 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4477" class="LineNr">4477 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4478" class="LineNr">4478 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4479" class="LineNr">4479 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4480" class="LineNr">4480 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4481" class="LineNr">4481 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4482" class="LineNr">4482 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4483" class="LineNr">4483 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4484" class="LineNr">4484 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4485" class="LineNr">4485 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4486" class="LineNr">4486 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4487" class="LineNr">4487 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4488" class="LineNr">4488 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4489" class="LineNr">4489 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4490" class="LineNr">4490 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4491" class="LineNr">4491 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4492" class="LineNr">4492 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4493" class="LineNr">4493 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4494" class="Folded">4494 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4520" class="LineNr">4520 </span>    <span class="subxComment"># check output</span>
<span id="L4521" class="LineNr">4521 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;# abcd&quot;, msg)</span>
<span id="L4522" class="LineNr">4522 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4523" class="LineNr">4523 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-foo&quot;</span>/imm32
<span id="L4524" class="LineNr">4524 </span>    68/push  <span class="Constant">&quot;01 cb  # 01/add 3/mod/direct 3/rm32/ebx 1/r32/ecx&quot;</span>/imm32
<span id="L4525" class="LineNr">4525 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4526" class="LineNr">4526 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4527" class="LineNr">4527 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4528" class="LineNr">4528 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4529" class="LineNr">4529 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4530" class="LineNr">4530 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4531" class="LineNr">4531 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4532" class="LineNr">4532 </span>    5d/pop-to-ebp
<span id="L4533" class="LineNr">4533 </span>    c3/return
<span id="L4534" class="LineNr">4534 </span>
<span id="L4535" class="LineNr">4535 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte-from-subop</span>:
<span id="L4536" class="LineNr">4536 </span>    <span class="subxComment"># pack mod, rm32 and subop operands into ModR/M byte</span>
<span id="L4537" class="LineNr">4537 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4538" class="LineNr">4538 </span>    55/push-ebp
<span id="L4539" class="LineNr">4539 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4540" class="LineNr">4540 </span>    <span class="subxComment"># setup</span>
<span id="L4541" class="LineNr">4541 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4542" class="LineNr">4542 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4543" class="LineNr">4543 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4544" class="LineNr">4544 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4545" class="LineNr">4545 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4546" class="LineNr">4546 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4547" class="LineNr">4547 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4548" class="LineNr">4548 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4549" class="LineNr">4549 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4550" class="LineNr">4550 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4551" class="LineNr">4551 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4552" class="LineNr">4552 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4553" class="LineNr">4553 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4554" class="LineNr">4554 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4555" class="LineNr">4555 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4556" class="LineNr">4556 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4557" class="LineNr">4557 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4558" class="LineNr">4558 </span>    05/add-to-eax  4/imm32
<span id="L4559" class="LineNr">4559 </span>    50/push-eax
<span id="L4560" class="LineNr">4560 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4561" class="LineNr">4561 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4562" class="LineNr">4562 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4563" class="LineNr">4563 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4564" class="LineNr">4564 </span>    <span class="subxComment"># initialize input</span>
<span id="L4565" class="LineNr">4565 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;ff 6/subop/push 0/mod 0/rm32&quot;)</span>
<span id="L4566" class="LineNr">4566 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4567" class="LineNr">4567 </span>    68/push  <span class="Constant">&quot;ff 6/subop/push 0/mod 0/rm32&quot;</span>/imm32
<span id="L4568" class="LineNr">4568 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4569" class="LineNr">4569 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4570" class="LineNr">4570 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4571" class="LineNr">4571 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4572" class="LineNr">4572 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4573" class="LineNr">4573 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4574" class="LineNr">4574 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4575" class="LineNr">4575 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4576" class="LineNr">4576 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4577" class="LineNr">4577 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4578" class="LineNr">4578 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4579" class="LineNr">4579 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4580" class="LineNr">4580 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4581" class="LineNr">4581 </span>    <span class="subxComment"># check output</span>
<span id="L4582" class="LineNr">4582 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4583" class="LineNr">4583 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4584" class="LineNr">4584 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4585" class="LineNr">4585 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4586" class="LineNr">4586 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4587" class="LineNr">4587 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4588" class="LineNr">4588 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4589" class="Folded">4589 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4615" class="LineNr">4615 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;ff 30  # ff 6/subop/push 0/mod 0/rm32&quot;, msg)</span>
<span id="L4616" class="LineNr">4616 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4617" class="LineNr">4617 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-modrm-byte-from-subop&quot;</span>/imm32
<span id="L4618" class="LineNr">4618 </span>    68/push  <span class="Constant">&quot;ff 30  # ff 6/subop/push 0/mod 0/rm32&quot;</span>/imm32
<span id="L4619" class="LineNr">4619 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4620" class="LineNr">4620 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4621" class="LineNr">4621 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4622" class="LineNr">4622 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4623" class="LineNr">4623 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4624" class="LineNr">4624 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4625" class="LineNr">4625 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4626" class="LineNr">4626 </span>    5d/pop-to-ebp
<span id="L4627" class="LineNr">4627 </span>    c3/return
<span id="L4628" class="LineNr">4628 </span>
<span id="L4629" class="LineNr">4629 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte-with-missing-mod</span>:
<span id="L4630" class="LineNr">4630 </span>    <span class="subxComment"># pack rm32 and r32 operands into ModR/M byte</span>
<span id="L4631" class="LineNr">4631 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4632" class="LineNr">4632 </span>    55/push-ebp
<span id="L4633" class="LineNr">4633 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4634" class="LineNr">4634 </span>    <span class="subxComment"># setup</span>
<span id="L4635" class="LineNr">4635 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4636" class="LineNr">4636 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4637" class="LineNr">4637 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4638" class="LineNr">4638 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4639" class="LineNr">4639 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4640" class="LineNr">4640 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4641" class="LineNr">4641 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4642" class="LineNr">4642 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4643" class="LineNr">4643 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4644" class="LineNr">4644 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4645" class="LineNr">4645 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4646" class="LineNr">4646 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4647" class="LineNr">4647 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4648" class="LineNr">4648 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4649" class="LineNr">4649 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4650" class="LineNr">4650 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4651" class="LineNr">4651 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4652" class="LineNr">4652 </span>    05/add-to-eax  4/imm32
<span id="L4653" class="LineNr">4653 </span>    50/push-eax
<span id="L4654" class="LineNr">4654 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4655" class="LineNr">4655 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4656" class="LineNr">4656 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4657" class="LineNr">4657 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4658" class="LineNr">4658 </span>    <span class="subxComment"># initialize input</span>
<span id="L4659" class="LineNr">4659 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/rm32 1/r32&quot;)</span>
<span id="L4660" class="LineNr">4660 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4661" class="LineNr">4661 </span>    68/push  <span class="Constant">&quot;8b/copy 0/rm32 1/r32&quot;</span>/imm32
<span id="L4662" class="LineNr">4662 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4663" class="LineNr">4663 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4664" class="LineNr">4664 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4665" class="LineNr">4665 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4666" class="LineNr">4666 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4667" class="LineNr">4667 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4668" class="LineNr">4668 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4669" class="LineNr">4669 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4670" class="LineNr">4670 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4671" class="LineNr">4671 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4672" class="LineNr">4672 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4673" class="LineNr">4673 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4674" class="LineNr">4674 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4675" class="LineNr">4675 </span>    <span class="subxComment"># check output</span>
<span id="L4676" class="LineNr">4676 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4677" class="LineNr">4677 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4678" class="LineNr">4678 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4679" class="LineNr">4679 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4680" class="LineNr">4680 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4681" class="LineNr">4681 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4682" class="LineNr">4682 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4683" class="Folded">4683 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4709" class="LineNr">4709 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 08  # 8b/copy 0/rm32 1/r32&quot;, msg)</span>
<span id="L4710" class="LineNr">4710 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4711" class="LineNr">4711 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-modrm-byte-with-missing-mod&quot;</span>/imm32
<span id="L4712" class="LineNr">4712 </span>    68/push  <span class="Constant">&quot;8b 08  # 8b/copy 0/rm32 1/r32&quot;</span>/imm32
<span id="L4713" class="LineNr">4713 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4714" class="LineNr">4714 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4715" class="LineNr">4715 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4716" class="LineNr">4716 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4717" class="LineNr">4717 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4718" class="LineNr">4718 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4719" class="LineNr">4719 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4720" class="LineNr">4720 </span>    5d/pop-to-ebp
<span id="L4721" class="LineNr">4721 </span>    c3/return
<span id="L4722" class="LineNr">4722 </span>
<span id="L4723" class="LineNr">4723 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte-with-missing-rm32</span>:
<span id="L4724" class="LineNr">4724 </span>    <span class="subxComment"># pack mod and r32 operands into ModR/M byte</span>
<span id="L4725" class="LineNr">4725 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4726" class="LineNr">4726 </span>    55/push-ebp
<span id="L4727" class="LineNr">4727 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4728" class="LineNr">4728 </span>    <span class="subxComment"># setup</span>
<span id="L4729" class="LineNr">4729 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4730" class="LineNr">4730 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4731" class="LineNr">4731 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4732" class="LineNr">4732 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4733" class="LineNr">4733 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4734" class="LineNr">4734 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4735" class="LineNr">4735 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4736" class="LineNr">4736 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4737" class="LineNr">4737 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4738" class="LineNr">4738 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4739" class="LineNr">4739 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4740" class="LineNr">4740 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4741" class="LineNr">4741 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4742" class="LineNr">4742 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4743" class="LineNr">4743 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4744" class="LineNr">4744 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4745" class="LineNr">4745 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4746" class="LineNr">4746 </span>    05/add-to-eax  4/imm32
<span id="L4747" class="LineNr">4747 </span>    50/push-eax
<span id="L4748" class="LineNr">4748 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4749" class="LineNr">4749 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4750" class="LineNr">4750 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4751" class="LineNr">4751 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4752" class="LineNr">4752 </span>    <span class="subxComment"># initialize input</span>
<span id="L4753" class="LineNr">4753 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 1/r32&quot;)</span>
<span id="L4754" class="LineNr">4754 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4755" class="LineNr">4755 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 1/r32&quot;</span>/imm32
<span id="L4756" class="LineNr">4756 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4757" class="LineNr">4757 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4758" class="LineNr">4758 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4759" class="LineNr">4759 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4760" class="LineNr">4760 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4761" class="LineNr">4761 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4762" class="LineNr">4762 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4763" class="LineNr">4763 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4764" class="LineNr">4764 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4765" class="LineNr">4765 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4766" class="LineNr">4766 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4767" class="LineNr">4767 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4768" class="LineNr">4768 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4769" class="LineNr">4769 </span>    <span class="subxComment"># check output</span>
<span id="L4770" class="LineNr">4770 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4771" class="LineNr">4771 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4772" class="LineNr">4772 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4773" class="LineNr">4773 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4774" class="LineNr">4774 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4775" class="LineNr">4775 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4776" class="LineNr">4776 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4777" class="Folded">4777 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4803" class="LineNr">4803 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 08  # 8b/copy 0/mod 1/r32&quot;, msg)</span>
<span id="L4804" class="LineNr">4804 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4805" class="LineNr">4805 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-modrm-byte-with-missing-rm32&quot;</span>/imm32
<span id="L4806" class="LineNr">4806 </span>    68/push  <span class="Constant">&quot;8b 08  # 8b/copy 0/mod 1/r32&quot;</span>/imm32
<span id="L4807" class="LineNr">4807 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4808" class="LineNr">4808 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4809" class="LineNr">4809 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4810" class="LineNr">4810 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4811" class="LineNr">4811 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4812" class="LineNr">4812 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4813" class="LineNr">4813 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4814" class="LineNr">4814 </span>    5d/pop-to-ebp
<span id="L4815" class="LineNr">4815 </span>    c3/return
<span id="L4816" class="LineNr">4816 </span>
<span id="L4817" class="LineNr">4817 </span><span class="subxTest">test-convert-instruction-emits-modrm-byte-with-missing-r32</span>:
<span id="L4818" class="LineNr">4818 </span>    <span class="subxComment"># pack mod and rm32 operands into ModR/M byte</span>
<span id="L4819" class="LineNr">4819 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4820" class="LineNr">4820 </span>    55/push-ebp
<span id="L4821" class="LineNr">4821 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4822" class="LineNr">4822 </span>    <span class="subxComment"># setup</span>
<span id="L4823" class="LineNr">4823 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4824" class="LineNr">4824 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4825" class="LineNr">4825 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4826" class="LineNr">4826 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4827" class="LineNr">4827 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4828" class="LineNr">4828 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4829" class="LineNr">4829 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4830" class="LineNr">4830 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4831" class="LineNr">4831 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4832" class="LineNr">4832 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4833" class="LineNr">4833 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4834" class="LineNr">4834 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4835" class="LineNr">4835 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4836" class="LineNr">4836 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4837" class="LineNr">4837 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4838" class="LineNr">4838 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4839" class="LineNr">4839 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4840" class="LineNr">4840 </span>    05/add-to-eax  4/imm32
<span id="L4841" class="LineNr">4841 </span>    50/push-eax
<span id="L4842" class="LineNr">4842 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4843" class="LineNr">4843 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4844" class="LineNr">4844 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4845" class="LineNr">4845 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4846" class="LineNr">4846 </span>    <span class="subxComment"># initialize input</span>
<span id="L4847" class="LineNr">4847 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 0/rm32&quot;)</span>
<span id="L4848" class="LineNr">4848 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4849" class="LineNr">4849 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 0/rm32&quot;</span>/imm32
<span id="L4850" class="LineNr">4850 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4851" class="LineNr">4851 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4852" class="LineNr">4852 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4853" class="LineNr">4853 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4854" class="LineNr">4854 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4855" class="LineNr">4855 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4856" class="LineNr">4856 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4857" class="LineNr">4857 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4858" class="LineNr">4858 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4859" class="LineNr">4859 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4860" class="LineNr">4860 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4861" class="LineNr">4861 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4862" class="LineNr">4862 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4863" class="LineNr">4863 </span>    <span class="subxComment"># check output</span>
<span id="L4864" class="LineNr">4864 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4865" class="LineNr">4865 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4866" class="LineNr">4866 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4867" class="LineNr">4867 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4868" class="LineNr">4868 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4869" class="LineNr">4869 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4870" class="LineNr">4870 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4871" class="Folded">4871 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4897" class="LineNr">4897 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 00  # 8b/copy 0/mod 0/rm32&quot;, msg)</span>
<span id="L4898" class="LineNr">4898 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4899" class="LineNr">4899 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-modrm-byte-with-missing-r32&quot;</span>/imm32
<span id="L4900" class="LineNr">4900 </span>    68/push  <span class="Constant">&quot;8b 00  # 8b/copy 0/mod 0/rm32&quot;</span>/imm32
<span id="L4901" class="LineNr">4901 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4902" class="LineNr">4902 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4903" class="LineNr">4903 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4904" class="LineNr">4904 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4905" class="LineNr">4905 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L4906" class="LineNr">4906 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L4907" class="LineNr">4907 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L4908" class="LineNr">4908 </span>    5d/pop-to-ebp
<span id="L4909" class="LineNr">4909 </span>    c3/return
<span id="L4910" class="LineNr">4910 </span>
<span id="L4911" class="LineNr">4911 </span><span class="subxTest">test-convert-instruction-emits-sib-byte</span>:
<span id="L4912" class="LineNr">4912 </span>    <span class="subxComment"># pack base, index and scale operands into SIB byte</span>
<span id="L4913" class="LineNr">4913 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L4914" class="LineNr">4914 </span>    55/push-ebp
<span id="L4915" class="LineNr">4915 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L4916" class="LineNr">4916 </span>    <span class="subxComment"># setup</span>
<span id="L4917" class="LineNr">4917 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L4918" class="LineNr">4918 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4919" class="LineNr">4919 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4920" class="LineNr">4920 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4921" class="LineNr">4921 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4922" class="LineNr">4922 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4923" class="LineNr">4923 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4924" class="LineNr">4924 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L4925" class="LineNr">4925 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4926" class="LineNr">4926 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4927" class="LineNr">4927 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4928" class="LineNr">4928 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4929" class="LineNr">4929 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4930" class="LineNr">4930 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4931" class="LineNr">4931 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L4932" class="LineNr">4932 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4933" class="LineNr">4933 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4934" class="LineNr">4934 </span>    05/add-to-eax  4/imm32
<span id="L4935" class="LineNr">4935 </span>    50/push-eax
<span id="L4936" class="LineNr">4936 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4937" class="LineNr">4937 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L4938" class="LineNr">4938 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4939" class="LineNr">4939 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4940" class="LineNr">4940 </span>    <span class="subxComment"># initialize input</span>
<span id="L4941" class="LineNr">4941 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 4/rm32 1/r32 0/base 1/index 0/scale&quot;)</span>
<span id="L4942" class="LineNr">4942 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4943" class="LineNr">4943 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 4/rm32 1/r32 0/base 1/index 0/scale&quot;</span>/imm32
<span id="L4944" class="LineNr">4944 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4945" class="LineNr">4945 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4946" class="LineNr">4946 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L4947" class="LineNr">4947 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4948" class="LineNr">4948 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4949" class="LineNr">4949 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L4950" class="LineNr">4950 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4951" class="LineNr">4951 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4952" class="LineNr">4952 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L4953" class="LineNr">4953 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4954" class="LineNr">4954 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L4955" class="LineNr">4955 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4956" class="LineNr">4956 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L4957" class="LineNr">4957 </span>    <span class="subxComment"># check output</span>
<span id="L4958" class="LineNr">4958 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L4959" class="LineNr">4959 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4960" class="LineNr">4960 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L4961" class="LineNr">4961 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4962" class="LineNr">4962 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L4963" class="LineNr">4963 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4964" class="LineNr">4964 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L4965" class="Folded">4965 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L4991" class="LineNr">4991 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 08  # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index 0/scale&quot;, msg)</span>
<span id="L4992" class="LineNr">4992 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L4993" class="LineNr">4993 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-sib-byte&quot;</span>/imm32
<span id="L4994" class="LineNr">4994 </span>    68/push  <span class="Constant">&quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index 0/scale&quot;</span>/imm32
<span id="L4995" class="LineNr">4995 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L4996" class="LineNr">4996 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L4997" class="LineNr">4997 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L4998" class="LineNr">4998 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L4999" class="LineNr">4999 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5000" class="LineNr">5000 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5001" class="LineNr">5001 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5002" class="LineNr">5002 </span>    5d/pop-to-ebp
<span id="L5003" class="LineNr">5003 </span>    c3/return
<span id="L5004" class="LineNr">5004 </span>
<span id="L5005" class="LineNr">5005 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-base</span>:
<span id="L5006" class="LineNr">5006 </span>    <span class="subxComment"># pack index and scale operands into SIB byte</span>
<span id="L5007" class="LineNr">5007 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5008" class="LineNr">5008 </span>    55/push-ebp
<span id="L5009" class="LineNr">5009 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5010" class="LineNr">5010 </span>    <span class="subxComment"># setup</span>
<span id="L5011" class="LineNr">5011 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5012" class="LineNr">5012 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5013" class="LineNr">5013 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5014" class="LineNr">5014 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5015" class="LineNr">5015 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5016" class="LineNr">5016 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5017" class="LineNr">5017 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5018" class="LineNr">5018 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5019" class="LineNr">5019 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5020" class="LineNr">5020 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5021" class="LineNr">5021 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5022" class="LineNr">5022 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5023" class="LineNr">5023 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5024" class="LineNr">5024 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5025" class="LineNr">5025 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5026" class="LineNr">5026 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5027" class="LineNr">5027 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5028" class="LineNr">5028 </span>    05/add-to-eax  4/imm32
<span id="L5029" class="LineNr">5029 </span>    50/push-eax
<span id="L5030" class="LineNr">5030 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5031" class="LineNr">5031 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5032" class="LineNr">5032 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5033" class="LineNr">5033 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5034" class="LineNr">5034 </span>    <span class="subxComment"># initialize input</span>
<span id="L5035" class="LineNr">5035 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale&quot;)</span>
<span id="L5036" class="LineNr">5036 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5037" class="LineNr">5037 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale&quot;</span>/imm32
<span id="L5038" class="LineNr">5038 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5039" class="LineNr">5039 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5040" class="LineNr">5040 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5041" class="LineNr">5041 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5042" class="LineNr">5042 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5043" class="LineNr">5043 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5044" class="LineNr">5044 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5045" class="LineNr">5045 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5046" class="LineNr">5046 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5047" class="LineNr">5047 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5048" class="LineNr">5048 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5049" class="LineNr">5049 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5050" class="LineNr">5050 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5051" class="LineNr">5051 </span>    <span class="subxComment"># check output</span>
<span id="L5052" class="LineNr">5052 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5053" class="LineNr">5053 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5054" class="LineNr">5054 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5055" class="LineNr">5055 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5056" class="LineNr">5056 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5057" class="LineNr">5057 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5058" class="LineNr">5058 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5059" class="Folded">5059 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5085" class="LineNr">5085 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale&quot;, msg)</span>
<span id="L5086" class="LineNr">5086 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5087" class="LineNr">5087 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-sib-byte-with-missing-base&quot;</span>/imm32
<span id="L5088" class="LineNr">5088 </span>    68/push  <span class="Constant">&quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 1/index 0/scale&quot;</span>/imm32
<span id="L5089" class="LineNr">5089 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5090" class="LineNr">5090 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5091" class="LineNr">5091 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5092" class="LineNr">5092 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5093" class="LineNr">5093 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5094" class="LineNr">5094 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5095" class="LineNr">5095 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5096" class="LineNr">5096 </span>    5d/pop-to-ebp
<span id="L5097" class="LineNr">5097 </span>    c3/return
<span id="L5098" class="LineNr">5098 </span>
<span id="L5099" class="LineNr">5099 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-index</span>:
<span id="L5100" class="LineNr">5100 </span>    <span class="subxComment"># pack base and scale operands into SIB byte</span>
<span id="L5101" class="LineNr">5101 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5102" class="LineNr">5102 </span>    55/push-ebp
<span id="L5103" class="LineNr">5103 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5104" class="LineNr">5104 </span>    <span class="subxComment"># setup</span>
<span id="L5105" class="LineNr">5105 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5106" class="LineNr">5106 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5107" class="LineNr">5107 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5108" class="LineNr">5108 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5109" class="LineNr">5109 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5110" class="LineNr">5110 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5111" class="LineNr">5111 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5112" class="LineNr">5112 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5113" class="LineNr">5113 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5114" class="LineNr">5114 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5115" class="LineNr">5115 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5116" class="LineNr">5116 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5117" class="LineNr">5117 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5118" class="LineNr">5118 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5119" class="LineNr">5119 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5120" class="LineNr">5120 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5121" class="LineNr">5121 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5122" class="LineNr">5122 </span>    05/add-to-eax  4/imm32
<span id="L5123" class="LineNr">5123 </span>    50/push-eax
<span id="L5124" class="LineNr">5124 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5125" class="LineNr">5125 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5126" class="LineNr">5126 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5127" class="LineNr">5127 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5128" class="LineNr">5128 </span>    <span class="subxComment"># initialize input</span>
<span id="L5129" class="LineNr">5129 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale&quot;)</span>
<span id="L5130" class="LineNr">5130 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5131" class="LineNr">5131 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale&quot;</span>/imm32
<span id="L5132" class="LineNr">5132 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5133" class="LineNr">5133 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5134" class="LineNr">5134 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5135" class="LineNr">5135 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5136" class="LineNr">5136 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5137" class="LineNr">5137 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5138" class="LineNr">5138 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5139" class="LineNr">5139 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5140" class="LineNr">5140 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5141" class="LineNr">5141 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5142" class="LineNr">5142 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5143" class="LineNr">5143 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5144" class="LineNr">5144 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5145" class="LineNr">5145 </span>    <span class="subxComment"># check output</span>
<span id="L5146" class="LineNr">5146 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5147" class="LineNr">5147 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5148" class="LineNr">5148 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5149" class="LineNr">5149 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5150" class="LineNr">5150 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5151" class="LineNr">5151 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5152" class="LineNr">5152 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5153" class="Folded">5153 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5179" class="LineNr">5179 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale&quot;, msg)</span>
<span id="L5180" class="LineNr">5180 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5181" class="LineNr">5181 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-sib-byte-with-missing-index&quot;</span>/imm32
<span id="L5182" class="LineNr">5182 </span>    68/push  <span class="Constant">&quot;8b 0c 00  # 8b/copy 0/mod 4/rm32 1/r32 0/base 0/scale&quot;</span>/imm32
<span id="L5183" class="LineNr">5183 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5184" class="LineNr">5184 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5185" class="LineNr">5185 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5186" class="LineNr">5186 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5187" class="LineNr">5187 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5188" class="LineNr">5188 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5189" class="LineNr">5189 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5190" class="LineNr">5190 </span>    5d/pop-to-ebp
<span id="L5191" class="LineNr">5191 </span>    c3/return
<span id="L5192" class="LineNr">5192 </span>
<span id="L5193" class="LineNr">5193 </span><span class="subxTest">test-convert-instruction-emits-sib-byte-with-missing-scale</span>:
<span id="L5194" class="LineNr">5194 </span>    <span class="subxComment"># pack base and index operands into SIB byte</span>
<span id="L5195" class="LineNr">5195 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5196" class="LineNr">5196 </span>    55/push-ebp
<span id="L5197" class="LineNr">5197 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5198" class="LineNr">5198 </span>    <span class="subxComment"># setup</span>
<span id="L5199" class="LineNr">5199 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5200" class="LineNr">5200 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5201" class="LineNr">5201 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5202" class="LineNr">5202 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5203" class="LineNr">5203 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5204" class="LineNr">5204 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5205" class="LineNr">5205 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5206" class="LineNr">5206 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5207" class="LineNr">5207 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5208" class="LineNr">5208 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5209" class="LineNr">5209 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5210" class="LineNr">5210 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5211" class="LineNr">5211 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5212" class="LineNr">5212 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5213" class="LineNr">5213 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5214" class="LineNr">5214 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5215" class="LineNr">5215 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5216" class="LineNr">5216 </span>    05/add-to-eax  4/imm32
<span id="L5217" class="LineNr">5217 </span>    50/push-eax
<span id="L5218" class="LineNr">5218 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5219" class="LineNr">5219 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5220" class="LineNr">5220 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5221" class="LineNr">5221 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5222" class="LineNr">5222 </span>    <span class="subxComment"># initialize input</span>
<span id="L5223" class="LineNr">5223 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;8b/copy 0/mod 4/rm32 1/r32 0/base 1/index&quot;)</span>
<span id="L5224" class="LineNr">5224 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5225" class="LineNr">5225 </span>    68/push  <span class="Constant">&quot;8b/copy 0/mod 4/rm32 1/r32 0/base 1/index&quot;</span>/imm32
<span id="L5226" class="LineNr">5226 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5227" class="LineNr">5227 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5228" class="LineNr">5228 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5229" class="LineNr">5229 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5230" class="LineNr">5230 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5231" class="LineNr">5231 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5232" class="LineNr">5232 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5233" class="LineNr">5233 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5234" class="LineNr">5234 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5235" class="LineNr">5235 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5236" class="LineNr">5236 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5237" class="LineNr">5237 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5238" class="LineNr">5238 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5239" class="LineNr">5239 </span>    <span class="subxComment"># check output</span>
<span id="L5240" class="LineNr">5240 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5241" class="LineNr">5241 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5242" class="LineNr">5242 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5243" class="LineNr">5243 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5244" class="LineNr">5244 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5245" class="LineNr">5245 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5246" class="LineNr">5246 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5247" class="Folded">5247 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5273" class="LineNr">5273 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index&quot;, msg)</span>
<span id="L5274" class="LineNr">5274 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5275" class="LineNr">5275 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-emits-sib-byte-with-missing-scale&quot;</span>/imm32
<span id="L5276" class="LineNr">5276 </span>    68/push  <span class="Constant">&quot;8b 0c 08  # 8b/copy 0/mod 4/rm32 1/r32 0/base 1/index&quot;</span>/imm32
<span id="L5277" class="LineNr">5277 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5278" class="LineNr">5278 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5279" class="LineNr">5279 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5280" class="LineNr">5280 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5281" class="LineNr">5281 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5282" class="LineNr">5282 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5283" class="LineNr">5283 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5284" class="LineNr">5284 </span>    5d/pop-to-ebp
<span id="L5285" class="LineNr">5285 </span>    c3/return
<span id="L5286" class="LineNr">5286 </span>
<span id="L5287" class="LineNr">5287 </span><span class="subxTest">test-convert-instruction-handles-disp32-operand</span>:
<span id="L5288" class="LineNr">5288 </span>    <span class="subxComment"># expand /disp32 operand into 4 bytes</span>
<span id="L5289" class="LineNr">5289 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5290" class="LineNr">5290 </span>    55/push-ebp
<span id="L5291" class="LineNr">5291 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5292" class="LineNr">5292 </span>    <span class="subxComment"># setup</span>
<span id="L5293" class="LineNr">5293 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5294" class="LineNr">5294 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5295" class="LineNr">5295 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5296" class="LineNr">5296 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5297" class="LineNr">5297 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5298" class="LineNr">5298 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5299" class="LineNr">5299 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5300" class="LineNr">5300 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5301" class="LineNr">5301 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5302" class="LineNr">5302 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5303" class="LineNr">5303 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5304" class="LineNr">5304 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5305" class="LineNr">5305 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5306" class="LineNr">5306 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5307" class="LineNr">5307 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5308" class="LineNr">5308 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5309" class="LineNr">5309 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5310" class="LineNr">5310 </span>    05/add-to-eax  4/imm32
<span id="L5311" class="LineNr">5311 </span>    50/push-eax
<span id="L5312" class="LineNr">5312 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5313" class="LineNr">5313 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5314" class="LineNr">5314 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5315" class="LineNr">5315 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5316" class="LineNr">5316 </span>    <span class="subxComment"># initialize input</span>
<span id="L5317" class="LineNr">5317 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;e8/call 20/disp32&quot;)</span>
<span id="L5318" class="LineNr">5318 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5319" class="LineNr">5319 </span>    68/push  <span class="Constant">&quot;e8/call 20/disp32&quot;</span>/imm32
<span id="L5320" class="LineNr">5320 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5321" class="LineNr">5321 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5322" class="LineNr">5322 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5323" class="LineNr">5323 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5324" class="LineNr">5324 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5325" class="LineNr">5325 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5326" class="LineNr">5326 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5327" class="LineNr">5327 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5328" class="LineNr">5328 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5329" class="LineNr">5329 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5330" class="LineNr">5330 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5331" class="LineNr">5331 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5332" class="LineNr">5332 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5333" class="LineNr">5333 </span>    <span class="subxComment"># check output</span>
<span id="L5334" class="LineNr">5334 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5335" class="LineNr">5335 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5336" class="LineNr">5336 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5337" class="LineNr">5337 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5338" class="LineNr">5338 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5339" class="LineNr">5339 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5340" class="LineNr">5340 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5341" class="Folded">5341 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5367" class="LineNr">5367 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;e8 20 00 00 00  # e8/call 20/disp32&quot;, msg)</span>
<span id="L5368" class="LineNr">5368 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5369" class="LineNr">5369 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-disp32-operand&quot;</span>/imm32
<span id="L5370" class="LineNr">5370 </span>    68/push  <span class="Constant">&quot;e8 20 00 00 00  # e8/call 20/disp32&quot;</span>/imm32
<span id="L5371" class="LineNr">5371 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5372" class="LineNr">5372 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5373" class="LineNr">5373 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5374" class="LineNr">5374 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5375" class="LineNr">5375 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5376" class="LineNr">5376 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5377" class="LineNr">5377 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5378" class="LineNr">5378 </span>    5d/pop-to-ebp
<span id="L5379" class="LineNr">5379 </span>    c3/return
<span id="L5380" class="LineNr">5380 </span>
<span id="L5381" class="LineNr">5381 </span><span class="subxTest">test-convert-instruction-handles-disp16-operand</span>:
<span id="L5382" class="LineNr">5382 </span>    <span class="subxComment"># expand /disp16 operand into 2 bytes</span>
<span id="L5383" class="LineNr">5383 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5384" class="LineNr">5384 </span>    55/push-ebp
<span id="L5385" class="LineNr">5385 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5386" class="LineNr">5386 </span>    <span class="subxComment"># setup</span>
<span id="L5387" class="LineNr">5387 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5388" class="LineNr">5388 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5389" class="LineNr">5389 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5390" class="LineNr">5390 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5391" class="LineNr">5391 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5392" class="LineNr">5392 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5393" class="LineNr">5393 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5394" class="LineNr">5394 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5395" class="LineNr">5395 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5396" class="LineNr">5396 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5397" class="LineNr">5397 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5398" class="LineNr">5398 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5399" class="LineNr">5399 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5400" class="LineNr">5400 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5401" class="LineNr">5401 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5402" class="LineNr">5402 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5403" class="LineNr">5403 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5404" class="LineNr">5404 </span>    05/add-to-eax  4/imm32
<span id="L5405" class="LineNr">5405 </span>    50/push-eax
<span id="L5406" class="LineNr">5406 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5407" class="LineNr">5407 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5408" class="LineNr">5408 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5409" class="LineNr">5409 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5410" class="LineNr">5410 </span>    <span class="subxComment"># initialize input</span>
<span id="L5411" class="LineNr">5411 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;e8/call 20/disp16&quot;)</span>
<span id="L5412" class="LineNr">5412 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5413" class="LineNr">5413 </span>    68/push  <span class="Constant">&quot;e8/call 20/disp16&quot;</span>/imm32  <span class="subxComment"># not a valid instruction</span>
<span id="L5414" class="LineNr">5414 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5415" class="LineNr">5415 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5416" class="LineNr">5416 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5417" class="LineNr">5417 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5418" class="LineNr">5418 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5419" class="LineNr">5419 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5420" class="LineNr">5420 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5421" class="LineNr">5421 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5422" class="LineNr">5422 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5423" class="LineNr">5423 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5424" class="LineNr">5424 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5425" class="LineNr">5425 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5426" class="LineNr">5426 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5427" class="LineNr">5427 </span>    <span class="subxComment"># check output</span>
<span id="L5428" class="LineNr">5428 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5429" class="LineNr">5429 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5430" class="LineNr">5430 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5431" class="LineNr">5431 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5432" class="LineNr">5432 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5433" class="LineNr">5433 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5434" class="LineNr">5434 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5435" class="Folded">5435 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5461" class="LineNr">5461 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;e8 20 00  # e8/call 20/disp16&quot;, msg)</span>
<span id="L5462" class="LineNr">5462 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5463" class="LineNr">5463 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-disp16-operand&quot;</span>/imm32
<span id="L5464" class="LineNr">5464 </span>    68/push  <span class="Constant">&quot;e8 20 00  # e8/call 20/disp16&quot;</span>/imm32
<span id="L5465" class="LineNr">5465 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5466" class="LineNr">5466 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5467" class="LineNr">5467 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5468" class="LineNr">5468 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5469" class="LineNr">5469 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5470" class="LineNr">5470 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5471" class="LineNr">5471 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5472" class="LineNr">5472 </span>    5d/pop-to-ebp
<span id="L5473" class="LineNr">5473 </span>    c3/return
<span id="L5474" class="LineNr">5474 </span>
<span id="L5475" class="LineNr">5475 </span><span class="subxTest">test-convert-instruction-handles-disp8-operand</span>:
<span id="L5476" class="LineNr">5476 </span>    <span class="subxComment"># expand /disp8 operand into 1 byte</span>
<span id="L5477" class="LineNr">5477 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5478" class="LineNr">5478 </span>    55/push-ebp
<span id="L5479" class="LineNr">5479 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5480" class="LineNr">5480 </span>    <span class="subxComment"># setup</span>
<span id="L5481" class="LineNr">5481 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5482" class="LineNr">5482 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5483" class="LineNr">5483 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5484" class="LineNr">5484 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5485" class="LineNr">5485 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5486" class="LineNr">5486 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5487" class="LineNr">5487 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5488" class="LineNr">5488 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5489" class="LineNr">5489 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5490" class="LineNr">5490 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5491" class="LineNr">5491 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5492" class="LineNr">5492 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5493" class="LineNr">5493 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5494" class="LineNr">5494 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5495" class="LineNr">5495 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5496" class="LineNr">5496 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5497" class="LineNr">5497 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5498" class="LineNr">5498 </span>    05/add-to-eax  4/imm32
<span id="L5499" class="LineNr">5499 </span>    50/push-eax
<span id="L5500" class="LineNr">5500 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5501" class="LineNr">5501 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5502" class="LineNr">5502 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5503" class="LineNr">5503 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5504" class="LineNr">5504 </span>    <span class="subxComment"># initialize input</span>
<span id="L5505" class="LineNr">5505 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;eb/jump 20/disp8&quot;)</span>
<span id="L5506" class="LineNr">5506 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5507" class="LineNr">5507 </span>    68/push  <span class="Constant">&quot;eb/jump 20/disp8&quot;</span>/imm32
<span id="L5508" class="LineNr">5508 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5509" class="LineNr">5509 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5510" class="LineNr">5510 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5511" class="LineNr">5511 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5512" class="LineNr">5512 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5513" class="LineNr">5513 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5514" class="LineNr">5514 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5515" class="LineNr">5515 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5516" class="LineNr">5516 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5517" class="LineNr">5517 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5518" class="LineNr">5518 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5519" class="LineNr">5519 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5520" class="LineNr">5520 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5521" class="LineNr">5521 </span>    <span class="subxComment"># check output</span>
<span id="L5522" class="LineNr">5522 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5523" class="LineNr">5523 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5524" class="LineNr">5524 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5525" class="LineNr">5525 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5526" class="LineNr">5526 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5527" class="LineNr">5527 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5528" class="LineNr">5528 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5529" class="Folded">5529 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5555" class="LineNr">5555 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;eb 20  # eb/jump 20/disp8&quot;, msg)</span>
<span id="L5556" class="LineNr">5556 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5557" class="LineNr">5557 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-disp8-operand&quot;</span>/imm32
<span id="L5558" class="LineNr">5558 </span>    68/push  <span class="Constant">&quot;eb 20  # eb/jump 20/disp8&quot;</span>/imm32
<span id="L5559" class="LineNr">5559 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5560" class="LineNr">5560 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5561" class="LineNr">5561 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5562" class="LineNr">5562 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5563" class="LineNr">5563 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5564" class="LineNr">5564 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5565" class="LineNr">5565 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5566" class="LineNr">5566 </span>    5d/pop-to-ebp
<span id="L5567" class="LineNr">5567 </span>    c3/return
<span id="L5568" class="LineNr">5568 </span>
<span id="L5569" class="LineNr">5569 </span><span class="subxTest">test-convert-instruction-handles-disp8-name</span>:
<span id="L5570" class="LineNr">5570 </span>    <span class="subxComment"># pass /disp8 name directly through</span>
<span id="L5571" class="LineNr">5571 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5572" class="LineNr">5572 </span>    55/push-ebp
<span id="L5573" class="LineNr">5573 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5574" class="LineNr">5574 </span>    <span class="subxComment"># setup</span>
<span id="L5575" class="LineNr">5575 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5576" class="LineNr">5576 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5577" class="LineNr">5577 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5578" class="LineNr">5578 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5579" class="LineNr">5579 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5580" class="LineNr">5580 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5581" class="LineNr">5581 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5582" class="LineNr">5582 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5583" class="LineNr">5583 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5584" class="LineNr">5584 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5585" class="LineNr">5585 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5586" class="LineNr">5586 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5587" class="LineNr">5587 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5588" class="LineNr">5588 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5589" class="LineNr">5589 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5590" class="LineNr">5590 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5591" class="LineNr">5591 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5592" class="LineNr">5592 </span>    05/add-to-eax  4/imm32
<span id="L5593" class="LineNr">5593 </span>    50/push-eax
<span id="L5594" class="LineNr">5594 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5595" class="LineNr">5595 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5596" class="LineNr">5596 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5597" class="LineNr">5597 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5598" class="LineNr">5598 </span>    <span class="subxComment"># initialize input</span>
<span id="L5599" class="LineNr">5599 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;eb/jump xyz/disp8&quot;)</span>
<span id="L5600" class="LineNr">5600 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5601" class="LineNr">5601 </span>    68/push  <span class="Constant">&quot;eb/jump xyz/disp8&quot;</span>/imm32
<span id="L5602" class="LineNr">5602 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5603" class="LineNr">5603 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5604" class="LineNr">5604 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5605" class="LineNr">5605 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5606" class="LineNr">5606 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5607" class="LineNr">5607 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5608" class="LineNr">5608 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5609" class="LineNr">5609 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5610" class="LineNr">5610 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5611" class="LineNr">5611 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5612" class="LineNr">5612 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5613" class="LineNr">5613 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5614" class="LineNr">5614 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5615" class="LineNr">5615 </span>    <span class="subxComment"># check output</span>
<span id="L5616" class="LineNr">5616 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5617" class="LineNr">5617 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5618" class="LineNr">5618 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5619" class="LineNr">5619 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5620" class="LineNr">5620 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5621" class="LineNr">5621 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5622" class="LineNr">5622 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5623" class="Folded">5623 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5649" class="LineNr">5649 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;eb xyz/disp8  # eb/jump xyz/disp8&quot;, msg)</span>
<span id="L5650" class="LineNr">5650 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5651" class="LineNr">5651 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-disp8-name&quot;</span>/imm32
<span id="L5652" class="LineNr">5652 </span>    68/push  <span class="Constant">&quot;eb xyz/disp8  # eb/jump xyz/disp8&quot;</span>/imm32
<span id="L5653" class="LineNr">5653 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5654" class="LineNr">5654 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5655" class="LineNr">5655 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5656" class="LineNr">5656 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5657" class="LineNr">5657 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5658" class="LineNr">5658 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5659" class="LineNr">5659 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5660" class="LineNr">5660 </span>    5d/pop-to-ebp
<span id="L5661" class="LineNr">5661 </span>    c3/return
<span id="L5662" class="LineNr">5662 </span>
<span id="L5663" class="LineNr">5663 </span><span class="subxTest">test-convert-instruction-handles-imm32-operand</span>:
<span id="L5664" class="LineNr">5664 </span>    <span class="subxComment"># expand /imm32 operand into 4 bytes</span>
<span id="L5665" class="LineNr">5665 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5666" class="LineNr">5666 </span>    55/push-ebp
<span id="L5667" class="LineNr">5667 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5668" class="LineNr">5668 </span>    <span class="subxComment"># setup</span>
<span id="L5669" class="LineNr">5669 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5670" class="LineNr">5670 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5671" class="LineNr">5671 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5672" class="LineNr">5672 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5673" class="LineNr">5673 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5674" class="LineNr">5674 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5675" class="LineNr">5675 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5676" class="LineNr">5676 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5677" class="LineNr">5677 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5678" class="LineNr">5678 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5679" class="LineNr">5679 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5680" class="LineNr">5680 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5681" class="LineNr">5681 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5682" class="LineNr">5682 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5683" class="LineNr">5683 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5684" class="LineNr">5684 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5685" class="LineNr">5685 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5686" class="LineNr">5686 </span>    05/add-to-eax  4/imm32
<span id="L5687" class="LineNr">5687 </span>    50/push-eax
<span id="L5688" class="LineNr">5688 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5689" class="LineNr">5689 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5690" class="LineNr">5690 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5691" class="LineNr">5691 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5692" class="LineNr">5692 </span>    <span class="subxComment"># initialize input</span>
<span id="L5693" class="LineNr">5693 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;68/push 0x20/imm32&quot;)</span>
<span id="L5694" class="LineNr">5694 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5695" class="LineNr">5695 </span>    68/push  <span class="Constant">&quot;68/push 0x20/imm32&quot;</span>/imm32
<span id="L5696" class="LineNr">5696 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5697" class="LineNr">5697 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5698" class="LineNr">5698 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5699" class="LineNr">5699 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5700" class="LineNr">5700 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5701" class="LineNr">5701 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5702" class="LineNr">5702 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5703" class="LineNr">5703 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5704" class="LineNr">5704 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5705" class="LineNr">5705 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5706" class="LineNr">5706 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5707" class="LineNr">5707 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5708" class="LineNr">5708 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5709" class="LineNr">5709 </span>    <span class="subxComment"># check output</span>
<span id="L5710" class="LineNr">5710 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5711" class="LineNr">5711 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5712" class="LineNr">5712 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5713" class="LineNr">5713 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5714" class="LineNr">5714 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5715" class="LineNr">5715 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5716" class="LineNr">5716 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5717" class="Folded">5717 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5743" class="LineNr">5743 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;68 20 00 00 00  # 68/push 0x20/imm32&quot;, msg)</span>
<span id="L5744" class="LineNr">5744 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5745" class="LineNr">5745 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-imm32-operand&quot;</span>/imm32
<span id="L5746" class="LineNr">5746 </span>    68/push  <span class="Constant">&quot;68 20 00 00 00  # 68/push 0x20/imm32&quot;</span>/imm32
<span id="L5747" class="LineNr">5747 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5748" class="LineNr">5748 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5749" class="LineNr">5749 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5750" class="LineNr">5750 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5751" class="LineNr">5751 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5752" class="LineNr">5752 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5753" class="LineNr">5753 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5754" class="LineNr">5754 </span>    5d/pop-to-ebp
<span id="L5755" class="LineNr">5755 </span>    c3/return
<span id="L5756" class="LineNr">5756 </span>
<span id="L5757" class="LineNr">5757 </span><span class="subxTest">test-convert-instruction-handles-imm16-operand</span>:
<span id="L5758" class="LineNr">5758 </span>    <span class="subxComment"># expand /imm16 operand into 2 bytes</span>
<span id="L5759" class="LineNr">5759 </span>    <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span>
<span id="L5760" class="LineNr">5760 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5761" class="LineNr">5761 </span>    55/push-ebp
<span id="L5762" class="LineNr">5762 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5763" class="LineNr">5763 </span>    <span class="subxComment"># setup</span>
<span id="L5764" class="LineNr">5764 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5765" class="LineNr">5765 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5766" class="LineNr">5766 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5767" class="LineNr">5767 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5768" class="LineNr">5768 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5769" class="LineNr">5769 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5770" class="LineNr">5770 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5771" class="LineNr">5771 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5772" class="LineNr">5772 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5773" class="LineNr">5773 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5774" class="LineNr">5774 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5775" class="LineNr">5775 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5776" class="LineNr">5776 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5777" class="LineNr">5777 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5778" class="LineNr">5778 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5779" class="LineNr">5779 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5780" class="LineNr">5780 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5781" class="LineNr">5781 </span>    05/add-to-eax  4/imm32
<span id="L5782" class="LineNr">5782 </span>    50/push-eax
<span id="L5783" class="LineNr">5783 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5784" class="LineNr">5784 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5785" class="LineNr">5785 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5786" class="LineNr">5786 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5787" class="LineNr">5787 </span>    <span class="subxComment"># initialize input</span>
<span id="L5788" class="LineNr">5788 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;68/push 0x20/imm16&quot;)</span>
<span id="L5789" class="LineNr">5789 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5790" class="LineNr">5790 </span>    68/push  <span class="Constant">&quot;68/push 0x20/imm16&quot;</span>/imm32  <span class="subxComment"># not a valid instruction</span>
<span id="L5791" class="LineNr">5791 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5792" class="LineNr">5792 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5793" class="LineNr">5793 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5794" class="LineNr">5794 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5795" class="LineNr">5795 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5796" class="LineNr">5796 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5797" class="LineNr">5797 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5798" class="LineNr">5798 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5799" class="LineNr">5799 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5800" class="LineNr">5800 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5801" class="LineNr">5801 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5802" class="LineNr">5802 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5803" class="LineNr">5803 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5804" class="LineNr">5804 </span>    <span class="subxComment"># check output</span>
<span id="L5805" class="LineNr">5805 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5806" class="LineNr">5806 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5807" class="LineNr">5807 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5808" class="LineNr">5808 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5809" class="LineNr">5809 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5810" class="LineNr">5810 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5811" class="LineNr">5811 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5812" class="Folded">5812 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5838" class="LineNr">5838 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;68 20 00  # 68/push 0x20/imm16&quot;, msg)</span>
<span id="L5839" class="LineNr">5839 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5840" class="LineNr">5840 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-imm16-operand&quot;</span>/imm32
<span id="L5841" class="LineNr">5841 </span>    68/push  <span class="Constant">&quot;68 20 00  # 68/push 0x20/imm16&quot;</span>/imm32
<span id="L5842" class="LineNr">5842 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5843" class="LineNr">5843 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5844" class="LineNr">5844 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5845" class="LineNr">5845 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5846" class="LineNr">5846 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5847" class="LineNr">5847 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5848" class="LineNr">5848 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5849" class="LineNr">5849 </span>    5d/pop-to-ebp
<span id="L5850" class="LineNr">5850 </span>    c3/return
<span id="L5851" class="LineNr">5851 </span>
<span id="L5852" class="LineNr">5852 </span><span class="subxTest">test-convert-instruction-handles-imm8-operand</span>:
<span id="L5853" class="LineNr">5853 </span>    <span class="subxComment"># expand /imm8 operand into 1 byte</span>
<span id="L5854" class="LineNr">5854 </span>    <span class="subxComment"># we don't have one of these at the moment, so this expands to an invalid instruction</span>
<span id="L5855" class="LineNr">5855 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5856" class="LineNr">5856 </span>    55/push-ebp
<span id="L5857" class="LineNr">5857 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5858" class="LineNr">5858 </span>    <span class="subxComment"># setup</span>
<span id="L5859" class="LineNr">5859 </span>    <span class="subxS1Comment"># . clear-stream(_test-input-stream)</span>
<span id="L5860" class="LineNr">5860 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5861" class="LineNr">5861 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5862" class="LineNr">5862 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5863" class="LineNr">5863 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5864" class="LineNr">5864 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5865" class="LineNr">5865 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5866" class="LineNr">5866 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-stream)</span>
<span id="L5867" class="LineNr">5867 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5868" class="LineNr">5868 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5869" class="LineNr">5869 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5870" class="LineNr">5870 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5871" class="LineNr">5871 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5872" class="LineNr">5872 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5873" class="LineNr">5873 </span>    <span class="subxS1Comment"># . clear-stream(_test-output-buffered-file+4)</span>
<span id="L5874" class="LineNr">5874 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5875" class="LineNr">5875 </span>    b8/copy-to-eax  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5876" class="LineNr">5876 </span>    05/add-to-eax  4/imm32
<span id="L5877" class="LineNr">5877 </span>    50/push-eax
<span id="L5878" class="LineNr">5878 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5879" class="LineNr">5879 </span>    e8/call  <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32
<span id="L5880" class="LineNr">5880 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5881" class="LineNr">5881 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5882" class="LineNr">5882 </span>    <span class="subxComment"># initialize input</span>
<span id="L5883" class="LineNr">5883 </span>    <span class="subxS1Comment"># . write(_test-input-stream, &quot;68/push 0x20/imm8&quot;)</span>
<span id="L5884" class="LineNr">5884 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5885" class="LineNr">5885 </span>    68/push  <span class="Constant">&quot;68/push 0x20/imm8&quot;</span>/imm32
<span id="L5886" class="LineNr">5886 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5887" class="LineNr">5887 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5888" class="LineNr">5888 </span>    e8/call  <a href='../057write.subx.html#L24'>write</a>/disp32
<span id="L5889" class="LineNr">5889 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5890" class="LineNr">5890 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5891" class="LineNr">5891 </span>    <span class="subxComment"># convert-instruction(_test-input-stream, _test-output-buffered-file)</span>
<span id="L5892" class="LineNr">5892 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5893" class="LineNr">5893 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5894" class="LineNr">5894 </span>    68/push  <a href='../061read-byte.subx.html#L293'>_test-input-stream</a>/imm32
<span id="L5895" class="LineNr">5895 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5896" class="LineNr">5896 </span>    e8/call  <a href='pack.subx.html#L1856'>convert-instruction</a>/disp32
<span id="L5897" class="LineNr">5897 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5898" class="LineNr">5898 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5899" class="LineNr">5899 </span>    <span class="subxComment"># check output</span>
<span id="L5900" class="LineNr">5900 </span>    <span class="subxS1Comment"># . flush(_test-output-buffered-file)</span>
<span id="L5901" class="LineNr">5901 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5902" class="LineNr">5902 </span>    68/push  <a href='../064write-byte.subx.html#L332'>_test-output-buffered-file</a>/imm32
<span id="L5903" class="LineNr">5903 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5904" class="LineNr">5904 </span>    e8/call  <a href='../064write-byte.subx.html#L79'>flush</a>/disp32
<span id="L5905" class="LineNr">5905 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5906" class="LineNr">5906 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5907" class="Folded">5907 </span><span class="Folded">+-- 26 lines: #?     # dump output -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L5933" class="LineNr">5933 </span>    <span class="subxS1Comment"># . check-stream-equal(_test-output-stream, &quot;68 20  # 68/push 0x20/imm8&quot;, msg)</span>
<span id="L5934" class="LineNr">5934 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5935" class="LineNr">5935 </span>    68/push  <span class="Constant">&quot;F - test-convert-instruction-handles-imm8-operand&quot;</span>/imm32
<span id="L5936" class="LineNr">5936 </span>    68/push  <span class="Constant">&quot;68 20  # 68/push 0x20/imm8&quot;</span>/imm32
<span id="L5937" class="LineNr">5937 </span>    68/push  <a href='../064write-byte.subx.html#L290'>_test-output-stream</a>/imm32
<span id="L5938" class="LineNr">5938 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5939" class="LineNr">5939 </span>    e8/call  <a href='../058stream-equal.subx.html#L193'>check-stream-equal</a>/disp32
<span id="L5940" class="LineNr">5940 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5941" class="LineNr">5941 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0xc/imm32         <span class="subxComment"># add to esp</span>
<span id="L5942" class="LineNr">5942 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5943" class="LineNr">5943 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5944" class="LineNr">5944 </span>    5d/pop-to-ebp
<span id="L5945" class="LineNr">5945 </span>    c3/return
<span id="L5946" class="LineNr">5946 </span>
<span id="L5947" class="LineNr">5947 </span><span class="subxComment"># shortcut for parse-hex-int(next-token-from-slice(word-&gt;start, word-&gt;end, '/'))</span>
<span id="L5948" class="LineNr">5948 </span><span class="subxFunction">parse-datum-of-word</span>:  <span class="subxComment"># word : (address slice) -&gt; value/eax</span>
<span id="L5949" class="LineNr">5949 </span>    <span class="subxS1Comment"># . prolog</span>
<span id="L5950" class="LineNr">5950 </span>    55/push-ebp
<span id="L5951" class="LineNr">5951 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L5952" class="LineNr">5952 </span>    <span class="subxS1Comment"># . save registers</span>
<span id="L5953" class="LineNr">5953 </span>    51/push-ecx
<span id="L5954" class="LineNr">5954 </span>    56/push-esi
<span id="L5955" class="LineNr">5955 </span>    <span class="subxComment"># esi = word</span>
<span id="L5956" class="LineNr">5956 </span>    8b/copy                         1/mod/*+disp8   5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          6/r32/esi   8/disp8        <span class="Normal"> . </span>                <span class="subxComment"># copy *(ebp+8) to esi</span>
<span id="L5957" class="LineNr">5957 </span>    <span class="subxComment"># var slice/ecx = {0, 0}</span>
<span id="L5958" class="LineNr">5958 </span>    68/push  0/imm32/end
<span id="L5959" class="LineNr">5959 </span>    68/push  0/imm32/start
<span id="L5960" class="LineNr">5960 </span>    89/copy                         3/mod/direct    1/rm32/ecx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ecx</span>
<span id="L5961" class="LineNr">5961 </span>    <span class="subxComment"># slice = next-token-from-slice(word-&gt;start, word-&gt;end, '/')</span>
<span id="L5962" class="LineNr">5962 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5963" class="LineNr">5963 </span>    51/push-ecx
<span id="L5964" class="LineNr">5964 </span>    68/push  0x2f/imm32/slash
<span id="L5965" class="LineNr">5965 </span>    ff          6/subop/push        1/mod/*+disp8   6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>          4/disp8        <span class="Normal"> . </span>                <span class="subxComment"># push *(esi+4)</span>
<span id="L5966" class="LineNr">5966 </span>    ff          6/subop/push        0/mod/indirect  6/rm32/esi   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># push *esi</span>
<span id="L5967" class="LineNr">5967 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5968" class="LineNr">5968 </span>    e8/call  <a href='../073next-token.subx.html#L163'>next-token-from-slice</a>/disp32
<span id="L5969" class="LineNr">5969 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5970" class="LineNr">5970 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x10/imm32        <span class="subxComment"># add to esp</span>
<span id="L5971" class="LineNr">5971 </span>    <span class="subxComment"># value/eax = parse-hex-int(slice)</span>
<span id="L5972" class="LineNr">5972 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L5973" class="LineNr">5973 </span>    51/push-ecx
<span id="L5974" class="LineNr">5974 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L5975" class="LineNr">5975 </span>    e8/call  <a href='../067parse-hex.subx.html#L354'>parse-hex-int</a>/disp32
<span id="L5976" class="LineNr">5976 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L5977" class="LineNr">5977 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              4/imm32           <span class="subxComment"># add to esp</span>
<span id="L5978" class="LineNr">5978 </span><span class="Constant">$parse-datum-of-word:end</span>:
<span id="L5979" class="LineNr">5979 </span>    <span class="subxS1Comment"># . reclaim locals</span>
<span id="L5980" class="LineNr">5980 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L5981" class="LineNr">5981 </span>    <span class="subxS1Comment"># . restore registers</span>
<span id="L5982" class="LineNr">5982 </span>    5e/pop-to-esi
<span id="L5983" class="LineNr">5983 </span>    59/pop-to-ecx
<span id="L5984" class="LineNr">5984 </span>    <span class="subxS1Comment"># . epilog</span>
<span id="L5985" class="LineNr">5985 </span>    89/copy                         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          5/r32/ebp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy ebp to esp</span>
<span id="L5986" class="LineNr">5986 </span>    5d/pop-to-ebp
<span id="L5987" class="LineNr">5987 </span>    c3/return
<span id="L5988" class="LineNr">5988 </span>
<span id="L5989" class="LineNr">5989 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->