argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Асемблер за начинаещи (а може би не)!  (Прочетена 1330 пъти)

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!

Ето един интересен проблем, свързан с асемблер:

Intel x86 Code

mov AX, 0xABCD
push AX
pop AL


Пита се каква е стойността, записана в регистъра AL след изпълнението на този код. Дали е 0xAB, или е 0xCD? Дали отговорът ще важи и за AMD базирани процесори? Macintosh? Друг вид процесори?
« Последна редакция: 20.10.2006, 17:39:42 от Иван Давидов »
Активен

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Асемблер за начинаещи (а може би не)!
« Отговор #1 -: 20.10.2006, 18:37:48 »

hahaha interesen vapros az bih zalojil na 0xCD stack pointer namalen samo s 1 (toest 0xAB shte ostane na stacka)

niakoi da go probva i da mi kaje che niamam asm instaliran
inache sam siguren che vsichki x86 procesori shte se darjat po edin i sasht nachin
tova zavisi ot tova kak se redi stacka a ne viarvam da ima razlika v tova na razlichnite arhitekturi
Активен
"Човек винаги трябва да си прави background" - Lia

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Асемблер за начинаещи (а може би не)!
« Отговор #2 -: 20.10.2006, 19:07:41 »

Dopalnitelno izsledvane pokaza che e nevuzmojno da se premesti stack pointer s 1 byte toest da se napravi push/pop operacia na 1 byte

izliza che tochno v toia sluchai kakto si pushvash AX taka shte si go popnesh celia AX nishto che pishesh pop AL

tozi primer smiatam che e ekvivalenten na vaprosa

push 0xABCDEF12
pop AX
pop BX //za da balansirame stacka

pri nego AX stava 0xEF12
ABCD ostava na stacka i pri pop otiva v BX

tova se potvardi i s experimenti VS2005 C++ Express Edition
btw dosta veroiatno e pop AL da ne moje da se compile-ne s drug assembler
« Последна редакция: 20.10.2006, 19:33:07 от Stilgar »
Активен
"Човек винаги трябва да си прави background" - Lia

Tosh

  • Неактивен Неактивен
  • Публикации: 249
  • Filmmaker
    • Изследванията на Тодор Арнаудов
Re: Асемблер за начинаещи (а може би не)!
« Отговор #3 -: 21.10.2006, 14:59:27 »

Мисля си, дали OpenBSD всъщност не пита и нещо относно в какъв ред се записват байтовете в паметта, младши-старши или старши-младши.

В Intel x86 и пряко съвместимите с нея архитектури редът е младши-старши ( little-endian ), докато и двете процесорни семейства на Macintosh - 680x0 и PowerPC  - пишат в ред старши-младши ( big-endian ).
Активен
Творчество и изследвания:
http://twenkid.com
http://artificial-mind.blogspot.com