nixp.ru v3.0

17 января 2017,
вторник,
22:09:18 MSK

DevOps с компанией «Флант»
ttoorrmmoozz написал 15 февраля 2005 года в 20:32 (422 просмотра) Ведет себя неопределенно; открыл 21 тему в форуме, оставил 25 комментариев на сайте.

На машине стоит асемблер версии CNU assembler 2.14.90 , 2003

Обьясните мне , где я неправ :

пытаюсь откомпилировать такой кусок :

entry start

start:

mov ax,#0xb800

mov es,ax

seg es

mov [0],#0×41

seg es

mov [1],#0×1f

loop1: jmp loop1

Запускаю команду :

as boot.s -o boot.o

Вывод :

boot.s:1: Error:no such instruction : 'entry start'

boot.s:3: Error:expecting operand after ',' ;got nothing

boot.s:4: Error:too many memory references for 'mov'

boot.s:5: Error:no such instruction: ’seg es'

Я так понял , что асемблер каких-то хидеров не видит ?

Genie

нет, «хидеры» тут вообще ни при чём.

просто-напросто у GNU Asm несколько другой синтаксис (погляди, что оно тебе при gcc -S test.c сделает в test.s)

так что — тебе надо поставить NASM или утилиту intel2gas.

iliya

_start:

movl $SYS_fork,%EAX

int $0×80

test %EAX,%EAX

jz _cont1

xorl %EBX,%EBX # EBX=status code

xorl %EAX,%EAX #

incl %EAX # SYS_exit

int $0×80

….

А может надо так ???

см. http://wasm.ru/article.php?article=asmunixlot

ttoorrmmoozz

Уже теплее .

Задача такая : надо в первую ячейку видеопамяти занести символ 'A' ,

т.е. на экран просто в левом верхнем углу вывести один символ 'A' на черном фоне .

Вот это все уже компилится :

_start:

mov $0xb800,%EAX

mov %EAX,%esi

mov $0×41,%ESI

mov $0×1f1,%ESI

loop1: jmp loop1

Токо вот я не знаю — правильная ли у меня логика : достаточно ли для вывода

на экран скопировать 2 байтика в область памяти , адрес которой хранится в ESI ?

И потом , я не знаю , как сделать приращение , чтобы второй байтик $0×1f1

лег в следующую ячейку памяти , а не в ту же , что и $0×41 ?

iliya

Вроде когда-то писали подобную прогу под ДОС, но тут может не получится.

А для увелечения incl где l — значит long тоесть 32 бита.

Хорошо заменить mov на movl.

Эти строки не верные получишь не то что хотел

mov $0×41,%ESI

mov $0×1f1,%ESI

Надо помоему так

movl $0×41,(%ESI)

movl $0×1f1,(%ESI)

Но я асмом на лине давно не занимался —

см. исходники ядра.

см. доки по асму для линуха.

см. gcc -S *.c

decvar

То что пишется в видеопамять(ну или то что доступно с 0xb800) сразу же выводиться на экран, при условии что ты пишешь именно в current screen, которых как известно 4.

PS

Все это канает для DOS->Win->WinNT. Полагаю что и для UNIX тоже ибо железо одно на всех.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.