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

📄 fp-52.lst

📁 一个用PROTEUS搭建的51单片机的基本运行系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1198:					; If here, must be integer USING format
 1199:					;
 1200:	  1D9B	EE			MOV	A,R6		;GET THE EXPONENT
 1201:	  1D9C	70 02			JNZ	$+4
 1202:	  1D9E	7E 80			MOV	R6,#80H
 1203:	  1DA0	EB			MOV	A,R3		;GET THE FORMAT
 1204:	  1DA1	C4			SWAP	A		;SPLIT INTEGER AND FRACTION
 1205:	  1DA2	54 0F			ANL	A,#0FH
 1206:	  1DA4	FA			MOV	R2,A		;SAVE INTEGER
 1207:	  1DA5	D1 74			ACALL	NUM_LT		;GET THE NUMBER OF INTEGERS
 1208:	  1DA7	CA			XCH	A,R2		;FLIP FOR SUBB
 1209:	  1DA8	C3			CLR	C
 1210:	  1DA9	9A			SUBB	A,R2
 1211:	  1DAA	FF			MOV	R7,A
 1212:	  1DAB	50 06			JNC	$+8
 1213:	  1DAD	7D 3F			MOV	R5,#'?'		;OUTPUT A QUESTION MARK
 1214:	  1DAF	D1 A9			ACALL	SOUT1		;NUMBER IS TOO LARGE FOR FORMAT
 1215:	  1DB1	A1 DF			AJMP	FREE
 1216:	  1DB3	BA 00 07		CJNE	R2,#00,USING0	;SEE IF ZERO
 1217:	  1DB6	1F			DEC	R7
 1218:	  1DB7	D1 96			ACALL	SS7
 1219:	  1DB9	D1 A3			ACALL	ZOUT		;OUTPUT A ZERO
 1220:	  1DBB	80 06			SJMP	USING1
 1221:					;
 1222:	  1DBD	D1 96		USING0:	ACALL	SS7		;OUTPUT SPACES, IF NEED TO
 1223:	  1DBF	EA			MOV	A,R2		;OUTPUT DIGITS
 1224:	  1DC0	FF			MOV	R7,A
 1225:	  1DC1	D1 58			ACALL	OUTR0
 1226:					;
 1227:	  1DC3	EB		USING1:	MOV	A,R3
 1228:	  1DC4	54 0F			ANL	A,#0FH		;GET THE NUMBER RIGHT OF DP
 1229:	  1DC6	FA			MOV	R2,A		;SAVE IT
 1230:	  1DC7	60 BD			JZ	PMT1		;EXIT IF ZERO

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 35



 Line  I  Addr  Code            Source

 1231:	  1DC9	D1 9F			ACALL	ROUT		;OUTPUT DP
 1232:	  1DCB	D1 7D			ACALL	NUM_RT
 1233:	  1DCD	B5 02 03		CJNE	A,2,USINGX	;COMPARE A TO R2
 1234:					;
 1235:	  1DD0	EA		USINGY:	MOV	A,R2
 1236:	  1DD1	C1 8D			AJMP	Z7R7
 1237:					;
 1238:	  1DD3	50 FB		USINGX:	JNC	USINGY
 1239:					;
 1240:	  1DD5	CA		USING2:	XCH	A,R2
 1241:	  1DD6	C3			CLR	C
 1242:	  1DD7	9A			SUBB	A,R2
 1243:	  1DD8	CA			XCH	A,R2
 1244:	  1DD9	D1 8D			ACALL	Z7R7		;OUTPUT ZEROS IF NEED TO
 1245:	  1DDB	EA			MOV	A,R2
 1246:	  1DDC	FF			MOV	R7,A
 1247:	  1DDD	C1 58			AJMP	OUTR0
 1248:					;
 1249:					; First, force exponential output, if need to
 1250:					;
 1251:	  1DDF	EE		FREE:	MOV	A,R6		;GET THE EXPONENT
 1252:	  1DE0	70 04			JNZ	FREE1		;IF ZERO, PRINT IT
 1253:	  1DE2	D1 A7			ACALL	SOUT
 1254:	  1DE4	C1 A3			AJMP	ZOUT
 1255:					;
 1256:	  1DE6	7B F0		FREE1:	MOV	R3,#0F0H	;IN CASE EXP NEEDED
 1257:	  1DE8	74 77			MOV	A,#80H-DIGIT-DIGIT-1
 1258:	  1DEA	2E			ADD	A,R6
 1259:	  1DEB	40 21			JC	EXPOUT
 1260:	  1DED	94 F7			SUBB	A,#0F7H
 1261:	  1DEF	40 1D			JC	EXPOUT
 1262:					;
 1263:					; Now, just print the number
 1264:					;
 1265:	  1DF1	D1 98			ACALL	SINOUT		;PRINT THE SIGN OF THE NUMBER
 1266:	  1DF3	D1 74			ACALL	NUM_LT		;GET THE NUMBER LEFT OF DP
 1267:	  1DF5	B4 08 02		CJNE	A,#8,FREE4
 1268:	  1DF8	C1 58			AJMP	OUTR0
 1269:					;
 1270:	  1DFA	D1 58		FREE4:	ACALL	OUTR0
 1271:	  1DFC	D1 6A			ACALL	ZTEST		;TEST FOR TRAILING ZEROS
 1272:	  1DFE	60 57			JZ	U_RET		;DONE IF ALL TRAILING ZEROS
 1273:	  1E00	D1 9F			ACALL	ROUT		;OUTPUT RADIX
 1274:					;
 1275:	  1E02	7F 01		FREE2:	MOV	R7,#1		;OUTPUT ONE DIGIT
 1276:	  1E04	D1 58			ACALL	OUTR0
 1277:	  1E06	70 4F			JNZ	U_RET
 1278:	  1E08	D1 6A			ACALL	ZTEST
 1279:	  1E0A	60 4B			JZ	U_RET
 1280:	  1E0C	80 F4			SJMP	FREE2		;LOOP
 1281:					;
 1282:	  1E0E	D1 98		EXPOUT:	ACALL	SINOUT		;PRINT THE SIGN
 1283:	  1E10	7F 01			MOV	R7,#1		;OUTPUT ONE CHARACTER
 1284:	  1E12	D1 58			ACALL	OUTR0
 1285:	  1E14	D1 9F			ACALL	ROUT		;OUTPUT RADIX
 1286:	  1E16	EB			MOV	A,R3		;GET FORMAT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 36



 Line  I  Addr  Code            Source

 1287:	  1E17	54 0F			ANL	A,#0FH		;STRIP INDICATOR
 1288:	  1E19	60 06			JZ	EXPOTX
 1289:					;
 1290:	  1E1B	FF			MOV	R7,A		;OUTPUT THE NUMBER OF DIGITS
 1291:	  1E1C	1F			DEC	R7		;ADJUST BECAUSE ONE CHAR ALREADY OUT
 1292:	  1E1D	D1 58			ACALL	OUTR0
 1293:	  1E1F	80 02			SJMP	EXPOT4
 1294:					;
 1295:	  1E21	D1 02		EXPOTX:	ACALL	FREE2		;OUTPUT UNTIL TRAILING ZEROS
 1296:					;
 1297:	  1E23	D1 A7		EXPOT4:	ACALL	SOUT		;OUTPUT A SPACE
 1298:	  1E25	7D 45			MOV	R5,#'E'
 1299:	  1E27	D1 A9			ACALL	SOUT1		;OUTPUT AN E
 1300:	  1E29	EE			MOV	A,R6		;GET THE EXPONENT
 1301:	  1E2A	60 04			JZ	XOUT0		;EXIT IF ZERO
 1302:	  1E2C	14			DEC	A		;ADJUST FOR THE DIGIT ALREADY OUTPUT
 1303:	  1E2D	B4 80 05		CJNE	A,#80H,XOUT2	;SEE WHAT IT IS
 1304:					;
 1305:	  1E30	D1 A7		XOUT0:	ACALL	SOUT
 1306:	  1E32	E4			CLR	A
 1307:	  1E33	80 0C			SJMP	XOUT4
 1308:					;
 1309:	  1E35	40 06		XOUT2:	JC	XOUT3		;NEGATIVE EXPONENT
 1310:	  1E37	7D 2B			MOV	R5,#'+'		;OUTPUT A PLUS SIGN
 1311:	  1E39	D1 A9			ACALL	SOUT1
 1312:	  1E3B	80 04			SJMP	XOUT4
 1313:					;
 1314:	  1E3D	D1 9B		XOUT3:	ACALL	MOUT
 1315:	  1E3F	F4			CPL	A		;FLIP BITS
 1316:	  1E40	04			INC	A		;BUMP
 1317:					;
 1318:	  1E41	C2 E7		XOUT4:	CLR	ACC.7
 1319:	  1E43	F8			MOV	R0,A
 1320:	  1E44	7A 00			MOV	R2,#0
 1321:	  1E46	79 58			MOV	R1,#LOW CONVT	;CONVERSION LOCATION
 1322:	  1E48	7B 00			MOV	R3,#HIGH CONVT
 1323:	  1E4A	F1 04			ACALL	CONVERT_BINARY_TO_ASCII_STRING
 1324:	  1E4C	78 58			MOV	R0,#LOW CONVT	;NOW, OUTPUT EXPONENT
 1325:					;
 1326:	  1E4E	E2		EXPOT5:	MOVX	A,@R0		;GET THE CHARACTER
 1327:	  1E4F	FD			MOV	R5,A		;OUTPUT IT
 1328:	  1E50	D1 A9			ACALL	SOUT1
 1329:	  1E52	08			INC	R0		;BUMP THE POINTER
 1330:	  1E53	E8			MOV	A,R0		;GET THE POINTER
 1331:	  1E54	B5 01 F7		CJNE	A,R1B0,EXPOT5	;LOOP
 1332:					;
 1333:	  1E57	22		U_RET:	RET			;EXIT
 1334:					;
 1335:	  1E58			OUTR0:	; Output the characters pointed to by R0, also bias ascii
 1336:					;
 1337:	  1E58	EF			MOV	A,R7		;GET THE COUNTER
 1338:	  1E59	60 0E			JZ	OUTR		;EXIT IF DONE
 1339:	  1E5B	E6			MOV	A,@R0		;GET THE NUMBER
 1340:	  1E5C	44 30			ORL	A,#30H		;ASCII BIAS
 1341:	  1E5E	08			INC	R0		;BUMP POINTER AND COUNTER
 1342:	  1E5F	1F			DEC	R7

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 37



 Line  I  Addr  Code            Source

 1343:	  1E60	FD			MOV	R5,A		;PUT CHARACTER IN OUTPUT REGISTER
 1344:	  1E61	D1 A9			ACALL	SOUT1		;OUTPUT THE CHARACTER
 1345:	  1E63	E4			CLR	A		;JUST FOR TEST
 1346:	  1E64	B8 33 F1		CJNE	R0,#FP_NIB8+1,OUTR0
 1347:	  1E67	74 55			MOV	A,#55H		;KNOW WHERE EXIT OCCURED
 1348:					;
 1349:	  1E69	22		OUTR:	RET
 1350:					;
 1351:	  1E6A	A9 00		ZTEST:	MOV	R1,R0B0		;GET POINTER REGISTER
 1352:					;
 1353:	  1E6C	E7		ZT0:	MOV	A,@R1		;GET THE VALUE
 1354:	  1E6D	70 04			JNZ	ZT1
 1355:	  1E6F	09			INC	R1		;BUMP POINTER
 1356:	  1E70	B9 33 F9		CJNE	R1,#FP_NIB8+1,ZT0
 1357:					;
 1358:	  1E73	22		ZT1:	RET
 1359:					;
 1360:	  1E74	EE		NUM_LT:	MOV	A,R6		;GET EXPONENT
 1361:	  1E75	C3			CLR	C		;GET READY FOR SUBB
 1362:	  1E76	94 80			SUBB	A,#80H		;SUB EXPONENT BIAS
 1363:	  1E78	50 01			JNC	NL1		;OK IF NO CARRY
 1364:	  1E7A	E4			CLR	A		;NO DIGITS LEFT
 1365:					;
 1366:	  1E7B	FF		NL1:	MOV	R7,A		;SAVE THE COUNT
 1367:	  1E7C	22			RET
 1368:					;
 1369:	  1E7D	C3		NUM_RT:	CLR	C		;SUBB AGAIN
 1370:	  1E7E	74 80			MOV	A,#80H		;EXPONENT BIAS
 1371:	  1E80	9E			SUBB	A,R6		;GET THE BIASED EXPONENT
 1372:	  1E81	50 01			JNC	NR1
 1373:	  1E83	E4			CLR	A
 1374:					;
 1375:	  1E84	22		NR1:	RET			;EXIT
 1376:					;
 1377:	  1E85	EF		SPACE7:	MOV	A,R7		;GET THE NUMBER OF SPACES
 1378:	  1E86	60 FC			JZ	NR1		;EXIT IF ZERO
 1379:	  1E88	D1 A7			ACALL	SOUT		;OUTPUT A SPACE
 1380:	  1E8A	1F			DEC	R7		;BUMP COUNTER
 1381:	  1E8B	80 F8			SJMP	SPACE7		;LOOP
 1382:					;
 1383:	  1E8D	FF		Z7R7:	MOV	R7,A
 1384:					;
 1385:	  1E8E	EF		ZERO7:	MOV	A,R7		;GET COUNTER
 1386:	  1E8F	60 F3			JZ	NR1		;EXIT IF ZERO
 1387:	  1E91	D1 A3			ACALL	ZOUT		;OUTPUT A ZERO
 1388:	  1E93	1F			DEC	R7		;BUMP COUNTER
 1389:	  1E94	80 F8			SJMP	ZERO7		;LOOP
 1390:					;
 1391:	  1E96	D1 85		SS7:	ACALL	SPACE7
 1392:					;
 1393:	  1E98	EC		SINOUT:	MOV	A,R4		;GET THE SIGN
 1394:	  1E99	60 0C			JZ	SOUT		;OUTPUT A SPACE IF ZERO
 1395:					;
 1396:	  1E9B	7D 2D		MOUT:	MOV	R5,#'-'
 1397:	  1E9D	80 0A			SJMP	SOUT1		;OUTPUT A MINUS IF NOT
 1398:					;

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 38



 Line  I  Addr  Code            Source

 1399:	  1E9F	7D 2E		ROUT:	MOV	R5,#'.'		;OUTPUT A RADIX
 1400:	  1EA1	80 06			SJMP	SOUT1
 1401:					;
 1402:	  1EA3	7D 30		ZOUT:	MOV	R5,#'0'		;OUTPUT A ZERO
 1403:	  1EA5	80 02			SJMP	SOUT1
 1404:					;
 1405:	  1EA7	7D 20		SOUT:	MOV	R5,#' '		;OUTPUT A SPACE
 1406:					;
 1407:	  1EA9	21 90		SOUT1:	AJMP	OUTPUT
 1408:					;
 1409:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 39



 Line  I  Addr  Code            Source

 1410:					;***************************************************************
 1411:					;
 1412:	  1EAB			CONVERT_ASCII_STRING_TO_BINARY:
 1413:					;
 1414:					;DPTR POINTS TO ASCII STRING
 1415:					;PUT THE BINARY NUMBER IN R2:R0, ERROR IF >64K
 1416:					;
 1417:					;***************************************************************
 1418:					;
 1419:	  1EAB	91 96		CASB:	ACALL	HEXSCAN		;SEE IF HEX NUMBER
 1420:	  1EAD	92 23			MOV	ADD_IN,C	;IF ADD_IN IS SET, THE NUMBER IS HEX
 1421:	  1EAF	F1 EB			ACALL	GET_DIGIT_CHECK
 1422:	  1EB1	B3			CPL	C		;FLIP FOR EXIT
 1423:	  1EB2	40 28			JC	RCASB
 1424:	  1EB4	7B 00			MOV	R3,#00H		;ZERO R3:R1 FOR LOOP
 1425:	  1EB6	79 00			MOV	R1,#00H
 1426:	  1EB8	80 15			SJMP	CASB5
 1427:					;
 1428:	  1EBA	A3		CASB2:	INC	DPTR
 1429:	  1EBB	89 00			MOV	R0B0,R1		;SAVE THE PRESENT CONVERTED VALUE
 1430:	  1EBD	8B 02			MOV	R0B0+2,R3	;IN R2:R0
 1431:	  1EBF	F1 EB			ACALL	GET_DIGIT_CHECK
 1432:	  1EC1	40 0C			JC	CASB5
 1433:	  1EC3	30 23 16		JNB	ADD_IN,RCASB	;CONVERSION COMPLETE
 1434:	  1EC6	91 B6			ACALL	HEX_CHECK	;SEE IF HEX NUMBER
 1435:	  1EC8	40 03			JC	CASB4		;PROCEED IF GOOD
 1436:	  1ECA	A3			INC	DPTR		;BUMP PAST H
 1437:	  1ECB	80 0F			SJMP	RCASB
 1438:					;
 1439:	  1ECD	24 09		CASB4:	ADD	A,#9		;ADJUST HEX ASCII BIAS
 1440:					;
 1441:	  1ECF	75 F0 0A	CASB5:	MOV	B,#10
 1442:	  1ED2	30 23 03		JNB	ADD_IN,CASB6
 1443:	  1ED5	75 F0 10		MOV	B,#16		;HEX MODE
 1444:					;
 1445:	  1ED8	D1 E3		CASB6:	ACALL	MULNUM		;ACCUMULATE THE DIGITS
 1446:	  1EDA	50 DE			JNC	CASB2		;LOOP IF NO CARRY
 1447:					;
 1448:	  1EDC	E4		RCASB:	CLR	A		;RESET ACC
 1449:	  1EDD	92 E1			MOV	ACC.OVERFLOW,C	;IF OVERFLOW, SAY SO
 1450:	  1EDF	22			RET			;EXIT
 1451:					;
 1452:				$EJECT

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 40



 Line  I  Addr  Code            Source

 1453:					;
 1454:	  1EE0	75 F0 0A	MULNUM10:MOV	B,#10
 1455:					;
 1456:					;***************************************************************
 1457:					;
 1458:	  1EE3			MULNUM:	; Take the next digit in the acc (masked to 0FH)
 1459:					; accumulate in R3:R1
 1460:					;
 1461:					;***************************************************************
 1462:					;
 1463:	  1EE3	C0 E0			PUSH	ACC		;SAVE ACC
 1464:	  1EE5	C0 F0			PUSH	B		;SAVE MULTIPLIER
 1465:	  1EE7	E9			MOV	A,R1		;PUT LOW ORDER BITS IN ACC
 1466:	  1EE8	A4			MUL	AB		;DO THE MULTIPLY
 1467:	  1EE9	F9			MOV	R1,A		;PUT THE RESULT BACK
 1468:	  1EEA	EB			MOV	A,R3		;GET THE HIGH ORDER BYTE
 1469:	  1EEB	AB F0			MOV	R3,B		;SAVE THE OVERFLOW
 1470:	  1EED	D0 F0			POP	B		;GET THE MULTIPLIER
 1471:	  1EEF	A4			MUL	AB		;DO IT
 1472:	  1EF0	A2 D2			MOV	C,OV		;SAVE OVERFLOW IN F0
 1473:	  1EF2	92 D5			MOV	F0,C
 1474:	  1EF4	2B			ADD	A,R3		;ADD OVERFLOW TO HIGH RESULT
 1475:	  1EF5	FB			MOV	R3,A		;PUT IT BACK
 1476:	  1EF6	D0 E0			POP	ACC		;GET THE ORIGINAL ACC BACK
 1477:	  1EF8	72 D5			ORL	C,F0		;OR CARRY AND OVERFLOW
 1478:	  1EFA	40 07			JC	MULX		;NO GOOD IF THE CARRY IS SET
 1479:					;
 1480:	  1EFC	54 0F		MUL11:	ANL	A,#0FH		;MASK OFF HIGH ORDER BITS
 1481:	  1EFE	29			ADD	A,R1		;NOW ADD THE ACC
 1482:	  1EFF	F9			MOV	R1,A		;PUT IT BACK
 1483:	  1F00	E4			CLR	A		;PROPAGATE THE CARRY
 1484:	  1F01	3B			ADDC	A,R3
 1485:	  1F02	FB			MOV	R3,A		;PUT IT BACK
 1486:					;
 1487:	  1F03	22		MULX:	RET			;EXIT WITH OR WITHOUT CARRY
 1488:					;
 1489:					;***************************************************************
 1490:					;
 1491:	  1F04			CONVERT_BINARY_TO_ASCII_STRING:
 1492:					;
 1493:					;R3:R1 contains the address of the string
 1494:					;R2:R0 contains the value to convert
 1495:					;DPTR, R7, R6, and ACC gets clobbered
 1496:					;
 1497:					;***************************************************************
 1498:					;
 1499:	  1F04	E4			CLR	A		;NO LEADING ZEROS
 1500:	  1F05	90 27 10		MOV	DPTR,#10000	;SUBTRACT 10000
 1501:	  1F08	F1 21			ACALL	RSUB		;DO THE SUBTRACTION
 1502:	  1F0A	90 03 E8		MOV	DPTR,#1000	;NOW 1000
 1503:	  1F0D	F1 21			ACALL	RSUB
 1504:	  1F0F	90 00 64		MOV	DPTR,#100	;NOW 100
 1505:	  1F12	F1 21			ACALL	RSUB
 1506:	  1F14	90 00 0A		MOV	DPTR,#10	;NOW 10
 1507:	  1F17	F1 21			ACALL	RSUB
 1508:	  1F19	90 00 01		MOV	DPTR,#1		;NOW 1

ASEM-51 V1.2                                        Copyright (c) 1996 by W.W. Heinz                                         PAGE 41



 Line  I  Addr  Code            Source

 1509:	  1F1C	F1 21			ACALL	RSUB
 151

⌨️ 快捷键说明

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