Помогите новичку
-
Ктонить подскажет поповоду массивов в fasm?to infinity and beyond
Не знаю, что конкретно тебе надо узнать, по поводу массивов, но думаю, следует сначало, почитать вот это (там всё доступно описано).punk_joker wrote:Ктонить подскажет поповоду массивов в fasm?
В том то и дело, я по этим статьям и изучаю фасм. Но всеже, ток что на меня снизошло понимание этого вопроса . Смещение равно размеру элементов, т.е если это массив из 16-битных цифр, для доступа к каждому следующему элементу необходимо выполнить смещение на 2 байта
to infinity and beyond
Ну вообщем, да.
Вот формула доступа к элементу массива:
Адрес элемента = базовый адрес + (смещение * размер элемента)
Вот формула доступа к элементу массива:
Адрес элемента = базовый адрес + (смещение * размер элемента)
Имеется массив с 16-битными безнаковыми числами
array dw 1, 2, 3, 4, 5
Мне необходимо поместить скажем в регист ax, 3й элемент массива. Делаю так:
mov ax, [array+6]
Правильно понял?
array dw 1, 2, 3, 4, 5
Мне необходимо поместить скажем в регист ax, 3й элемент массива. Делаю так:
mov ax, [array+6]
Правильно понял?
to infinity and beyond
Да, но можно и так:
mov ax,word [array+2*3]
2 - размер элемента (2 байта).
3 - третий элемент, в твоём массиве.
mov ax,word [array+2*3]
2 - размер элемента (2 байта).
3 - третий элемент, в твоём массиве.
Last edited by Rock_maniak_forever on Mon Jul 16, 2012 12:58 am, edited 1 time in total.
А ещё, можно так:
Code: Select all
virtual at ARRAY
end virtual
ARRAY:
.e0: dw 1
.e1: dw 2
.e2: dw 3
.e3: dw 4
.e4: dw 5
mov ax,word [ARRAY.e3]
Если нужен действительно 3-й элемент, то прибавлять нужно не 6 а 4. Потому что для получения 1-го элемента ничего прибавлять не нужно. Для второго нужно прибавить 2, а для третьего 4.punk_joker wrote:Мне необходимо поместить скажем в регист ax, 3й элемент массива. Делаю так:mov ax, [array+6]Правильно понял?
> Потому что для получения 1-го элемента ничего прибавлять не нужно
Паскалист, не смущай людей. Элементы массива с 0 считаются.
Паскалист, не смущай людей. Элементы массива с 0 считаются.
Если я брошу решение небольшой задачки под DOS, сможет кто-то ее проверить?
to infinity and beyond
Кидай. А почему именно под DOS и почему сам не проверишь?
Я изучаю FASM по урокамм с asmworld.ru, они под дос, мол учить под него легче. Ну я в общем и не против, т.й. учить реально не само тяжело. А задание сделал, вроде все верно, но прогоняю через дебаггер, чет не то. Вот и решил, мож кто опытней проверит, и подскажет че неправильно.
- Attachments
-
-
Task.zip (598 Bytes)
- Задание и решение в архиве
Downloaded 417 times
-
to infinity and beyond
изменил код примерно так:
рекомендации:
- старайся не изменять первоначальные данные, лучше изменять значения регистров если есть возможность
- умножение на числа кратные 2 лучше заменять на разрядный сдвиг
- результат у тебя попадал в array2 а не в array3
Code: Select all
use16
org 100h
movzx cx, [n]
mov di, 0
movzx si, [n]
dec si
shl si, 2
raznost:
mov bx, [array2+si]
sub bx, [array1+di]
mov [array3+si], bx
add di, 2
sub si, 2
loop raznost
mov ax, 4C00h
int 21h
n db 5
array1 dw 2, -3, 5, -9, 6
array2 dw 7, 9, -2, -4, 1
array3 dw 5 dup(?)
- старайся не изменять первоначальные данные, лучше изменять значения регистров если есть возможность
- умножение на числа кратные 2 лучше заменять на разрядный сдвиг
- результат у тебя попадал в array2 а не в array3
С занесением результата в массив реально перепутал. А зм советы спасибо. Вычисляет все правильно?
to infinity and beyond
А можно и так (у меня прога получилась на 13 байт короче):
Вместо mov di, 0, лучше делать xor di, di.
А умножать на 2, надо так - shl si, 1.
Вместо s db 2, лучше делать s = 2.
Code: Select all
use16
org 100h
movzx cx, byte [n]
xor di, di
mov si, cx
dec si
shl si, 1
raznost:
mov bx, word [array2+si]
mov dx, word [array1+di]
sub bx, dx
mov [array3+si], word bx
add di, s
sub si, s
loop raznost
int 20h
s = 2
n db 5
array1 dw 2, -3, 5, -9, 6
array2 dw 7, 9, -2, -4, 1
array3 dw 5 dup(?)
А умножать на 2, надо так - shl si, 1.
Вместо s db 2, лучше делать s = 2.
Who is online
Users browsing this forum: No registered users and 0 guests