I'm trying to copy a string using 16-bit assembly.
I have (among other things) 16 11-character strings in .dirBafer and I want to copy each string into the .ime_dat so that I can print it and process it later on (the processing code isn't yet written). The first character of each string is separated by 32 bytes of data. Basically the .dirbafer is a dump of a FAT12 directory and I'm trying to print file names.
I've got following code:
mov dx, .dirBafer ;loads address of .dirBafer in dx
mov cx, 16 ;16 entries in a dir
.load_dir:
push cx
mov ax, dx ;loads address of .dirBafer from dx into ax
mov bx, .ime_dat ;buffer for storing file names
mov cx, 11 ;each file name is 11 characters long
.ime_dat_str:
push dx ; push dx, since it's being used as a temporary register
mov dx, [ax] ;this is supposed to load first char from location pointed byax to dx
mov [bx], dx ;this is supposed to load the first char from location pointed by dx to bx
add ax, 1 ; moving on to the next character
add bx, 1 ;moving on to the next character
pop dx ; we pop the dx so that the original value returns
loop .ime_dat_str ;this should loop for every character in the file name
mov si, bx ;preparing to print the file name
call _print_string ; printing the name
add dx, 32 ; we move to the next dir entry
pop cx ; popping cx so that the outer look counter can be updated
loop .load_dir
.dirBafer times 512 db 0
.ime_dat times 12 db 0
My problem is that the line:
mov dx, [ax]
generates the invalid effective address error.
What am I doing wrong and how do I fix that?