argon bulletin board

Факултети => Факултет по математика и информатика => Темата е започната от: Jack Johnson в 20.10.2006, 17:37:49

Титла: Асемблер за начинаещи (а може би не)!
Публикувано от: Jack Johnson в 20.10.2006, 17:37:49
Ето един интересен проблем, свързан с асемблер:

Intel x86 Code

mov AX, 0xABCD
push AX
pop AL


Пита се каква е стойността, записана в регистъра AL след изпълнението на този код. Дали е 0xAB, или е 0xCD? Дали отговорът ще важи и за AMD базирани процесори? Macintosh? Друг вид процесори?
Титла: Re: Асемблер за начинаещи (а може би не)!
Публикувано от: Stilgar в 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
Титла: Re: Асемблер за начинаещи (а може би не)!
Публикувано от: Stilgar в 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
Титла: Re: Асемблер за начинаещи (а може би не)!
Публикувано от: Tosh в 21.10.2006, 14:59:27
Мисля си, дали OpenBSD всъщност не пита и нещо относно в какъв ред се записват байтовете в паметта, младши-старши или старши-младши.

В Intel x86 и пряко съвместимите с нея архитектури редът е младши-старши ( little-endian ), докато и двете процесорни семейства на Macintosh - 680x0 и PowerPC  - пишат в ред старши-младши ( big-endian ).