Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Jun 05, 2020 12:00 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1139 posts ]  Go to page Previous 134 35 36 37 3876 Next
Author Message
 Post subject:
PostPosted: Sun Jul 15, 2012 9:47 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
Ктонить подскажет поповоду массивов в fasm?

_________________
я лишь учусь


Top
   
 Post subject: Re:
PostPosted: Sun Jul 15, 2012 10:14 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
punk_joker wrote:
Ктонить подскажет поповоду массивов в fasm?
Не знаю, что конкретно тебе надо узнать, по поводу массивов, но думаю, следует сначало, почитать :arrow: вот это (там всё доступно описано).

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
 Post subject:
PostPosted: Sun Jul 15, 2012 10:35 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
В том то и дело, я по этим статьям и изучаю фасм. Но всеже, ток что на меня снизошло понимание этого вопроса :) . Смещение равно размеру элементов, т.е если это массив из 16-битных цифр, для доступа к каждому следующему элементу необходимо выполнить смещение на 2 байта

_________________
я лишь учусь


Top
   
PostPosted: Sun Jul 15, 2012 10:46 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Ну вообщем, да.

Вот формула доступа к элементу массива:
Адрес элемента = базовый адрес + (смещение * размер элемента)

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
 Post subject:
PostPosted: Sun Jul 15, 2012 10:58 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
Имеется массив с 16-битными безнаковыми числами

array dw 1, 2, 3, 4, 5

Мне необходимо поместить скажем в регист ax, 3й элемент массива. Делаю так:

mov ax, [array+6]

Правильно понял?

_________________
я лишь учусь


Top
   
PostPosted: Sun Jul 15, 2012 11:38 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Да, но можно и так:

mov ax,word [array+2*3]

2 - размер элемента (2 байта).
3 - третий элемент, в твоём массиве.

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Last edited by Rock_maniak_forever on Mon Jul 16, 2012 12:58 am, edited 1 time in total.

Top
   
PostPosted: Mon Jul 16, 2012 12:54 am 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
А ещё, можно так:

Code:
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]

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Mon Jul 16, 2012 11:01 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 821
punk_joker wrote:
Мне необходимо поместить скажем в регист ax, 3й элемент массива. Делаю так:mov ax, [array+6]Правильно понял?

Если нужен действительно 3-й элемент, то прибавлять нужно не 6 а 4. Потому что для получения 1-го элемента ничего прибавлять не нужно. Для второго нужно прибавить 2, а для третьего 4.


Top
   
PostPosted: Mon Jul 16, 2012 3:08 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
> Потому что для получения 1-го элемента ничего прибавлять не нужно
Паскалист, не смущай людей. Элементы массива с 0 считаются.


Top
   
 Post subject:
PostPosted: Mon Jul 16, 2012 5:54 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
Если я брошу решение небольшой задачки под DOS, сможет кто-то ее проверить?

_________________
я лишь учусь


Top
   
PostPosted: Tue Jul 17, 2012 4:37 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
Кидай. А почему именно под DOS и почему сам не проверишь?


Top
   
PostPosted: Wed Jul 18, 2012 10:25 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
Я изучаю FASM по урокамм с asmworld.ru, они под дос, мол учить под него легче. Ну я в общем и не против, т.й. учить реально не само тяжело. А задание сделал, вроде все верно, но прогоняю через дебаггер, чет не то. Вот и решил, мож кто опытней проверит, и подскажет че неправильно.


Attachments:
File comment: Задание и решение в архиве
Task.zip [598 Bytes]
Downloaded 302 times

_________________
я лишь учусь
Top
   
PostPosted: Wed Jul 18, 2012 11:53 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 821
изменил код примерно так:
Code:
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


Top
   
 Post subject:
PostPosted: Wed Jul 18, 2012 12:03 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
С занесением результата в массив реально перепутал. А зм советы спасибо. Вычисляет все правильно?

_________________
я лишь учусь


Top
   
PostPosted: Thu Jul 19, 2012 2:00 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
А можно и так (у меня прога получилась на 13 байт короче):
Code:
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(?)

Вместо mov di, 0, лучше делать xor di, di.
А умножать на 2, надо так - shl si, 1.
Вместо s db 2, лучше делать s = 2.

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1139 posts ]  Go to page Previous 134 35 36 37 3876 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited