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

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

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

Студворк — интернет-сервис помощи студентам
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2016, 16:52
Ответы с готовыми решениями:

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

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

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

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

Code
1
2
3
4
5
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  [ТС]
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
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.01.2016, 09:42
Цитата Сообщение от Aliaxandr Посмотреть сообщение
ты под какой операционной системой работаешь
INT 21h - это дос, под окнами.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
06.01.2016, 15:41
Цитата Сообщение от Aliaxandr Посмотреть сообщение
int 0x80
А это Юникс/Линукс
1
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
07.01.2016, 22:37  [ТС]
Constantin Cat, а случайно как на линуксе получить адрес командной строки не знаешь??? для меня пока еще все числа с суффиксом h в твоем коде это темный лес, ассемблер изучал только под линукс(((

Добавлено через 13 минут
Constantin Cat, можно ли в данном случае(чтобы на экран выводилась фраза, которая введена в командную строку)добраться до командной строки следующим образом:
Assembler
1
2
        mov ecx,[esp+8]
        mov edx,[ecx+4]
???????
нет нельзя, у меня не заработало.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
08.01.2016, 11:40
Цитата Сообщение от Aliaxandr Посмотреть сообщение
нет нельзя, у меня не заработало
Если верить Мареку, то параметры командной строки должны находится в стеке.
Т.е. их можно извлечь с помощью POP reg или с помощью EBP, по аналогии с передачей параметров через стек.
Сорри я никсах не программирую.
1
 Аватар для XiloManX
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
08.01.2016, 16:26
Aliaxandr
Загляни сюда. Там даже видео есть, с объяснениями.
1
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
09.01.2016, 21:30  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2016, 21:30
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru