Я сделал некоторое сборочное программирование в Linux, и теперь я пытаюсь сделать это в Windows с помощью MASM. Тем не менее, я сталкиваюсь с несколькими проблемами.Попытка выяснить синтаксис MASM
(Здесь я пытаюсь реализовать функцию strlen(). Я знаю, что функциональная логика/инструкции не оптимальны, но я просто пытаюсь поднять что-то грязное, чтобы я мог продолжить реализацию другой библиотеки C функции.)
.386
.model flat, stdcall
option casemap:none
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.data
testString db "test string", 0 ; 0 -> terminator
.code
my_strlen proc
mov ebp, esp ; function prologue
push esp
push ebx
push ecx
xor ecx, ecx ; set count to 0
mov bl, byte ptr [ebp + 8] ; set low of b to 1st character
repeat:
cmp bl, 0 ; if null terminator, return
jz done
inc ecx ; increase count
mov bl, byte ptr [ebp + 8 + ecx] ; increase *ebx
jmp repeat ; repeat
done:
mov eax, ecx ; return count
pop ecx ; function epilogue
pop ebx
pop esp
ret
my_strlen endp
main:
push offset testString ; result = my_strlen(testString)
call my_strlen
push eax ; StdOut(result)
call StdOut
push 0 ; ExitProcess(0)
call ExitProcess
end main
Когда я пытаюсь скомпилировать, это не кажется, как мои JMP этикетки, бросая непревзойденное макро вложенности и т.д. что такое правильный способ сделать это? постскриптум Я стараюсь избегать использования макросов MASM, где это возможно, предпочитая самостоятельно кодировать инструкции.
Может кто-то прокомментировать эту программу? Как только я увижу, как это будет сделано правильно, я буду на моем веселом пути, я смогу. Да, я искал ресурсы и все еще, так как этот вопрос встал.
Я думаю, что "повторить" может быть плохим выбором. Я думаю, что это ключевое слово MASM для управления повторением макросов. –
@ Харри, прежде чем я буду делать свой эксперимент, попробуйте это: измените слово 'repeat:' на что-то вроде 'George:' или некоторые из них. Слово 'Repeat' имеет конкретное значение для части макроса MASM –
@IraBaxter, пожалуйста, выключите свой модем для чтения! –