Изучение основных операций ввода-вывода, работы с регистрами, работы с текстовыми данными (Лабораторная работа № 4), страница 3

            push  CRD

            push  STDOUT

            call  SetConsoleCursorPosition@8

            call  mexit

            ret

working endp

;получение описателей консоли

getHandles  proc NEAR

            push  STD_OUTPUT_HANDLE

            call  GetStdHandle@4

            mov         STDOUT, eax

            push  STD_INPUT_HANDLE

            call  GetStdHandle@4

            mov         STDIN,      eax

            ret

getHandles  endp

;процедура возвращает сумму

getSum            proc NEAR,

                  recv : DWORD

            mov         esi,  sumptr

            mov         edi,  recv

            mov         ecx,  10

            rep         movsb

            mov   eax, nsum  

            ret

getSum            endp

;вывод в консоль числа в десятичном виде

putDec            proc NEAR

            push  CRD

            mov         CRD.X, 35

            push  CRD

            push  STDOUT

            call  SetConsoleCursorPosition@8

            push  number

            push  offset      fmt

            push  offset      buf

            call  wsprintfA

            ADD         ESP, 12

            push  0                            

            push  offset      lens       

            push  eax                          

            push  offset      buf  

            push  STDOUT                       

            call  WriteConsoleA@20 

            mov         CRD.X, 21

            pop         CRD

            push  CRD

            push  STDOUT

            call  SetConsoleCursorPosition@8

            mov         eax,0

            ret

putDec            endp

;вывод в консоль числа в шестнадцатеричном виде виде

putHex            proc NEAR

            push  CRD

            mov         CRD.X, 13

            push  CRD

            push  STDOUT

            call  SetConsoleCursorPosition@8

            mov         ebx,  0f0000000h        ;инициализировали битовый шаблон

            mov         ecx,  7                       ;количество проверяемых hex знаков

            mov         edi,  ptr1

@1:         shr         ebx,  4                       ;сдвинули шаблон

            pusha                                     ;сохранили регистры

            mov         eax,  4                      

            mul         ecx

            sub         eax,  4

            mov         cl,         al                      ;получили коэффициент

            mov         edx,  number

            and         edx,  ebx                     ;сверили число с шаблоном

            shr         edx,  cl                      ;сдвинули результат

            cmp         edx,  10

            jl          @3

            add         edx,  'a'-10

            jmp         @2

@3:         add         edx,  '0'                     ;добавили символ нуля

@2:         push  edx

            call  _putch                              ;вывели символ

            pop         edx

            mov         al,         dl

            stosb                                     ;переслали символ в строку

            popa

            inc         edi

            loop  @1                                  ;ещё не всё число осмотрено

            ;установили позицию курсора

            mov         CRD.X, 21

            pop         CRD

            push  CRD

            push  STDOUT

            call  SetConsoleCursorPosition@8

            mov         eax,0

            ret

putHex            endp

;процедура для выхода только по q

mexit proc NEAR

            mov         eax, emlen

            push  0                             ;

            push  offset      lens        ;

            push  emlen                   ;

            push  offset      exitMsg           ;приглашение к выходу

            push  STDOUT                        ;

            call  WriteConsoleA@20  ;    

again:      call  _getch                  ;считали символ

            cmp         al, 'q'    

            jne         again

            mov         eax, 0

            ret

mexit endp

end

4)  Набор тестов:

№ п.п.

Входные данные

Перевод чисел

Результат

(сумма двух чисел)

HEX_1

HEX_2

DEC_1

DEC_2

1.

0

0

0

0

0 (0)

2.

ffffff

ffffff

16777215

16777215

1fffffe (33554430)

3.

a

0

10

0

a (10)

4.

1cd

8a34

461

35380

8c01 (35841)