Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Работа со структурами данных и функциями


Автор: zall 1.3.2010, 13:40
Программе задается 1 параметр. Вывести его на экран. Дело в том что мы только начали ассемблер лектор болеет а лабораторные сдавать надо, помогите пожалуйста с программой и посоветуйте книгу по которой можно разобраться в самом начале. программу же буду использывать чтобы отталкиваться в дальнейшем))

Автор: iff 1.3.2010, 17:39
Что значит задается один параметр?
иы имеешь в виду когда вводится команда (в COMMAND.COM или CMD.EXE), то выводится следующее:
Код

C:\>progname hello
hello
C:\>_

Т.е. что-то вроде echo?

Если да, то смотри: в PSP (префиксе сегмента программы) по адресу ds:80h нранятся данные об аргументах вызова программы. а именно так: 
80h - в этой ячейки храниться длина аргумента, в нашем случае если аргумент hello, то в этой ячейки будет 06h (на один больше, чем на самом деле, видимо из-за пробела перед аргументом)
81h - здесь храниться пробел (20h), посмотрите ведь межлу аргументом и именем программы напечатан пробел
82h - от сюдаго начинается сам аргумент (в нашем случае это строка 'hello', 0dh; в конце 0dh, потому что мы при вводе команды в конце нажали Enter.
  
Программа выводящая параметр на экран будет такая:
Код

        .model  tiny                            ;Программа типа COM
        .code
        org     100h
main:
        mov     byte ptr bl, ds:[80h]           ;В bx - длину аргумента
        mov     word ptr [bx+82h], 240ah        ;За строкой поставим символы 0D0A (перевод строки, причем 0D уже содержится, и $ для завершения вывода
        mov     dx, 82h                         ;Выводи строку при помощи функции 09h прерывания 21h
        mov     ah, 09h
        int     21h
        ret                                     ;Завершить работу
end     main


Я использую компилятор TASM5 и компилирую командой:
Код

tasm progname.asm
tlink progname.obj /t

для создания программы типа COM. Размером получился 17 байт.

Автор: zall 1.3.2010, 18:26
спасибо, это то что нужно и подробно ещё. большое спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)