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.