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