Пятница, 29 Марта 2024, 04:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Низкоуровневое программирование » nasm и call
nasm и call
vasua99Дата: Среда, 09 Мая 2012, 20:47 | Сообщение # 1
GNU follower
Сейчас нет на сайте
подскажите почему не работает следующая программа(ассемблер NASM):
[code]
section .code
org 0x100
mov ax,0xb800
mov es,ax
mov di,0
mov ah,10
mov al,hello
call out_string ; почему то ошибка
int 0x20

out_string proc ; здесь тоже ошибка
symb:
cmp al,'$'
jz exit
mov [es:di],ax
add di,2
inc al
jmp symb
exit:
ret
out_string endp
section .data
hello db "Hello$"
И еще - можно ли в nasm использовать at&t синтаксис?


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
НохчиДата: Среда, 09 Мая 2012, 21:05 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (vasua99)
mov al,hello

Во первых смущает эта строка. Не знаю как там в nasm, но в нормальнных ассемблерах(masm/fasm) такое не прокатит.
И у тебя ошибка компиляция или валится во время выполнения?

Добавлено (09.05.2012, 21:05)
---------------------------------------------
Ага, погуглил по синтаксису насма, вместо процедур юзаются метки(что при call/ret одно и то же в принципе). То есть твой код должен выглядеть так:
Code

section .code   
org 0x100   
mov ax,0xb800   
mov es,ax   
mov di,0   
mov ah,10   
mov al,hello   
call out_string  
int 0x20   

out_string:
symb:   
cmp al,'$'   
jz exit   
mov [es:di],ax   
add di,2   
inc al   
jmp symb   
exit:   
ret   

   section .data   
   hello db "Hello$"


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Среда, 09 Мая 2012, 21:05
vasua99Дата: Среда, 09 Мая 2012, 22:18 | Сообщение # 3
GNU follower
Сейчас нет на сайте
спс большое,можешь подсказать ссылку где о насме такое нашел,искал,но про это не встречал ни разу)

Добавлено (09.05.2012, 22:18)
---------------------------------------------
и вот еще вопрос почему при адресации с помощью ds ошибка,а с пощью si и di нет,они же все 16 битные:

Code

mov [es:dx], bla-bla-bla ; error
mov [es:si], bla-bla-bla ; ok


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
НохчиДата: Четверг, 10 Мая 2012, 14:13 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Quote (vasua99)
спс большое,можешь подсказать ссылку где о насме такое нашел,искал,но про это не встречал ни разу)

Забил в гугле "nasm процедуры". Первые же ссылки разъяснили все.

Quote (vasua99)
и вот еще вопрос почему при адресации с помощью ds ошибка,а с пощью si и di нет,они же все 16 битные

ds - сегментный регистр(про сегменты здесь и здесь). si и di регистры общего назначения.

И забейте в конце концов на этот дос. Все-равно придется все переучивать.


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Четверг, 10 Мая 2012, 15:11
vasua99Дата: Пятница, 11 Мая 2012, 21:06 | Сообщение # 5
GNU follower
Сейчас нет на сайте
а мне не так дос важен как знание команд/архитектуру процессора,а дос это всего лишь временое средство,дальше в линукс перейду

Добавлено (11.05.2012, 21:06)
---------------------------------------------
и еще - плчему в насме не работает конструкция вида

Code

times 510-$+0x7c00

Высвечивать что-то про неконстантный аргумент,
а times 510-$ сжевывает нормально


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
НохчиДата: Пятница, 11 Мая 2012, 21:11 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Quote (vasua99)
times 510-$+0x7c00

мб так?
Code
times 510-$+7c00h


Многие вопросы по Windows отпадут, если посмотреть тут
vasua99Дата: Пятница, 11 Мая 2012, 21:17 | Сообщение # 7
GNU follower
Сейчас нет на сайте
неа,если times 510-($-$$) тогда бинарник не на 512 б а на 540 почему то выходит...

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
НохчиДата: Пятница, 11 Мая 2012, 21:29 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Quote (Нохчи)
times 510-$+0x7c00

В чем смысл этого выражения? Если нужно заполнить до 510 байта значениями 7c00h, то так наверно должно быть:
Code
times 510-$ DW 7c00h

А вообще хз, с насмом боюсь помочь не могу.


Многие вопросы по Windows отпадут, если посмотреть тут
vasua99Дата: Пятница, 11 Мая 2012, 21:33 | Сообщение # 9
GNU follower
Сейчас нет на сайте
надо заполнить нулями оставшееся пространство

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
Форум игроделов » Программирование » Низкоуровневое программирование » nasm и call
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг