Написание программы, позволяющей осуществлять ввод с клавиатуры двоичных чисел и их вычитание, страница 2

cs:02D1 pop

cx

cs:02D2 pop

cx

cs:02D3 push

ax

cs:02D4 mov

ax, di

cs:02D6 dec

ax

cs:02D7 push

ax

cs:02D8 mov

ax, si

cs:02DA dec

ax

cs:02DB push

ax

cs:02DC call

b

cs:02DF pop

cx

cs:02E0 pop

cx

cs:02E1 pop

dx

cs:02E2 add

dx, ax

cs:02E4 mov

ax, dx

cs:02E6 jmp

#LABA3#15 (02E8)

#LABA3#15

cs:02E8 pop

di

cs:02E9 pop

si

cs:02EA pop

bp

cs:02EB ret

}

_main

cs:02EC push

bp

int main(int argc, char **argv){

cs:02ED mov

bp, sp

int i;

cs:02EF sub

sp, 0002

cs:02F2 push

si

cs:02F3 mov

si, [bp+06]

#LABA3#20

cs:02F6 cmp

word ptr [bp+04], 0003

if (argc != 3)

cs:02FA je

#LABA3#22 (0301)

#LABA3#21

cs:02FC mov

ax, 0001

return 1;

cs:02FF jmp

#LABA3#24 (031D)

#LABA3#22

cs:0301 push

word ptr [si+04]

i = a(atoi(argv[1]), atoi(argv[2]));

cs:0304 call

atoi

cs:0307 pop

cx,

cs:0308 push

ax

cs:0309 push

word ptr [si+02]

cs:030C call

atoi

cs:030F pop

cx

cs:0310 push

ax

cs:0311 call

a

cs:0314 pop

cx

cs:0315 pop

cx

cs:0316 mov

[bp-02], ax

#LABA3#23

cs:0319 xor

ax, ax

return 0;

cs:031B jmp

02FF

#LABA3#24

cs:031D pop

si

cs:031E mov

sp, bp

cs:0320 pop

bp

cs:0321 ret

}

atoi: inline int _Cdecl atoi (const char *__s) {return (int) atoll (__s);}

cs:0322 push

bp

cs:0323 mov

bp, sp

cs:0325 push

word ptr [bp=04]

cs:0328 call

_atol

cs:032B pop

cx

cs:032C jmp

032E

cs:032E pop

bp

cs:032F ret

После выполнения программы значение i будет равно 5.

Значения регистров и значения стека перед завершением программы, были просмотрены при помощи средств Visual Studio 6.

EAX=00000000             SS=0023               ZR=1

EDX=004299D0            CS=001B              AC=0

EIP=00401183               DS=0023              PE=1

EFL=00000246              ES=0023               CY=0

EBX=7FFDF000            FS=0038

ESI=00000000               GS=0000