Курсовая работа: Конкатенація строк Assembler
fdiv st(0), st(1)
fstp y
jmp theend
Мітка отримує управління, якщо a < b. У цій мітці у першу чергу пишеться у консоль, що операнд а таки менший за b. Потім від aвіднімається b, загружається знову а, тому ще попереднє значення а находиться вже дальше по стеку. Та ділиться результат віднімання на а. Усе це розтащовуєть у змінній y.
theend:
invoke FloatToStr, y, ADDR str3
xor eax, eax
invoke szLen, offset strArithm
invoke WriteConsole, hOutPut, offset strArithm, eax, NULL, NULL
xor eax, eax
invoke szLen, ADDR str3
mov nRead1, eax
invoke WriteConsole, hOutPut, ADDR str3, nRead1, NULL, NULL
ret
Це остання мітка, є логічним кінцем програми. Треба тільки пояснити invoke FloatToStr, y, ADDR str3 ця функція преобразує число у строку, яка потім буде виведена на консоль.
Тепер перейдемо до наступної функції string. Допоміжна части якої, така ж як і у попередньої функції. Особої уваги вимогає invoke strCat, offset buff, offset str1. Ця функція викликає функцію конкатенації, яка буде приведена нижче.
strCat proc lpszSource:DWORD, lpszAdd:DWORD
push edi
invoke szLen, lpszSource
mov edi, lpszSource
mov ecx, lpszAdd
add edi, eax ; set write starting position
xor edx, edx ; zero index
xor eax, eax ; avoid stall with following AL reads and writes
mov [edi-2], byte ptr 20h
mov [edi-1], byte ptr 20h
@@:
mov al, [ecx+edx] ; write append string to end of source
mov [edi+edx], al