⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fp52.lst

📁 proteus6.9 sp4 上
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1201:	  0409	78 2B			MOV	R0,#FP_NIB1	;POINT AT THE NUMBER
 1202:	  040B	E5 25			MOV	A,FORMAT	;GET THE FORMAT
 1203:	  040D	FB			MOV	R3,A		;SAVE IN CASE OF EXP FORMAT
 1204:	  040E	60 49			JZ	FREE		;FREE FLOATING?
 1205:	  0410	B4 F0 00		CJNE	A,#0F0H,$+3	;SEE IF EXPONENTIAL
 1206:	  0413	50 73			JNC	EXPOUT
 1207:					;
 1208:					; If here, must be integer USING format
 1209:					;
 1210:	  0415	EE			MOV	A,R6		;GET THE EXPONENT
 1211:	  0416	70 02			JNZ	$+4
 1212:	  0418	7E 80			MOV	R6,#80H
 1213:	  041A	EB			MOV	A,R3		;GET THE FORMAT
 1214:	  041B	C4			SWAP	A		;SPLIT INTEGER AND FRACTION
 1215:	  041C	54 0F			ANL	A,#0FH
 1216:	  041E	FA			MOV	R2,A		;SAVE INTEGER
 1217:	  041F	91 EE			ACALL	NUM_LT		;GET THE NUMBER OF INTEGERS
 1218:	  0421	CA			XCH	A,R2		;FLIP FOR SUBB
 1219:	  0422	C3			CLR	C
 1220:	  0423	9A			SUBB	A,R2
 1221:	  0424	FF			MOV	R7,A
 1222:	  0425	50 06			JNC	$+8
 1223:	  0427	7D 3F			MOV	R5,#'?'		;OUTPUT A QUESTION MARK
 1224:	  0429	B1 23			ACALL	SOUT1		;NUMBER IS TOO LARGE FOR FORMAT
 1225:	  042B	81 59			AJMP	FREE
 1226:	  042D	BA 00 07		CJNE	R2,#00,USING0	;SEE IF ZERO
 1227:	  0430	1F			DEC	R7
 1228:	  0431	B1 10			ACALL	SS7
 1229:	  0433	B1 1D			ACALL	ZOUT		;OUTPUT A ZERO
 1230:	  0435	80 06			SJMP	USING1
 1231:					;
 1232:	  0437	B1 10		USING0:	ACALL	SS7		;OUTPUT SPACES, IF NEED TO
 1233:	  0439	EA			MOV	A,R2		;OUTPUT DIGITS
 1234:	  043A	FF			MOV	R7,A
 1235:	  043B	91 D2			ACALL	OUTR0
 1236:					;
 1237:	  043D	EB		USING1:	MOV	A,R3
 1238:	  043E	54 0F			ANL	A,#0FH		;GET THE NUMBER RIGHT OF DP
 1239:	  0440	FA			MOV	R2,A		;SAVE IT
 1240:	  0441	60 BD			JZ	PMT1		;EXIT IF ZERO

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 34



 Line  I  Addr  Code            Source

 1241:	  0443	B1 19			ACALL	ROUT		;OUTPUT DP
 1242:	  0445	91 F7			ACALL	NUM_RT
 1243:	  0447	B5 02 03		CJNE	A,2,USINGX	;COMPARE A TO R2
 1244:					;
 1245:	  044A	EA		USINGY:	MOV	A,R2
 1246:	  044B	A1 07			AJMP	Z7R7
 1247:					;
 1248:	  044D	50 FB		USINGX:	JNC	USINGY
 1249:					;
 1250:	  044F	CA		USING2:	XCH	A,R2
 1251:	  0450	C3			CLR	C
 1252:	  0451	9A			SUBB	A,R2
 1253:	  0452	CA			XCH	A,R2
 1254:	  0453	B1 07			ACALL	Z7R7		;OUTPUT ZEROS IF NEED TO
 1255:	  0455	EA			MOV	A,R2
 1256:	  0456	FF			MOV	R7,A
 1257:	  0457	81 D2			AJMP	OUTR0
 1258:					;
 1259:					; First, force exponential output, if need to
 1260:					;
 1261:	  0459	EE		FREE:	MOV	A,R6		;GET THE EXPONENT
 1262:	  045A	70 04			JNZ	FREE1		;IF ZERO, PRINT IT
 1263:	  045C	B1 21			ACALL	SOUT
 1264:	  045E	A1 1D			AJMP	ZOUT
 1265:					;
 1266:	  0460	7B F0		FREE1:	MOV	R3,#0F0H	;IN CASE EXP NEEDED
 1267:	  0462	74 77			MOV	A,#80H-DIGIT-DIGIT-1
 1268:	  0464	2E			ADD	A,R6
 1269:	  0465	40 21			JC	EXPOUT
 1270:	  0467	94 F7			SUBB	A,#0F7H
 1271:	  0469	40 1D			JC	EXPOUT
 1272:					;
 1273:					; Now, just print the number
 1274:					;
 1275:	  046B	B1 12			ACALL	SINOUT		;PRINT THE SIGN OF THE NUMBER
 1276:	  046D	91 EE			ACALL	NUM_LT		;GET THE NUMBER LEFT OF DP
 1277:	  046F	B4 08 02		CJNE	A,#8,FREE4
 1278:	  0472	81 D2			AJMP	OUTR0
 1279:					;
 1280:	  0474	91 D2		FREE4:	ACALL	OUTR0
 1281:	  0476	91 E4			ACALL	ZTEST		;TEST FOR TRAILING ZEROS
 1282:	  0478	60 57			JZ	U_RET		;DONE IF ALL TRAILING ZEROS
 1283:	  047A	B1 19			ACALL	ROUT		;OUTPUT RADIX
 1284:					;
 1285:	  047C	7F 01		FREE2:	MOV	R7,#1		;OUTPUT ONE DIGIT
 1286:	  047E	91 D2			ACALL	OUTR0
 1287:	  0480	70 4F			JNZ	U_RET
 1288:	  0482	91 E4			ACALL	ZTEST
 1289:	  0484	60 4B			JZ	U_RET
 1290:	  0486	80 F4			SJMP	FREE2		;LOOP
 1291:					;
 1292:	  0488	B1 12		EXPOUT:	ACALL	SINOUT		;PRINT THE SIGN
 1293:	  048A	7F 01			MOV	R7,#1		;OUTPUT ONE CHARACTER
 1294:	  048C	91 D2			ACALL	OUTR0
 1295:	  048E	B1 19			ACALL	ROUT		;OUTPUT RADIX
 1296:	  0490	EB			MOV	A,R3		;GET FORMAT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 35



 Line  I  Addr  Code            Source

 1297:	  0491	54 0F			ANL	A,#0FH		;STRIP INDICATOR
 1298:	  0493	60 06			JZ	EXPOTX
 1299:					;
 1300:	  0495	FF			MOV	R7,A		;OUTPUT THE NUMBER OF DIGITS
 1301:	  0496	1F			DEC	R7		;ADJUST BECAUSE ONE CHAR ALREADY OUT
 1302:	  0497	91 D2			ACALL	OUTR0
 1303:	  0499	80 02			SJMP	EXPOT4
 1304:					;
 1305:	  049B	91 7C		EXPOTX:	ACALL	FREE2		;OUTPUT UNTIL TRAILING ZEROS
 1306:					;
 1307:	  049D	B1 21		EXPOT4:	ACALL	SOUT		;OUTPUT A SPACE
 1308:	  049F	7D 45			MOV	R5,#'E'
 1309:	  04A1	B1 23			ACALL	SOUT1		;OUTPUT AN E
 1310:	  04A3	EE			MOV	A,R6		;GET THE EXPONENT
 1311:	  04A4	60 04			JZ	XOUT0		;EXIT IF ZERO
 1312:	  04A6	14			DEC	A		;ADJUST FOR THE DIGIT ALREADY OUTPUT
 1313:	  04A7	B4 80 05		CJNE	A,#80H,XOUT2	;SEE WHAT IT IS
 1314:					;
 1315:	  04AA	B1 21		XOUT0:	ACALL	SOUT
 1316:	  04AC	E4			CLR	A
 1317:	  04AD	80 0C			SJMP	XOUT4
 1318:					;
 1319:	  04AF	40 06		XOUT2:	JC	XOUT3		;NEGATIVE EXPONENT
 1320:	  04B1	7D 2B			MOV	R5,#'+'		;OUTPUT A PLUS SIGN
 1321:	  04B3	B1 23			ACALL	SOUT1
 1322:	  04B5	80 04			SJMP	XOUT4
 1323:					;
 1324:	  04B7	B1 15		XOUT3:	ACALL	MOUT
 1325:	  04B9	F4			CPL	A		;FLIP BITS
 1326:	  04BA	04			INC	A		;BUMP
 1327:					;
 1328:	  04BB	C2 E7		XOUT4:	CLR	ACC.7
 1329:	  04BD	F8			MOV	R0,A
 1330:	  04BE	7A 00			MOV	R2,#0
 1331:	  04C0	79 48			MOV	R1,#LOW CONVT	;CONVERSION LOCATION
 1332:	  04C2	7B 00			MOV	R3,#HIGH CONVT
 1333:	  04C4	B1 7E			ACALL	CONVERT_BINARY_TO_ASCII_STRING
 1334:	  04C6	78 48			MOV	R0,#LOW CONVT	;NOW, OUTPUT EXPONENT
 1335:					;
 1336:	  04C8	E2		EXPOT5:	MOVX	A,@R0		;GET THE CHARACTER
 1337:	  04C9	FD			MOV	R5,A		;OUTPUT IT
 1338:	  04CA	B1 23			ACALL	SOUT1
 1339:	  04CC	08			INC	R0		;BUMP THE POINTER
 1340:	  04CD	E8			MOV	A,R0		;GET THE POINTER
 1341:	  04CE	B5 01 F7		CJNE	A,R1B0,EXPOT5	;LOOP
 1342:					;
 1343:	  04D1	22		U_RET:	RET			;EXIT
 1344:					;
 1345:	  04D2			OUTR0:	; Output the characters pointed to by R0, also bias ascii
 1346:					;
 1347:	  04D2	EF			MOV	A,R7		;GET THE COUNTER
 1348:	  04D3	60 0E			JZ	OUTR		;EXIT IF DONE
 1349:	  04D5	E6			MOV	A,@R0		;GET THE NUMBER
 1350:	  04D6	44 30			ORL	A,#30H		;ASCII BIAS
 1351:	  04D8	08			INC	R0		;BUMP POINTER AND COUNTER
 1352:	  04D9	1F			DEC	R7

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 36



 Line  I  Addr  Code            Source

 1353:	  04DA	FD			MOV	R5,A		;PUT CHARACTER IN OUTPUT REGISTER
 1354:	  04DB	B1 23			ACALL	SOUT1		;OUTPUT THE CHARACTER
 1355:	  04DD	E4			CLR	A		;JUST FOR TEST
 1356:	  04DE	B8 33 F1		CJNE	R0,#FP_NIB8+1,OUTR0
 1357:	  04E1	74 55			MOV	A,#55H		;KNOW WHERE EXIT OCCURED
 1358:					;
 1359:	  04E3	22		OUTR:	RET
 1360:					;
 1361:	  04E4	A9 00		ZTEST:	MOV	R1,R0B0		;GET POINTER REGISTER
 1362:					;
 1363:	  04E6	E7		ZT0:	MOV	A,@R1		;GET THE VALUE
 1364:	  04E7	70 04			JNZ	ZT1
 1365:	  04E9	09			INC	R1		;BUMP POINTER
 1366:	  04EA	B9 33 F9		CJNE	R1,#FP_NIB8+1,ZT0
 1367:					;
 1368:	  04ED	22		ZT1:	RET
 1369:					;
 1370:	  04EE	EE		NUM_LT:	MOV	A,R6		;GET EXPONENT
 1371:	  04EF	C3			CLR	C		;GET READY FOR SUBB
 1372:	  04F0	94 80			SUBB	A,#80H		;SUB EXPONENT BIAS
 1373:	  04F2	50 01			JNC	NL1		;OK IF NO CARRY
 1374:	  04F4	E4			CLR	A		;NO DIGITS LEFT
 1375:					;
 1376:	  04F5	FF		NL1:	MOV	R7,A		;SAVE THE COUNT
 1377:	  04F6	22			RET
 1378:					;
 1379:	  04F7	C3		NUM_RT:	CLR	C		;SUBB AGAIN
 1380:	  04F8	74 80			MOV	A,#80H		;EXPONENT BIAS
 1381:	  04FA	9E			SUBB	A,R6		;GET THE BIASED EXPONENT
 1382:	  04FB	50 01			JNC	NR1
 1383:	  04FD	E4			CLR	A
 1384:					;
 1385:	  04FE	22		NR1:	RET			;EXIT
 1386:					;
 1387:	  04FF	EF		SPACE7:	MOV	A,R7		;GET THE NUMBER OF SPACES
 1388:	  0500	60 FC			JZ	NR1		;EXIT IF ZERO
 1389:	  0502	B1 21			ACALL	SOUT		;OUTPUT A SPACE
 1390:	  0504	1F			DEC	R7		;BUMP COUNTER
 1391:	  0505	80 F8			SJMP	SPACE7		;LOOP
 1392:					;
 1393:	  0507	FF		Z7R7:	MOV	R7,A
 1394:					;
 1395:	  0508	EF		ZERO7:	MOV	A,R7		;GET COUNTER
 1396:	  0509	60 F3			JZ	NR1		;EXIT IF ZERO
 1397:	  050B	B1 1D			ACALL	ZOUT		;OUTPUT A ZERO
 1398:	  050D	1F			DEC	R7		;BUMP COUNTER
 1399:	  050E	80 F8			SJMP	ZERO7		;LOOP
 1400:					;
 1401:	  0510	91 FF		SS7:	ACALL	SPACE7
 1402:					;
 1403:	  0512	EC		SINOUT:	MOV	A,R4		;GET THE SIGN
 1404:	  0513	60 0C			JZ	SOUT		;OUTPUT A SPACE IF ZERO
 1405:					;
 1406:	  0515	7D 2D		MOUT:	MOV	R5,#'-'
 1407:	  0517	80 0A			SJMP	SOUT1		;OUTPUT A MINUS IF NOT
 1408:					;

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 37



 Line  I  Addr  Code            Source

 1409:	  0519	7D 2E		ROUT:	MOV	R5,#'.'		;OUTPUT A RADIX
 1410:	  051B	80 06			SJMP	SOUT1
 1411:					;
 1412:	  051D	7D 30		ZOUT:	MOV	R5,#'0'		;OUTPUT A ZERO
 1413:	  051F	80 02			SJMP	SOUT1
 1414:					;
 1415:	  0521	7D 20		SOUT:	MOV	R5,#' '		;OUTPUT A SPACE
 1416:					;
 1417:	  0523	A1 FF		SOUT1:	AJMP	R5OUT
 1418:					;
 1419:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 38



 Line  I  Addr  Code            Source

 1420:					;***************************************************************
 1421:					;
 1422:	  0525			CONVERT_ASCII_STRING_TO_BINARY:
 1423:					;
 1424:					;DPTR POINTS TO ASCII STRING
 1425:					;PUT THE BINARY NUMBER IN R2:R0, ERROR IF >64K
 1426:					;
 1427:					;***************************************************************
 1428:					;
 1429:	  0525	71 10		CASB:	ACALL	HEXSCAN		;SEE IF HEX NUMBER
 1430:	  0527	92 33			MOV	ADD_IN,C	;IF ADD_IN IS SET, THE NUMBER IS HEX
 1431:	  0529	B1 F2			ACALL	GET_DIGIT_CHECK
 1432:	  052B	B3			CPL	C		;FLIP FOR EXIT
 1433:	  052C	40 28			JC	RCASB
 1434:	  052E	7B 00			MOV	R3,#00H		;ZERO R3:R1 FOR LOOP
 1435:	  0530	79 00			MOV	R1,#00H
 1436:	  0532	80 15			SJMP	CASB5
 1437:					;
 1438:	  0534	A3		CASB2:	INC	DPTR
 1439:	  0535	89 00			MOV	R0B0,R1		;SAVE THE PRESENT CONVERTED VALUE
 1440:	  0537	8B 02			MOV	R0B0+2,R3	;IN R2:R0
 1441:	  0539	B1 F2			ACALL	GET_DIGIT_CHECK
 1442:	  053B	40 0C			JC	CASB5
 1443:	  053D	30 33 16		JNB	ADD_IN,RCASB	;CONVERSION COMPLETE
 1444:	  0540	71 30			ACALL	HEX_CHECK	;SEE IF HEX NUMBER
 1445:	  0542	40 03			JC	CASB4		;PROCEED IF GOOD
 1446:	  0544	A3			INC	DPTR		;BUMP PAST H
 1447:	  0545	80 0F			SJMP	RCASB
 1448:					;
 1449:	  0547	24 09		CASB4:	ADD	A,#9		;ADJUST HEX ASCII BIAS
 1450:					;
 1451:	  0549	75 F0 0A	CASB5:	MOV	B,#10
 1452:	  054C	30 33 03		JNB	ADD_IN,CASB6
 1453:	  054F	75 F0 10		MOV	B,#16		;HEX MODE
 1454:					;
 1455:	  0552	B1 5D		CASB6:	ACALL	MULNUM		;ACCUMULATE THE DIGITS
 1456:	  0554	50 DE			JNC	CASB2		;LOOP IF NO CARRY
 1457:					;
 1458:	  0556	E4		RCASB:	CLR	A		;RESET ACC
 1459:	  0557	92 E1			MOV	ACC.OVERFLOW,C	;IF OVERFLOW, SAY SO
 1460:	  0559	22			RET			;EXIT
 1461:					;
 1462:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 39



 Line  I  Addr  Code            Source

 1463:					;
 1464:	  055A	75 F0 0A	MULNUM10:MOV	B,#10
 1465:					;
 1466:					;***************************************************************
 1467:					;
 1468:	  055D			MULNUM:	; Take the next digit in the acc (masked to 0FH)
 1469:					; accumulate in R3:R1
 1470:					;
 1471:					;***************************************************************
 1472:					;
 1473:	  055D	C0 E0			PUSH	ACC		;SAVE ACC
 1474:	  055F	C0 F0			PUSH	B		;SAVE MULTIPLIER
 1475:	  0561	E9			MOV	A,R1		;PUT LOW ORDER BITS IN ACC
 1476:	  0562	A4			MUL	AB		;DO THE MULTIPLY
 1477:	  0563	F9			MOV	R1,A		;PUT THE RESULT BACK
 1478:	  0564	EB			MOV	A,R3		;GET THE HIGH ORDER BYTE
 1479:	  0565	AB F0			MOV	R3,B		;SAVE THE OVERFLOW
 1480:	  0567	D0 F0			POP	B		;GET THE MULTIPLIER
 1481:	  0569	A4			MUL	AB		;DO IT
 1482:	  056A	A2 D2			MOV	C,OV		;SAVE OVERFLOW IN F0
 1483:	  056C	92 D5			MOV	F0,C
 1484:	  056E	2B			ADD	A,R3		;ADD OVERFLOW TO HIGH RESULT
 1485:	  056F	FB			MOV	R3,A		;PUT IT BACK
 1486:	  0570	D0 E0			POP	ACC		;GET THE ORIGINAL ACC BACK
 1487:	  0572	72 D5			ORL	C,F0		;OR CARRY AND OVERFLOW
 1488:	  0574	40 07			JC	MULX		;NO GOOD IF THE CARRY IS SET
 1489:					;
 1490:	  0576	54 0F		MUL11:	ANL	A,#0FH		;MASK OFF HIGH ORDER BITS
 1491:	  0578	29			ADD	A,R1		;NOW ADD THE ACC
 1492:	  0579	F9			MOV	R1,A		;PUT IT BACK
 1493:	  057A	E4			CLR	A		;PROPAGATE THE CARRY
 1494:	  057B	3B			ADDC	A,R3
 1495:	  057C	FB			MOV	R3,A		;PUT IT BACK
 1496:					;
 1497:	  057D	22		MULX:	RET			;EXIT WITH OR WITHOUT CARRY
 1498:					;
 1499:					;***************************************************************
 1500:					;
 1501:	  057E			CONVERT_BINARY_TO_ASCII_STRING:
 1502:					;
 1503:					;R3:R1 contains the address of the string
 1504:					;R2:R0 contains the value to convert
 1505:					;DPTR, R7, R6, and ACC gets clobbered
 1506:					;
 1507:					;***************************************************************
 1508:					;
 1509:	  057E	E4			CLR	A		;NO LEADING ZEROS
 1510:	  057F	90 27 10		MOV	DPTR,#10000	;SUBTRACT 10000
 1511:	  0582	B1 9B			ACALL	RSUB		;DO THE SUBTRACTION
 1512:	  0584	90 03 E8		MOV	DPTR,#1000	;NOW 1000
 1513:	  0587	B1 9B			ACALL	RSUB
 1514:	  0589	90 00 64		MOV	DPTR,#100	;NOW 100
 1515:	  058

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -