%include "CONSTANTS.h" section .data theInt: dq 0 prompt: db `enter an integer => `,0 strPrompt: db `enter a Phrase => `,0 intInput: db `%d`,0 intOutput: db `The number is %d (%d)\n`,0 strInput: db `%s`,0 strOutput: db `The string is "%s"\n`,0 charOutput: db `%c\n`,0 section .bss BUFSIZE EQU 100 anInt: resq 1 aStr: resb BUFSIZE anInt2: resq 1 section .text global main main: ; prompt for an integer and read it in ; cout << "Enter an integer" mov rdi, prompt call CallPrintf ; cin >> integer mov rdi, intInput mov rsi, anInt call CallScanf ; anInt2 = anInt mov rax, [anInt] mov [anInt2], rax ; cout << anInt mov rdi, intOutput mov rsi, [anInt] mov rdx, 1 call CallPrintf ; cout << anInt2 mov rdi, intOutput mov rsi, [anInt2] mov rdx, 2 call CallPrintf ; cout << "Enter a string" mov rdi, strPrompt call CallPrintf mov rdi, 0 call Flush ; ; buffer overflow, danger will robinson, danger will robinson ; cin >> string ; mov rdi, strInput ; mov rsi, aStr ; call CallScanf ; ; read(string, 100) mov rax, SYS_READ mov rdi, STDIN mov rsi, aStr mov rdx, BUFSIZE syscall mov byte [aStr + rax -1], 0 ; store string size in r13 mov r13, rax dec r13 ; use r12 as my index mov r12, 0 loopTop: cmp r12, r13 je outOfLoop mov rdi, charOutput mov rsi, [aStr +r12] call CallPrintf inc r12 jmp loopTop outOfLoop: ;cout << aStr mov rdi, strOutput mov rsi, aStr call CallPrintf ; cout << anInt mov rdi, intOutput mov rsi, [anInt] mov rdx, 1 call CallPrintf ; cout << anInt mov rdi, intOutput mov rsi, [anInt2] mov rdx, 2 call CallPrintf jmp Exit