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

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

05.01.2016, 16:52. Показов 5750. Ответов 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
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 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___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru