A51 MACRO ASSEMBLER LR1 03/05/2011 18:17:49 PAGE 1 MACRO ASSEMBLER A51 V8.00d OBJECT MODULE PLACED IN lr1.OBJ ASSEMBLER INVOKED BY: C:\Keil\C51.BAK001\BIN\A51.EXE lr1.a SET(SMALL) DEBUG EP LOC OBJ LINE SOURCE ---- 1 dseg at 0x10 0010 2 stack: ds 6 3 4 ; пример int/100=int/10/10 ---- 5 cseg at 0 ;ввод дробного 6 ;преобразование в целое двоичное в масштабе 100*256 0000 75810F 7 mov sp,#stack-1 0003 E590 8 mov a,P1 ; 0005 54F0 9 anl a,#0f0h ;a=0.25-> 25=0x19 0007 C4 10 swap a 0008 75F00A 11 mov b,#10 000B A4 12 mul ab 000C F5F0 13 mov b,a 000E E590 14 mov a,P1 0010 540F 15 anl a,#0fh 0012 25F0 16 add a,b 0014 7A00 17 mov r2,#0 ; a.r0=0x1900 18 19 ;преобразование в дробное в масштабе 256 0016 111B 20 call div10 ;0x1900/10 = 0x280 0018 111B 21 call div10 ;0x280/10=0x40 (0.25)2 001A 00 22 nop 23 001B 24 div10: ;int/10 -"школьный алгоритм" 001B 112F 25 call digit 001D 112F 26 call digit 001F 112F 27 call digit 0021 D0E0 28 pop acc ;a3 0023 C4 29 swap a 0024 F8 30 mov r0,a 0025 D0A0 31 pop P2 ;a2 0027 D0E0 32 pop acc 0029 C4 33 swap a 002A 45A0 34 orl a,P2 ;a1a2 002C F5B0 35 mov p3,a 002E 22 36 ret 37 002F 38 digit: ; ai цифра двоичной дроби a.r0 002F D002 39 pop 02 ; РС из стека ' r2,r3 0031 D003 40 pop 03 0033 75F00A 41 mov b,#10 0036 84 42 div ab 0037 C0E0 43 push acc ;a1,a2.a3 0039 E8 44 mov a,r0 ; 003A 54F0 45 anl a,#0xf0 003C C4 46 swap a ;0x0z 003D F9 47 mov r1,a 003E E5F0 48 mov a,b ;0x5 rest 0040 C4 49 swap a ;0x50 0041 49 50 orl a,r1 ;0x5z 0042 C0E0 51 push acc 0044 E8 52 mov a,r0 ;r0=zv 0045 540F 53 anl a,#0xf ;0v 0047 C4 54 swap a ;v0 0048 F8 55 mov r0,a 0049 D0E0 56 pop acc ;(rest.z).(r0=v0) 004B C003 57 push 03 ;восстановление PC 'стек 004D C002 58 push 02 A51 MACRO ASSEMBLER LR1 03/05/2011 18:17:49 PAGE 2 004F 22 59 ret 60 61 end A51 MACRO ASSEMBLER LR1 03/05/2011 18:17:49 PAGE 3 SYMBOL TABLE LISTING ------ ----- ------- N A M E T Y P E V A L U E ATTRIBUTES ACC. . . . . . . . D ADDR 00E0H A B. . . . . . . . . D ADDR 00F0H A DIGIT. . . . . . . C ADDR 002FH A DIV10. . . . . . . C ADDR 001BH A P1 . . . . . . . . D ADDR 0090H A P2 . . . . . . . . D ADDR 00A0H A P3 . . . . . . . . D ADDR 00B0H A SP . . . . . . . . D ADDR 0081H A STACK. . . . . . . D ADDR 0010H A REGISTER BANK(S) USED: 0 ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)