%include "CONSTANTS.h" section .data data1: dd 11111111h data2: dd 22222222h data3: dd 0 data4: dq 1111111122222222h data5: dq 3333333344444444h data6: dq 0 data7: db 0 format1: db `%qd + %qd = %qd\n`,0 format2: db `%\#qx + %\#qx = %\#qx\n`,0 format3: db `%\#qx - %\#qx = %\#qx\n`,0 format4: db `%qd - %qd = %qd\n`,0 Label2: db `\nAdd\n`,0 Label3: db `\nInc\n`,0 Label4: db `\nsub\n`,0 Label5: db `\ndec\n`,0 section .bss section .text global main main: mov rdi, Label2 call CallPrintf ; let's try an 8 bit math mov rdi, format1 ; wipe out rsi, and move a 2 into the bottom bits mov rsi, 0 mov sil, 2 mov rdx, 0 mov dl, 4 mov rcx, 0 mov cl, 2 add cl, 4 call CallPrintf ; do 32 bit math mov eax, dword [data1] add eax, dword [data2] mov dword [data3], eax mov rdi, format2 mov esi, dword [data1] mov edx, dword [data2] mov ecx, dword [data3] call CallPrintf ; register to register math mov rdi, format1 mov esi, 100 mov edx, 200 mov ecx, esi add ecx, edx call CallPrintf ; do 64 bit math mov rax, qword [data4] add rax, qword [data5] mov qword [data6], rax mov rsi, rax mov rdi, format2 mov rsi, qword [data4] mov rdx, qword [data5] mov rcx, qword [data6] call CallPrintf ; let's try inc mov rdi, Label3 call CallPrintf mov rdi, format1 movzx rsi, byte [data7] mov rdx, 1 inc byte [data7] movzx rcx, byte[data7] call CallPrintf mov rdi, format1 movzx rsi, byte [data7] mov rdx, 1 mov rcx, rdx inc rcx call CallPrintf ; a few subtraction problems mov rdi, Label4 call CallPrintf mov rdi, format4 mov esi, 200 mov edx, 100 mov ecx, esi sub ecx, edx call CallPrintf mov rdi, format4 mov esi, 100 mov edx, 200 mov ecx, esi sub ecx, edx call CallPrintf mov rdi, format4 mov esi, 100 mov edx, 200 mov rcx, rsi sub rcx, rdx call CallPrintf ; a few dec mov rdi, Label5 call CallPrintf mov rdi, format4 inc byte[data7] inc byte[data7] movzx rsi, byte [data7] mov rdx, 1 dec byte [data7] movzx rcx, byte[data7] call CallPrintf mov rdi, format4 movzx rsi, byte [data7] mov rdx, 1 mov rcx, rsi dec rcx call CallPrintf ; goodby ; note this is not a subroutine call, just a jump to code. jmp Exit