Online Compiler Nasm

section .data format_d db '%d', 0 mast db "SCDH", 0 valu db "23456789TJQKA", 0 var dd 0 section .text global main extern scanf, printf, putchar main: mov ebp, esp lea eax, [var] push eax lea eax, [format_d] push eax call scanf pop eax pop eax mov eax, [var] dec eax xor edx, edx mov ecx, 13 div ecx mov ebx, eax mov ecx, edx xor eax, eax mov al, [valu + ecx] push eax call putchar pop eax xor eax, eax mov al, [mast + ebx] push eax call putchar pop eax xor eax, eax ret
Этот код считывает целое число, интерпретирует его как номер карты (от 1 до 52) и выводит соответствующую карту в виде двух символов: достоинство (2-9, T, J, Q, K, A) и масть (S, C, D, H). Нумерация карт идёт по мастям: сначала все 13 достоинств первой масти, затем второй и т.д.

- Проверьте, что происходит при вводе числа 0 или числа больше 52. В текущей логике `dec eax` превращает 0 в -1, что приведёт к некорректному доступу к массиву.
- Убедитесь, что порядок мастей в строке `mast` соответствует порядку, в котором вы нумеруете карты. Сейчас масти идут S, C, D, H, а деление на 13 даёт индекс масти от 0 до 3.