📄 calculator.asm
字号:
section .textglobal errorerror:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,esppush L2call putsadd esp, 4push 1call exitadd esp, 4L1:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal matchmatch:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espmov edi, dword [ebp+28]mov bx,dimov byte [ebp+28], blmov bl,byte [token]movsx edi,blmov bl,byte [ebp+28]movsx esi,blcmp edi,esijne near L4call getcharadd esp, 0mov bx,axmov byte [token], bljmp L3L4:call erroradd esp, 0L3:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal mainmain:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espcall getcharadd esp, 0mov bx,axmov byte [token], blcall expiadd esp, 0mov edi, eaxmov bl,byte [token]movsx esi,blcmp esi,10jne near L7push edipush L9call printfadd esp, 8jmp L8L7:call erroradd esp, 0L8:mov eax,0jmp L6L6:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal expiexpi:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espcall termadd esp, 0mov edi, eaxjmp L12L11:mov bl,byte [token]movsx esi,blcmp esi, 43je near L14mov bl,byte [token]movsx esi,blcmp esi, 45je near L14jmp L13L14:mov bl,byte [token]movsx esi,blcmp esi,43jne near L18push 43call matchadd esp, 4call termadd esp, 0mov esi, ediadd esi, eaxmov edi, esijmp L12L18:mov bl,byte [token]movsx esi,blcmp esi,45jne near L12push 45call matchadd esp, 4call termadd esp, 0mov esi, edisub esi, eaxmov edi, esijmp L12L12:mov bl,byte [token]movsx esi,blcmp esi,10jne near L11L13:mov eax,edijmp L10L10:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal termterm:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espcall powiadd esp, 0mov edi, eaxjmp L24L23:mov bl,byte [token]movsx esi,blcmp esi, 42je near L26mov bl,byte [token]movsx esi,blcmp esi, 47je near L26mov bl,byte [token]movsx esi,blcmp esi, 37je near L26jmp L25L26:mov bl,byte [token]movsx esi,blcmp esi,42jne near L32push 42call matchadd esp, 4call powiadd esp, 0mov esi, ediimul esi, eaxmov edi, esijmp L24L32:mov bl,byte [token]movsx esi,blcmp esi,47jne near L34push 47call matchadd esp, 4mov eax,edisub esp, 4mov dword [ebp + -4], eaxcall powiadd esp, 0mov ecx,eaxmov eax, dword [ebp+-4]cdqidiv ecxmov edi, eaxadd esp, 4jmp L24L34:mov bl,byte [token]movsx esi,blcmp esi,37jne near L24push 37call matchadd esp, 4mov eax,edisub esp, 4mov dword [ebp + -4], eaxcall powiadd esp, 0mov ecx,eaxmov eax, dword [ebp+-4]cdqidiv ecxmov edi, edxadd esp, 4jmp L24L24:mov bl,byte [token]movsx esi,blcmp esi,10jne near L23L25:mov eax,edijmp L22L22:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal powipowi:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espcall factoradd esp, 0mov edi, eaxmov bl,byte [token]movsx esi,blcmp esi,94jne near L41push 94call matchadd esp, 4call powiadd esp, 0push eaxpush edicall powadd esp, 8mov edi, eaxL41:mov eax,edijmp L40L40:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal factorfactor:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espsub esp, 4mov bl, 0mov dl,byte [token]movsx edi,dlcmp edi,45jne near L44mov bl, 45push 45call matchadd esp, 4L44:mov dl,byte [token]movsx edi,dlcmp edi,40jne near L46push 40call matchadd esp, 4call expiadd esp, 0mov dword [ebp+-4], eaxpush 41call matchadd esp, 4jmp L47L46:mov dl,byte [token]movsx edi,dlpush edicall isdigitadd esp, 4cmp eax, 0je near L48sub esp, 25mov edi, 0jmp L51L50:mov esi, ebpadd esi, -25mov edx, ediadd edx, esimov cl,byte [token]mov byte [edx], clcall getcharadd esp, 0mov dx,axmov byte [token], dlmov esi, ediadd esi, 1mov edi, esimov dl,byte [token]movsx esi,dlpush esicall isdigitadd esp, 4cmp eax,0jne near L51jmp L52L51:cmp edi,25jl near L50L52:mov esi, ebpadd esi, -25mov edx, ediadd edx, esimov byte [edx], 0mov esi, ebpadd esi, -4push esipush L55mov edx, ebpadd edx, -25push edxcall sscanfadd esp, 12jmp L47L48:call erroradd esp, 0L47:movsx esi,blcmp esi,45jne near L56mov esi, dword [ebp+-4]mov edx,esineg edxmov dword [ebp+-4], edxL56:mov eax, dword [ebp+-4]jmp L43L43:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretglobal powpow:push ebxpush edxpush ecxpush esipush edipush ebpmov ebp,espmov edi, 1mov esi, dword [ebp+32]cmp esi,0jne near L62mov eax,1jmp L58L61:mov esi, dword [ebp+28]mov ebx, ediimul ebx, esimov edi, ebxmov esi, dword [ebp+32]sub esi, 1mov dword [ebp+32], esiL62:mov esi, dword [ebp+32]cmp esi,0jne near L61mov eax,edijmp L58L58:mov esp,ebppop ebppop edipop esipop ecxpop edxpop ebxretsection .dataglobal tokenalign 1token:resb 1section .textextern sscanfsection .datasection .textextern isdigitsection .datasection .textextern putssection .datasection .textextern exitsection .datasection .textextern printfsection .datasection .textextern getcharsection .datasection .dataalign 1L55:db 37db 100db 0align 1L9:db 82db 101db 115db 117db 108db 116db 32db 61db 32db 37db 100db 10db 0align 1L2:db 69db 114db 114db 111db 114db 10db 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -