@PRIYD

Как вывести двумерный массив?

Нужно вывести двумерный массив, содержащийся в структуре, на экран. Обращаюсь в память по соображениям, что array[i][j] = (адресс первого элемента + N*M*i + N*j), где N - размер элемента в байтах, M - количество строк в дв. массиве, i и j - счётчики в циклах(использую rcx и rdx, соответственно). Кажется, регистр выбрал верный, но всё равно ошибка
main.asm [26]:
			mov ax, [field.grid + 8*(field.size_n*rcx + rdx)]	
processed: mov ax,[field.grid+8*(field.size_n*rcx+rdx)]
error: operand sizes do not match.
при компиляции. Архитектура х64, препроцессор FASM

Код:
format ELF64
public _start

struc playing_field n {
	.size_n db n
	.grid rw n*n
	.max_score db 0
}

field playing_field 4

_start:
	call exit

section ".print_grid" executable
; | input:
; rax = array
print_grid:
	xor rcx, rcx
	.first_iter:
		xor rdx, rdx
		.second_iter:
			mov ax, [field.grid + 8*(field.size_n*rcx + rdx)]	
			
			inc rdx
			cmp rdx, field.size_n
			je .next
			jmp .second_iter
		.next:
			inc rcx
			cmp rcx, field.size_n
			je .quit
			jmp .first_iter	
	.quit:
		ret
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
@VitalyChaikin
Так он же пишет - operand sizes do not match
Вначале посчитай 8*(field.size_n*rcx + rdx) помести в bx, а только потом обращайся:
mov ax, [field.grid][bx]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы