Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
1
GAS/AT&T

Передать аргумент через командную строку

05.01.2016, 16:52. Показов 5238. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Cледующая программа попросту выписывает Hello, world на экран. Компилирую следующую программу как указано в комментарии в строке 1. Т.е. программа не использует стандартной библиотеки. Вопрос таков: каким способом возможно передать Hello, world в коммандную строку, с последующим выведением Hello, world на экран??? Any ideas???
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//gcc -m32 -nostdlib a.s
.intel_syntax noprefix
.globl _start
.text
_start:
        mov eax,4
        mov ecx,offset msg
        mov edx,offset length
        int 0x80
 
        mov eax,1
        mov ebx,0
        int 0x80
 
 
.data
msg: .ascii "Hello, world\n"
.equ length,$-msg
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2016, 16:52
Ответы с готовыми решениями:

Через командную строку передать имя каталога и удалить этот каталог.
Здравствуйте, помогите пожалуйста с задачкой, задание в топе... Обработку командной строки...

Компиляция FASM через командную строку
Собственно сабж Имеется исходник .asm Надо его скомпилировать через cmd или создать bad файл Как...

Считывание параметров, переданных через командную строку
Всем привет! Есть у кого-нибудь пример считывания нескольких параметров, переданных через...

Заменить слова в файле (аргументы передаются через командную строку)
Здравствуйте подскажите пож.,в чем ошибка Задание такое: программе передаются через командную...

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

8
Эксперт Hardware
Эксперт Hardware
6160 / 2397 / 398
Регистрация: 29.07.2014
Сообщений: 3,143
Записей в блоге: 4
05.01.2016, 21:52 2
Плохо понял о чём речь, но для сом-файлов можно получить/вывести её из "PSP" так:

Код
C:\Temp>test.com
No command line parametrs...

C:\Temp>test.com /Find comman line parametrs
 /Find comman line parametrs
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ORG 100h
JMP start
 
error   DB  'No command line parametrs...$'
 
start:
   MOV   AL,[80h]      ; проверим длинну ком.строки
   OR    AL,AL         ; если не нуль,
   JNZ   print         ;      то едем дальше..
 
   MOV   AH,9          ; ком.строка пуста!
   MOV   DX,error
   INT   21h
   JMP   exit          ; на выход.
 
print:
   MOV   SI,81h        ; SI = адрес начала ком.строки
@1:
   LODSB               ; берём от-туда байт
   CMP   AL,0Dh        ; конец ком.строки?
   JE    exit
   INT   29h           ; выводим символ на экран
   JMP   @1            ; следующий символ..
 
exit:
   XOR   AX,AX
   INT   16h
   INT   20h
1
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
06.01.2016, 01:25  [ТС] 3
R71MT, сори в ассемблере не силён, такой вопрос, ты под какой операционной системой работаешь?тупым копированием, не удалось заставить этот код работать((( выдаёт что-то вроде:

cyber.s: Assembler messages:
cyber.s:6: Error: no such instruction: `org 100h'
cyber.s:9: Error: no such instruction: `error DB 78o command line parametrs...$10'
cyber.s:11: Error: bad expression
cyber.s:11: Error: junk `80h]' after expression
cyber.s:11: Error: invalid character (0xd0) in mnemonic
cyber.s:12: Error: invalid character (0xd0) in mnemonic
cyber.s:13: Error: invalid character (0xd1) in mnemonic
cyber.s:15: Error: invalid character (0xd0) in mnemonic
cyber.s:17: Error: junk `h' after expression
cyber.s:18: Error: invalid character (0xd0) in mnemonic
cyber.s:21: Error: junk `h' after expression
cyber.s:21: Error: junk at end of line, first unrecognized character valued 0xffffffd0
cyber.s:22: Error: junk at end of line, first unrecognized character is `@'
cyber.s:23: Error: invalid character (0xd0) in mnemonic
cyber.s:24: Error: junk `h' after expression
cyber.s:24: Error: invalid character (0xd0) in mnemonic
cyber.s:26: Error: junk `h' after expression
cyber.s:26: Error: invalid character (0xd0) in mnemonic
cyber.s:27: Error: bad expression
cyber.s:27: Error: junk `1' after expression
cyber.s:27: Error: invalid character (0xd1) in mnemonic
cyber.s:31: Error: junk `h' after expression
cyber.s:32: Error: junk `h' after expression

Может быть я не правильно компилирую??? компилировал в 2 спрособа 1)→ gcc -o cyber cyber.s -m32
2)→ gcc -m32 -nostdlib cyber.s
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.01.2016, 09:42 4
Цитата Сообщение от Aliaxandr Посмотреть сообщение
ты под какой операционной системой работаешь
INT 21h - это дос, под окнами.
1
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
06.01.2016, 15:41 5
Цитата Сообщение от Aliaxandr Посмотреть сообщение
int 0x80
А это Юникс/Линукс
1
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
07.01.2016, 22:37  [ТС] 6
Constantin Cat, а случайно как на линуксе получить адрес командной строки не знаешь??? для меня пока еще все числа с суффиксом h в твоем коде это темный лес, ассемблер изучал только под линукс(((

Добавлено через 13 минут
Constantin Cat, можно ли в данном случае(чтобы на экран выводилась фраза, которая введена в командную строку)добраться до командной строки следующим образом:
Assembler
1
2
        mov ecx,[esp+8]
        mov edx,[ecx+4]
???????
нет нельзя, у меня не заработало.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
08.01.2016, 11:40 7
Цитата Сообщение от Aliaxandr Посмотреть сообщение
нет нельзя, у меня не заработало
Если верить Мареку, то параметры командной строки должны находится в стеке.
Т.е. их можно извлечь с помощью POP reg или с помощью EBP, по аналогии с передачей параметров через стек.
Сорри я никсах не программирую.
1
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
08.01.2016, 16:26 8
Aliaxandr
Загляни сюда. Там даже видео есть, с объяснениями.
1
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
09.01.2016, 21:30  [ТС] 9
Mikl___, XiloManX, нашееллл!!! Жаль, что конечно не сам написал((( Но все же. Сёрф в инете показал, что существуют определенные отличия между синатксисом NASM, TASM, MASM итд. Сейчас столкнулся с одной проблемой, стараюсь TASM перевести в NASM. Что сделал "int 80H" заменил на "int 0x80", db на .byte и еще кое-какие моменты в самой структуре программы. После компиляции выдаёт следующее:
→ gcc -m32 -nostdlib inet.s
inet.s: Assembler messages:
inet.s:8: Error: ambiguous operand size for `cmp'
inet.s:59: Error: ambiguous operand size for `mov'

В следующих строках ошибка:
Assembler
1
2
8:   cmp     dword [ebp + 4], 1
59: mov     byte [edi - 1], 10
Помогите плиз перевести эти 2 строки! Если конечно проблема в этом...

Добавлено через 21 час 22 минуты
Ну вот получилось что-то вроде этого...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
.intel_syntax noprefix
.text
.globl main
main:
        push ebp
        mov ebp,esp
        mov ebx,[ebp+12]
        mov eax,[ebp+8]
        mov ecx,0
 
        looping:
        push ebx
        push eax
        push ecx
 
        xor edx,edx
        mov edx,DWORD [ebx]
 
        push DWORD [ebx]
        mov ebx,offset msg
        push ebx
        call printf
        add esp,8
 
        pop ecx
        pop eax
        pop ebx
 
        inc ecx
        add ebx,4
 
        cmp ecx,eax
        jne looping
 
        mov esp,ebp
        pop ebp
        ret
.data
msg: .ascii "%s "

→ ./a.out slowo1 slowo2 slowo3
slowo1 slowo2 slowo3 (null)


Добавлено через 10 минут
Cтроки 17 и 18 реально ничего не делают, сначала я ксорю edx, а потом туда заношу первый аргумент и выделяю под него 4 байта. Мне это нужно, чтобы потом с этим аргументом работать.
Поскажите, пожалуйста, каким образом можно добраться до последнего символа аргумента, например я в коммандную строку ввел example4 и хочу "добраться" до этой четвёрки.
Возможно ли побитово смещать регистр edx на 1 бит, а потом этот бит сравнивать?Если да, то куда тогда сместится этот бит?
0
09.01.2016, 21:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2016, 21:30
Помогаю со студенческими работами здесь

Как внести в пользовательскую функцию аргумент введенный через командную строку?
Ругается при вводе argv(char**),хотя если не использовать функцию то код работает void...

Как передать строку из слов и пробелов через командную строку?
Я сделал запуск проги через командную строку. Теперь считываю параметры. Ничего сложного. Один...

Передать параметры через командную строку
Здравствуйте, господа. Пишу одну вещь на Java FX (через Intellij IDEA 13.1.1). В итоге должен...

Как передать параметр в командную строку через Delphi?
Есть куча параметров, набирать их лен Команды Run compmgmt.msc clipbrd.exe cleanmgr.exe ...

Как получить и передать параметры из другой программы (через командную строку)?
Как получить и передать параметры из другой программы (через командную строку)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru