Узнать максимальный и минимальный размер двоично-десятичного числа - Assembler
Формулировка задачи:
Всем привет. В общем, тут такое дело. Нужно узнать максимальный и минимальный размер двоично-десятичного числа(точнее, двоично-десятичных чисел). Если можно, объясните, почему. Заранее спасибо
Минимальный размер 1 байт, это я понял, если что
Решение задачи: «Узнать максимальный и минимальный размер двоично-десятичного числа»
textual
Листинг программы
Turbo Assembler Version 3.1 08/01/14 11:47:50 Page 1 9.asm 1 0000 model small 2 0000 stack 6h 3 0000 .data 4 0000 10*(00) b db 16 dup (0) 5 0010 10*(00) c db 16 dup (0) 6 0020 11*(00) sum db 17 dup (0) 7 0031 0000 len_b dw 0 8 0033 0000 len_c dw 0 9 0035 0000 len_sum dw 0 10 0037 .code 11 0000 main: 12 0000 B8 0000s mov ax,@data 13 0003 8E D8 mov ds,ax 14 0005 BE 0000 mov si,0 15 ;-------------------определение длины чисел------------ 16 0008 cicle: 17 0008 26: 8A BC 0081 mov bh,es:[0081h]+[si] 18 000D 80 FF 20 cmp bh,20h 19 0010 75 03 jne num1_len 20 0012 46 inc si 21 0013 EB F3 jmp cicle 22 0015 num1_len: 23 0015 26: 8A AC 0081 mov ch,es:[0081h]+[si] 24 001A 46 inc si 25 001B 80 FD 20 cmp ch,20h 26 001E 74 06 je num2_len 27 0020 FF 06 0031r inc len_b 28 0024 EB EF jmp num1_len 29 0026 num2_len: 30 0026 26: 8A AC 0081 mov ch,es:[0081h]+[si] 31 002B 46 inc si 32 002C 80 FD 0D cmp ch,0Dh 33 002F 74 06 je correct_length 34 0031 FF 06 0033r inc len_c 35 0035 EB EF jmp num2_len 36 ;----------корректировка длин чисел и длины суммы------- 37 0037 correct_length: 38 0037 33 F6 xor si,si 39 0039 8B 16 0031r mov dx,len_b 40 003D 3B 16 0033r cmp dx,len_c 41 0041 77 12 ja def_length_sum 42 0043 A1 0033r mov ax,len_c 43 0046 40 inc ax 44 0047 A3 0035r mov len_sum,ax 45 004A FF 0E 0031r dec len_b 46 004E FF 0E 0033r dec len_c 47 0052 EB 10 90 jmp cycl 48 0055 def_length_sum: 49 0055 A1 0031r mov ax,len_b 50 0058 40 inc ax 51 0059 A3 0035r mov len_sum,ax 52 005C FF 0E 0031r dec len_b 53 0060 FF 0E 0033r dec len_c 54 ;--------------------работа с PSP---------------------- 55 0064 cycl: 56 0064 26: 8A BC 0081 mov bh,es:[0081h]+[si] 57 0069 80 FF 20 cmp bh,20h Turbo Assembler Version 3.1 08/01/14 11:47:50 Page 2 9.asm 58 006C 75 03 jne correct_first 59 006E 46 inc si 60 006F EB F3 jmp cycl 61 0071 correct_first: 62 0071 8B 1E 0031r mov bx,len_b 63 0075 EB 01 90 jmp first 64 0078 first: 65 0078 26: 8A AC 0081 mov ch,es:[0081h]+[si] 66 007D 46 inc si 67 007E 88 AF 0000r mov b[bx],ch 68 0082 83 FB 00 cmp bx,0 69 0085 74 03 je correct_second 70 0087 4B dec bx 71 0088 EB EE jmp first 72 008A correct_second: 73 008A 8B 1E 0033r mov bx,len_c 74 008E 46 inc si 75 008F EB 01 90 jmp second 76 0092 second: 77 0092 26: 8A AC 0081 mov ch,es:[0081h]+[si] 78 0097 46 inc si 79 0098 88 AF 0010r mov c[bx],ch 80 009C 83 FB 00 cmp bx,0 81 009F 74 03 je ascii_1 82 00A1 4B dec bx 83 00A2 EB EE jmp second 84 ;--------------------перевод в BCD - формат------------- 85 00A4 ascii_1: 86 00A4 8B 36 0031r mov si,len_b 87 00A8 ascii_num1: 88 00A8 8A BC 0000r mov bh,b[si] 89 00AC 80 EF 30 sub bh,30h 90 00AF 88 BC 0000r mov b[si],bh 91 00B3 83 FE 00 cmp si,0 92 00B6 74 03 je ascii_2 93 00B8 4E dec si 94 00B9 EB ED jmp ascii_num1 95 00BB ascii_2: 96 00BB 8B 36 0033r mov si,len_c 97 00BF ascii_num2: 98 00BF 8A BC 0010r mov bh,c[si] 99 00C3 80 EF 30 sub bh,30h 100 00C6 88 BC 0010r mov c[si],bh 101 00CA 83 FE 00 cmp si,0 102 00CD 74 03 je adding 103 00CF 4E dec si 104 00D0 EB ED jmp ascii_num2 105 ;------------------сложение--------------------------- 106 00D2 adding: 107 00D2 33 DB xor bx,bx 108 00D4 8B 0E 0035r mov cx,len_sum 109 00D8 m: 110 00D8 8A 87 0000r mov al,b[bx] 111 00DC 12 87 0010r adc al,c[bx] 112 00E0 37 aaa 113 00E1 88 87 0020r mov sum[bx],al 114 00E5 43 inc bx Turbo Assembler Version 3.1 08/01/14 11:47:50 Page 3 9.asm 115 00E6 E2 F0 loop m 116 00E8 80 97 0020r 00 adc sum[bx],0 117 ;--------------перевод в ASCII вывод на экран------------ 118 00ED FF 0E 0035r dec len_sum 119 00F1 33 F6 xor si,si 120 00F3 8B 36 0035r mov si,len_sum 121 00F7 B4 02 mov ah,02h 122 123 00F9 8A 94 0020r mov dl,sum[si] 124 00FD 80 FA 00 cmp dl,0 125 0100 74 03 je cors 126 0102 EB 02 90 jmp print 127 0105 cors: 128 0105 4E dec si 129 0106 print: 130 0106 8A 94 0020r mov dl,sum[si] 131 010A 80 C2 30 add dl,30h 132 010D 88 94 0020r mov sum[si],dl 133 0111 CD 21 int 21h 134 0113 83 FE 00 cmp si,0 135 0116 74 03 je exit 136 0118 4E dec si 137 0119 EB EB jmp print 138 011B exit: 139 011B B8 4C00 mov ax,4c00h 140 011E CD 21 int 21h 141 end main Turbo Assembler Version 3.1 08/01/14 11:47:50 Page 4 Symbol Table Symbol Name Type Value Cref (defined at #) ??DATE Text "08/01/14" ??FILENAME Text "9 " ??TIME Text "11:47:50" ??VERSION Number 030A @32BIT Text 0 #1 @CODE Text _TEXT #1 #1 #10 @CODESIZE Text 0 #1 @CPU Text 0101H @CURSEG Text _TEXT #3 #10 @DATA Text DGROUP #1 12 @DATASIZE Text 0 #1 @FILENAME Text 9 @INTERFACE Text 00H #1 @MODEL Text 2 #1 @STACK Text DGROUP #1 @WORDSIZE Text 2 #3 #10 ADDING Near _TEXT:00D2 102 #106 ASCII_1 Near _TEXT:00A4 81 #85 ASCII_2 Near _TEXT:00BB 92 #95 ASCII_NUM1 Near _TEXT:00A8 #87 94 ASCII_NUM2 Near _TEXT:00BF #97 104 B Byte DGROUP:0000 #4 67 88 90 110 C Byte DGROUP:0010 #5 79 98 100 111 CICLE Near _TEXT:0008 #16 21 CORRECT_FIRST Near _TEXT:0071 58 #61 CORRECT_LENGTH Near _TEXT:0037 33 #37 CORRECT_SECOND Near _TEXT:008A 69 #72 CORS Near _TEXT:0105 125 #127 CYCL Near _TEXT:0064 47 #55 60 DEF_LENGTH_SUM Near _TEXT:0055 41 #48 EXIT Near _TEXT:011B 135 #138 FIRST Near _TEXT:0078 63 #64 71 LEN_B Word DGROUP:0031 #7 27 39 45 49 52 62 86 LEN_C Word DGROUP:0033 #8 34 40 42 46 53 73 96 LEN_SUM Word DGROUP:0035 #9 44 51 108 118 120 M Near _TEXT:00D8 #109 115 MAIN Near _TEXT:0000 #11 141 NUM1_LEN Near _TEXT:0015 19 #22 28 NUM2_LEN Near _TEXT:0026 26 #29 35 PRINT Near _TEXT:0106 126 #129 137 SECOND Near _TEXT:0092 75 #76 83 SUM Byte DGROUP:0020 #6 113 116 123 130 132 Groups & Segments Bit Size Align Combine Class Cref (defined at #) DGROUP Group #1 1 12 STACK 16 0006 Para Stack STACK #2 _DATA 16 0037 Word Public DATA #1 #3 _TEXT 16 0120 Word Public CODE #1 1 #10 10