Mov dx,offset sr

int 21h выполняет прерывание № 21Н программы

call bin2str;вызов процедуры bin2str

mov ax,xd;помещает в регистр AX значение xd

add d,ax ;прибавляет к значению регистра d значение ax,

mov ax,d;присваивает переменной получившееся значение

cmp ax,xk;сравнивает значение AX(+) c (конечное значение)

jle rach;если AX, то переход к метке raschet, jump if less

ret ;конец процедуры

bin2str proc near;процедура bin2str в пределах одного сегмента

mov si,offset sr+54 ;процедура перевода двоичного кода в код ASCII с предварительным обнулением поля

pr2: sub dx,dx ;метка, вычитание dx из dx – обнуление dx

mov [si],dl;помещает значение из dl в [si]

dec si;уменьшение si на 1

cmp si,offset sr;сравнивает si и поле sr, offset возвращает смещение адреса поля

ja pr2;jump if above,смотрится результат предыдущей операции, если выше, то переход к pr2

mov cx,10;помещает число 10 в регистр CX

mov si,offset sr+5

pr1: xor dx,dx ;метка, логическое исключающее ИЛИ

div cx ;делит значение регистра AX на СХ, результат – в DL, остаток – в DH

or dl,30h;логическое сложение операндов, устанавливается 1 в тех битах операнда dl, в которых была 1 хотя бы у одного из операндов

mov [si],dl;помещает значение dl в [si]

dec si;уменьшает значение si на 1

cmp ax,0;ax сравнивается с нулём, признак сравнения записывается в регистр флагов

jne pr1;jump not equal, если ax не равен 0, то переход к метке pr1

ret ;конец процедуры, выход из неё

bin2str endp;конец процедуры bin2str

str2bin proc near;процедура перевода ASCII-кодов в двоичный код в пределах одного сегмента

mov ft10,1;помещает значение 1 в ft10

xor DI,DI;логическое исключающее ИЛИ

mov cx,10;помещает значение 10 в CX

lea si,buf+1

xor bh,bh;логическое исключающее ИЛИ

mov bl,[buf+1] ;помещает значение [buf+1] в bl

pr3: mov al,[si+bx] ;метка, помещает значение [si+bx] в al

and ax,0fh;логическое умножение битов операндов, устанавливается значение 1 в тех битах операнда ax, в которых у обоих операндов были 1

mul ft10;умножение значения регистра AX на ft10,результат–в AX(младшие) и DX(старшие)

add DI,ax;сложение DI и ax, результат – в DI

mov AX,ft10;помещает значение ft10 в регистр AX

mul ten ;умножение значения регистра AX на ten,результат–в AX(младшие) и DX(старшие)

mov ft10,AX;помещает значение регистра AX в ft10

dec bx;уменьшает значение регистра BX на 1

jnz pr3;если BX не равно 0 – переход к pr3, jump not zero

ret ;конец процедуры, выход из неё

str2bin endp;конец процедуры str2bin

main endp;конец главной процедуры main

codesg ends;конец сегмента кода

end main;Закрытие главной процедуры main, сегмента кодов, конец программы

1. После окончания написания программы мы запускаем программу Masm для создания prog.obj

C:\ASS>MASM.EXE

Microsoft (R) Macro Assembler Version 5.10

Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.

Source filename [.ASM]: prog

Object filename [prog.OBJ]: prog

Source listing [NUL.LST]: prog

Cross-reference [NUL.CRF]: prog

49082 + 407970 Bytes symbol space free

0 Warning Errors

0 Severe Errors

2. Затем запускаем программу Link и она создает .EXE файл нашей программы.

C:\ASS>LINK.EXE

Microsoft (R) Overlay Linker Version 3.64

Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

Object Modules [.OBJ]: prog

Run File [PROG.EXE]: prog

List File [NUL.MAP]: prog

Libraries [.LIB]:

3. Затем для просмотра адресации нашей программы мы с помощью Link создаём Листинг нашей программы:

C:\ASS>LINK.EXE

Microsoft (R) Overlay Linker Version 3.64

Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

Object Modules [.OBJ]: prog

Run File [PROG.EXE]: prog

List File [NUL.MAP]: prog

Libraries [.LIB]:

4. При открытии листинга нам предоставляется вся адресация программы:

prog.asm Page 1-1

1 title prog.asm

2 0000 stacksg segment stack

3 0000 0040[ db 64 dup (?)

4 ??

5 ]

7 0040 stacksg ends

8 0000 datasg segment

9 0000 56 76 65 64 69 74 m1 db 'Vvedite X $'

10 65 20 58 20 24

11 000B 0A 0D 24 db 10,13,'$'

12 000E 0A 0D 56 76 65 64 m2 db 10,13,'Vvedite X konech $'

13 69 74 65 20 58 20

14 6B 6F 6E 65 63 68

15 20 24

16 0022 0A 0D 24 db 10,13,'$'

17 0025 0A 0D 56 76 65 64 m22 db 10,13,'Vvedite delta X $'

18 69 74 65 20 64 65

19 6C 74 61 20 58 20

20 24

21 0038 0A 0D 24 db 10,13,'$'

22 003B 20 20 20 20 20 58 m3 db ' X Y $'

23 20 20 20 20 20 20

24 20 20 20 20 20 20

25 20 20 20 59 20 24

26 0053 0A 0D 24 db 10,13,'$'

27 0056 0000 D dw ?

28 0058 0001 yn dw 1

29 005A 0000 N dw ?

30 005C 0000 y dw ?

31 005E 0000 t dw ?

32 0060 0000 xd dw ?

33 0062 0000 xk dw ?

34 0064 0001 ft10 dw 1

35 0066 000A ten dw 10

36 0068 0006[ sr db 6 dup(0),'$'

37 00

38 ]

39 24

40 006F 0A 0D 24 srk db 10,13,'$'

41 0072 000A[ srb db 10 dup (0), '$'

42 00

43 ]

44 24

45 007D 05 00 00 00 00 00 buf db 5,0,0,0,0,0,0,0

46 00 00

47 0085 datasg ends

48 0000 codesg segment

49 assume cs:codesg, ds:datasg, ss:stacksg

50 0000 main proc far

51 0000 1E push ds

52 0001 2B C0 sub ax,ax

53 0003 50 push ax

54 0004 B8 ---- R mov ax,datasg

Microsoft (R) Macro Assembler Version 5.10 12/13/6

prog.asm Page 1-2

55 0007 8E D8 mov ds,ax

56 0009 B4 09 mov ah,9

57 000B BA 0000 R mov dx,offset m1

58 000E CD 21 int 21h

59 0010 B4 0A mov AH,0AH

60 0012 BA 007D R mov dx,offset buf

61 0015 CD 21 int 21h

62 0017 E8 0104 R call str2bin

63 001A 89 3E 0056 R mov d,di

64 001E B4 09 mov ah,9

65 0020 BA 000E R mov dx,offset m2

66 0023 CD 21 int 21h

67 0025 B4 0A mov AH,0AH

68 0027 BA 007D R mov dx,offset buf

69 002A CD 21 int 21h

70 002C E8 0104 R call str2bin

71 002F 89 3E 0062 R mov xk,di

72 0033 B4 09 mov ah,9

73 0035 BA 0025 R mov dx,offset m22

74 0038 CD 21 int 21h

75 003A B4 0A mov AH,0AH

76 003C BA 007D R mov dx,offset buf

77 003F CD 21 int 21h

78 0041 E8 0104 R call str2bin

79 0044 89 3E 0060 R mov xd,di

80 0048 B4 09 mov ah,9

81 004A BA 006F R mov dx,offset srk

82 004D CD 21 int 21h

83 004F B4 09 mov ah,9

84 0051 BA 006F R mov dx,offset srk

85 0054 CD 21 int 21h

86 0056 B4 09 mov ah,9

87 0058 BA 003B R mov dx,offset m3

88 005B CD 21 int 21h

89 005D B4 09 mov ah,9

90 005F BA 006F R mov dx,offset srk

91 0062 CD 21 int 21h

92 0064 A1 0056 R rach: mov AX, D

93 0067 F7 26 0056 R mul D

94 006B A3 005C R mov y,ax

95 006E B8 0002 mov ax,2

96 0071 F7 26 005C R mul y

97 0075 A3 005C R mov y,ax

98 0078 A1 0056 R mov ax,d

99 007B 29 06 005C R sub y,ax

100 007F B8 0003 mov ax,3

101 0082 01 06 005C R add y,ax

102 0086 A1 005C R mov ax,y

103 0089 A1 0056 R mov ax,d

104 008C A3 005A R mov n,ax

105 008F FF 06 005A R inc n

106 0093 A1 005C R mov ax,y

107 0096 F7 36 005A R div n

108 009A A3 005C R mov y,ax

Microsoft (R) Macro Assembler Version 5.10 12/13/6

prog.asm Page 1-3

109 009D B4 09 mov ah,9

110 009F BA 006F R mov dx,offset srk

111 00A2 CD 21 int 21h

112 00A4 A1 0056 R mov ax,d

113 00A7 E8 00E0 R call bin2str

114 00AA B4 09 mov ah,9

115 00AC BA 0068 R mov dx,offset sr

116 00AF CD 21 int 21h

117 00B1 B4 09 mov ah,9

118 00B3 BA 0072 R mov dx,offset srb

119 00B6 CD 21 int 21h

120 00B8 A1 005C R mov ax,y

121 00BB F7 26 0058 R mul yn

122 00BF A3 0058 R mov yn,ax

123 00C2 E8 00E0 R call bin2str

124 00C5 B4 09 mov ah,9

125 00C7 BA 0068 R mov dx,offset sr

126 00CA CD 21 int 21h

127 00CC E8 00E0 R call bin2str

128 00CF A1 0060 R mov ax,xd

129 00D2 01 06 0056 R add d,ax

130 00D6 A1 0056 R mov ax,d

131 00D9 3B 06 0062 R cmp ax,xk

132 00DD 7E 85 jle rach

133 00DF CB ret

134 00E0 bin2str proc near

135 00E0 BE 006D R mov si,offset sr+5

136 00E3 2B D2 pr2: sub dx,dx

137 00E5 88 14 mov [si],dl

138 00E7 4E dec si

139 00E8 81 FE 0068 R cmp si,offset sr

140 00EC 77 F5 ja pr2

141 00EE B9 000A mov cx,10

142 00F1 BE 006D R mov si,offset sr+5

143 00F4 33 D2 pr1: xor dx,dx

144 00F6 F7 F1 div cx

145 00F8 80 CA 30 or dl,30h

146 00FB 88 14 mov [si],dl

147 00FD 4E dec si

148 00FE 3D 0000 cmp ax,0

149 0101 75 F1 jne pr1

150 0103 C3 ret

151 0104 bin2str endp

152 0104 str2bin proc near

153 0104 C7 06 0064 R 0001 mov ft10,1

154 010A 33 FF xor DI,DI

155 010C B9 000A mov cx,10

156 010F 8D 36 007E R lea si,buf+1

157 0113 32 FF xor bh,bh

158 0115 8A 1E 007E R mov bl,[buf+1]

159 0119 8A 00 pr3: mov al,[si+bx]

160 011B 25 000F and ax,0fh

161 011E F7 26 0064 R mul ft10

162 0122 03 F8 add DI,ax

Microsoft (R) Macro Assembler Version 5.10 12/13/6

prog.asm Page 1-4

163 0124 A1 0064 R mov AX,ft10

164 0127 F7 26 0066 R mul ten

165 012B A3 0064 R mov ft10,AX

166 012E 4B dec bx

167 012F 75 E8 jnz pr3

168 0131 C3 ret

169 0132 str2bin endp

170 0132 main endp

171 0132 codesg ends

172 end main

Microsoft (R) Macro Assembler Version 5.10 12/13/6

prog.asm Symbols-1

Segments and Groups:

N a m e Length Align Combine Class

CODESG . . . . . . . . . . . . . 0132 PARA NONE

DATASG . . . . . . . . . . . . . 0085 PARA NONE

STACKSG . . . . . . . . . . . . 0040 PARA STACK

Symbols:

N a m e Type Value Attr

BIN2STR . . . . . . . . . . . . N PROC 00E0 CODESG Length = 0024

BUF . . . . . . . . . . . . . . L BYTE 007D DATASG

D . . . . . . . . . . . . . . . L WORD 0056 DATASG

FT10 . . . . . . . . . . . . . . L WORD 0064 DATASG

M1 . . . . . . . . . . . . . . . L BYTE 0000 DATASG

M2 . . . . . . . . . . . . . . . L BYTE 000E DATASG

M22 . . . . . . . . . . . . . . L BYTE 0025 DATASG

M3 . . . . . . . . . . . . . . . L BYTE 003B DATASG

MAIN . . . . . . . . . . . . . . F PROC 0000 CODESG Length = 0132

N . . . . . . . . . . . . . . . L WORD 005A DATASG

PR1 . . . . . . . . . . . . . . L NEAR 00F4 CODESG

PR2 . . . . . . . . . . . . . . L NEAR 00E3 CODESG

PR3 . . . . . . . . . . . . . . L NEAR 0119 CODESG

RACH . . . . . . . . . . . . . . L NEAR 0064 CODESG

SR . . . . . . . . . . . . . . . L BYTE 0068 DATASG Length = 0006

SRB . . . . . . . . . . . . . . L BYTE 0072 DATASG Length = 000A

SRK . . . . . . . . . . . . . . L BYTE 006F DATASG

STR2BIN . . . . . . . . . . . . N PROC 0104 CODESG Length = 002E

T . . . . . . . . . . . . . . . L WORD 005E DATASG

TEN . . . . . . . . . . . . . . L WORD 0066 DATASG

XD . . . . . . . . . . . . . . . L WORD 0060 DATASG

XK . . . . . . . . . . . . . . . L WORD 0062 DATASG

Y . . . . . . . . . . . . . . . L WORD 005C DATASG

YN . . . . . . . . . . . . . . . L WORD 0058 DATASG

@CPU . . . . . . . . . . . . . . TEXT 0101h

@FILENAME . . . . . . . . . . . TEXT prog

@VERSION . . . . . . . . . . . . TEXT 510

Microsoft (R) Macro Assembler Version 5.10 12/13/6

prog.asm Symbols-2

152 Source Lines

152 Total Lines

32 Symbols

46068 + 442265 Bytes symbol space free

0 Warning Errors

0 Severe Errors

Наши рекомендации