LINUX.ORG.RU

ассемблерный йож

 , ,


2

3

Всем при . Тут такой дело : начал учить асм . И тут команда попалась use . После нее указывается система счисления . Вопрос : какую систему счисления выбрать



Последнее исправление: Klymedy (всего исправлений: 1)

И тут команда попалась use . После нее указывается система счисления

Че?

vertexua ★★★★★
()

Ты наверное про use32, use64 или use16? Эта команда указывает, использовать 16-битный реальный режим, 32-битный защищённый или long mode (64-битный). Зависит от того под что пишешь. Смотри uname -m, если там x86_64 или amd64 — значит 64, если i486 (i586,i686), 32-битный, если пишешь под DOS, то 16.

А если пишешь под ARM, то возможно, ты взял не тот ассемблер, так как это режимы x86.

Какой ассемблер изучаешь? Если ещё не выбрал, то бери fasm — самый простой и адекватный. Хотя ещё nasm, yasm и asm86 сойдут, но вроде говорят fasm лучше.

Ещё есть GNU as, это хороший и довольно мощный ассемблер, но он использует AT&T-синтаксис и кроссплатформенный, он больше подходит для серьёзных программ (например привязать к большой программе на C функцию на ассемблере) и меньше для обучения (слишком много ненужных новичку особенностей).

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

именно на fasm и пишу . Спасибо огромное

Kenny
() автор топика
Ответ на: комментарий от Xenius

и тогда еще вопрос : каждый регистр процессора служит для какой-то цели ? Какой служит для вывода на экран ?

Kenny
() автор топика
Ответ на: комментарий от Kenny

Голова от асма болит

Т. е. ты из-за асма ставишь перед знаками препинания пробелы?

theNamelessOne ★★★★★
()
Ответ на: комментарий от Kenny

Тут такой дело : начал учить асм .
и тогда еще вопрос : каждый регистр процессора служит для какой-то цели ?

Учить асм без учебника? Советую взять книжку Юрова.

CrossFire ★★★★★
()
Ответ на: комментарий от Xenius

Я всегда пользовался nasm. А чем fasm лучше?

А вот GNU as, очевидно чем лучше - добавляет +10 к ЧСВ, потому мы на нем в универе тоже писали, даже когда-то курсач. По секрету: если не можешь что-то осилить, то можно всегда скомпилять код на С в код на GNU as, посмотреть код и написать подобное, но по-человечески

vertexua ★★★★★
()
Ответ на: комментарий от Kenny

каждый регистр процессора служит для какой-то цели ?

Название general purpose что-нибудь говорит? В основном используются как захочется, кроме нескольких специальных.

Какой служит для вывода на экран ?

Регистры ЦП не для этого. Когда уже установлен видео режим, на экран в простейшем случае видеоконтроллером просто выводится содержимое куска памяти.

GAMer ★★★★★
()
Ответ на: комментарий от Kenny

и тогда еще вопрос : каждый регистр процессора служит для какой-то цели ? Какой служит для вывода на экран ?

охохох, амигос, читай учебник сначала. где процессор а где экран епрст.

MikeDM ★★★★★
()
Ответ на: комментарий от Kenny

каждый регистр процессора служит для какой-то цели ?

Смотрю ты начинающий. Дело тут в другом. Если тебе кажется что в ассемблере есть команда mov, то это только синтаксический сахар (лол, о как звучит). По настоящему в машинных кодах есть отдельная команда mov eax, ebx, отдельная mov edx, eax и тд. Это все вероятно маппится на физически припаяные элементы.

И просто иногда бывает так, что определенные регистры поддерживаются коммандой, а иногда нет. Это по-сути справочная информация.

Еще иногда какой-то другой код ожидает данные в опеределенных регистрах перед тем как ты его вызовешь. Для того чтобы не было зоопарка описывают какую-то calling convention. Например для вызова функций С она одна, для вызова функций ядра Linux - другая.

Какой служит для вывода на экран ?

Смотря где. В Linux нужно делать системные вызовы. Для этого заполняются определенные регистры, а потом команда syscall или как там, раньше так и писали - int 80h. Это нужно погуглить

vertexua ★★★★★
()
Ответ на: комментарий от Kenny

и тогда еще вопрос : каждый регистр процессора служит для какой-то цели ? Какой служит для вывода на экран ?

Почитай таки fasm manual и какой-нибудь туториал по ассемблеру.

У x86 регистры неравноправны, но в большинстве случаев взаимозаменяемы, для вывода на экран никакой конкретный регистр не служит.

Если ты хочешь вывести в DOS, то или пишешь в видеопамять (как в обычную память), или используешь прерывание int 21h и вроде ещё есть прерывания BIOS для переключения видеорежимов.

Если в GNU/Linux, то на консоль пишешь через прерывание linux, в 64-битном режиме это инструкция syscall, в 32-битном она же или прерывание 80.

Xenius ★★★★★
()
Ответ на: комментарий от vertexua

По настоящему в машинных кодах есть отдельная команда mov eax, ebx, отдельная mov edx, eax и тд. Это все вероятно маппится на физически припаяные элементы.

та шо вы говорите :)

вообще-то в данном случае команда mov одна, а из какого регистра в какой указывается соответствующими циферками внутри команды

на x86 вариантов mov несколько, в зависимости от типа операндов - регистр-регистр или регистр-память, у каждого свой отдельный опкод

но говорить, что mov eax, ebx и mov edx, eax разные команды некорректно

Harald ★★★★★
()
Ответ на: комментарий от Harald

Я грубо обьяснил почему внезапно в некоторые команды могут не жрать некоторые регистры. Как там сегменты меняются через регистр общего назначения. Хотя хз как оно сейчас, давно не следил

vertexua ★★★★★
()
Ответ на: комментарий от Kenny

Какой служит для вывода на экран ?

vi, очевидно же, из названия

anonymous
()
Ответ на: комментарий от Kenny

А не тролль ли ты часом? А мы тут упражняемся, советуем что-то. Ну ладно, я пошел

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от arkhnchul

Кстати в С же можно написать структуру, в которой указать количество бит, занимаемое полями. Тоесть поле будет int, но на него например выделено 3 бита и валидные значения от 0 до 7

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

Это называется битовые поля, сидел бы ты дальше на жабе, не позорился бы.

anonymous
()
Ответ на: комментарий от Xenius

Если ты хочешь вывести в DOS, то или пишешь в видеопамять (как в обычную память), или используешь прерывание int 21h

В учебных целях писать под DOS всё еще можно. Прерывания BIOS для считывания и вывода строки сильно упрощают учебный процесс.

Ну а для серьезных задач лучше линковаться со стандартной сишной библиотекой и вызывать функции ввода/вывода из прослойки на си.

Выигрыш в производительности от кода на ASM ни кто не отменял, хотя современные компиляторы гораздо быстрее своих предков. Тем более, параллельные вычисления всё равно надо писать на нормальном языке, хотя тела параллельно выполняемых функций вполне могут содержать ассемблерные вставки.

Скажи для чего тебе ASM, может еще что-то подскажут.

tlx ★★★★★
()
Ответ на: комментарий от vertexua

а сколько месяцев говоришь, процесс перемещения в гуголь занял, от первого контакта с рекрутером до получения первой зарплаты? :)

Harald ★★★★★
()
Ответ на: комментарий от Kenny

Linux/x86_64, обычный библиотечный вызов:

.S:
	.string	"..."

	// puts("...");
	movl	$.S, %edi
	jmp	puts

ещё:

.S2:
	.string	"...\n"

	// %edi = fd

	// write(fd, "...\n", 4);
        movl	$.S2, %esi
	movl	$4, %edx
	jmp	write

ещё:

	// syscall(SYS_write, fd, "...\n", 4);
	movl	%edi, %esi
	movl	$1, %edi
	movl	$.S2, %edx
	movl	$4, %ecx
	jmp	syscall

системный вызов инструкцией:

        movl $1, %eax
        movl $.S2, %esi
        movl $4, %edx
        syscall
        ret

Дальше stdout / dev/tty* — open(«/dev/tty», O_WRONLY), http://www.linusakesson.net/programming/tty/case3.png.

Дальше работа сразу с MMIO/PMIO устройства, например, для VGA видеопамять в 0xB8000, порты 0x3D4, 0x3D5 и т.п.

http://wiki.osdev.org/VGA_Hardware

http://www.jamesmolloy.co.uk/tutorial_html/3.-The Screen.html

http://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa...

http://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa...

чем отличается переменная в 1 бит от переменной в 2 или 4 бита ?

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-...

4.1 FUNDAMENTAL DATA TYPES

quasimoto ★★★★
()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от Harald

Дохрена, может пол года. Но по сути я просто брал больше времени на подготовку между собеседованиями, они не против. Плюс один раз похерили мои докуметы на почте, пришлось пересылать

vertexua ★★★★★
()
Ответ на: комментарий от tlx

Я вот asm когда в интернате жил выучил, потому что на моём компьютере кроме tasm 2.0 ничего больше не было из ЯП, а си я тогда не знал, только паскаль, да.

luke ★★★★★
()
Ответ на: комментарий от anonymous

и вот таки специализды работают в гуголь... пздц.

это ж не гуголь, а филиал. Переводка разной мелочи для местных. Ирландия вообще европейский аналог рашки.

anonymous
()

QtSpim и MIPS32.

Плюсы:

  • все команды помещаются на листок a4
  • простой ввод вывод
  • удобная среда выполнения, видно и код и полное состояние процессора
anonymous
()
Ответ на: комментарий от int13h

«Муветон» называть себя программистом и не знать как устроен процессор. асм - полезная практика.

anonymous
()
Ответ на: комментарий от int13h

А в шиндовсе пишут либо на c# либо на asm? И для каких таких драйверов он прям так нужен?

anonymous
()
Ответ на: комментарий от int13h

кстати, ведь асм есть муветон в UNIX?

Вам в тред по PHP.

Pavval ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.