Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/921: Рейтинг темы: голосов - 921, средняя оценка - 4.76
17 / 6 / 0
Регистрация: 30.12.2009
Сообщений: 93
1

Написать программу, выводящую строку "Hello World" на экран

20.10.2011, 12:51. Показов 179950. Ответов 41
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать прогармму выводящую строку "Hello World" на экран

Заранее спасибо
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2011, 12:51
Ответы с готовыми решениями:

Написать программу на ассемблере, выводящую на экран строку 100 раз
Написать программу на ассемблере, выводящую на экран строку 100 раз.

Составьте программу, выводящую на экран 5 строк «Hello, World!»
Всем доброго времени суток! Есть задание: 1.Составьте программу, выводящую на экран 5 строк...

Написать программу, выводящую из файла на экран строку с заданным номером
Написать программу, выводящую из файла на экран строку с заданным номером.

Напишите программу, выводящую на экран текст «Hello, world!»
Доброго времени суток, форумчане. Просьба помочь с простыми программами на С++. Только начал...

41
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
11.04.2012, 10:30 21
Author24 — интернет-сервис помощи студентам
Mikl___, можно и через undoc BOP_3RDPARTY - MessageBox() из доси вывести.
И да, топик-таки лучше прилепить.
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
11.04.2012, 11:55 22
Mikl___, тему создать это легко, а почему эту не продолжить?
1
Mikl___
11.04.2012, 13:05
  #23

Не по теме:

чтобы тема не выродилась, a о MessageBox'e создавай новую тему

0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
11.04.2012, 13:10 24
Mikl___,

Не по теме:

понято!

1
0 / 0 / 1
Регистрация: 04.05.2011
Сообщений: 57
02.12.2012, 06:17 25
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
;TASM, COM - файл
;tasm.exe /m
;tlink.exe /t /x
;
.model tiny
.code
.386
ORG 100h
START:
    lea dx,privet
    mov ah,9
    int 21h
 
    lea dx,privet1
    int 21h
    
    mov ah,0
    int 16h
 
    ret
 
;
privet  db  13,10,'Привет!$'
privet1 db  13,10,'ЏаЁўҐв!$'
 
    end start
Можешь прокаментировать)
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.12.2013, 08:53 26
Продолжим извраты - теперь и под FreeBSD. include-файлы лежат на https://github.com/graudeejs/a... SD/include ,
в файле macros.fasm стр. 21 должна выглядеть так:
Код
        lea        esp,[esp+4*margc]    ; clear stack
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;fasm helbsd
;ld -s -o helbsd helbsd.o
include 'BSD/macros.inc'
include 'BSD/syscall.inc'
STDOUT  = 1
format ELF
 
section '.text' executable
public _start
_start:
    syscall SYS_WRITE,STDOUT, msg, msg_size
    syscall SYS_EXIT, 0
 
section '.data' writeable
msg db 'Hello, FreeBSD world!',0xA
msg_size = $-msg
2
2 / 2 / 0
Регистрация: 12.06.2014
Сообщений: 10
14.06.2014, 15:02 27
Цитата Сообщение от Mikl___ Посмотреть сообщение
прямой вывод строки в видео память, выводит красные символы на черном фоне
Mikl___, там не обязательно подсчитывать длину строки, можно просто прекращать вывод символов при встрече контрольного символа в конце строки (например $)
Assembler
1
2
3
4
5
6
7
...
lodsb
cmp al, '$'
jz exit
mov ah, 07 ;белые буквы на черном фоне
stosw
...
Добавлено через 5 минут
Lizakotenkova, не обязательно пользоваться оператором lea, можно просто использовать директиву offset, (mov dx, offset privet), таким образом мы экономим байты
1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.06.2014, 16:50 28
Продолжаем мучить фряшу — теперь вызываем системную библиотеку libc.so:
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
40
41
42
43
44
45
46
47
48
; fasm example of using the C library in Unix systems
; compile the source with commands like:
;   fasm libcdemo.asm libcdemo.o
;   gcc libcdemo.o -o libcdemo
;   strip libcdemo
format ELF
 
include 'ccall.inc'
 
struc tm
{
.tm_sec:    rb  2 ;  seconds after the minute -- [0,61]
.tm_min:    rb  2 ;  minutes after the hour   -- [0,59]
.tm_hour:   rb  2 ;  hours after midnight     -- [0,23]
.tm_mday:   rb  2 ;  day of the month         -- [1,31]
.tm_mon:    rb  2 ;  months since January     -- [0,11]
.tm_year:   rb  2 ;  years since 1900
.tm_wday:   rb  2 ;  days since Sunday        -- [0,6]
.tm_yday:   rb  2 ;  days since January 1     -- [0,365]
.tm_isdst:  rb  2 ;  Daylight Savings Time flag
tm_size =   $ - .
}
 
section '.text' executable
 
 public main
 extrn printf
 extrn time
 extrn strftime
 extrn localtime
 
 main:
    ccall   time, 0     ; получить время в сек. от 00:00:00 1-jan-1970
    mov [now],eax
    ccall   localtime, now  ; преобразрвать в структуру tm и получить указатель
    mov [ptime], eax
; преобразовать дату/время в строку ДД-месяц-ГГГГ ЧЧ:ММ:СС день_недели
    ccall   strftime, buf, BUFF_SZ, fmt, [ptime]
    ccall   printf, msg, buf; вывод на экран
    ret
 
section '.data' writeable
BUFF_SZ =   35
now:    dd  0
ptime   dd  ?
fmt db  '%d-%B-%Y %T, %A',0
msg db  "Hello, FreeBSD world!",0xA, 0xD,"Now %s.",0xA,0
buf rb  BUFF_SZ
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
16.09.2014, 14:06 29
Что-то совсем мало сказано про использование стандартной библиотеки Си.

Этот пост я направляю в первую очередь преподавателям и учителям.

Начинать HelloWorld с реализации для DOS, с использованием WinAPI или макросов, по моему мнению, очень не правильно.
Если изучать Ассемблер после Си, то можно легче понять происходящее, а самое главное, объяснить всем студентам/школьникам значимость Ассемблера, архитектуру компьютера и правила исполнения программ. Современный курс не должен концентрироваться на 100500 способах вывода последовательности байт в консоль и изучении систем исчисления. Чем быстрее будет изучен математический сопроцессор, SSE и прочие вкусности, тем больше можно успеть в рамках курса. А это значит, что надо пользоваться готовыми инструментами для взаимодействия человека и компьютера.

Win32

Теперь вспомним, что в Си программа начинает исполняться с функции main. Реализуем её. Эта функция возвращает число с типом int, для Win32, в соответствии с "соглашением о вызове" cdecl, оно должно быть возвращено через регистр EAX.
Процесс сборки готовой программы разобьём на два этапа:
- компиляция asm-файла в объектный файл,
- компоновка объектного файла со стандартными библиотеками средством, предполагающим сборку Си-приложения.
Первый пункт требует, что бы мы не забыли "опубликовать" нашу функцию. Второй - предполагает, что компоновщик будет ждать функцию main.
В качестве компилятора языка Ассемблера я буду использовать NASM, поменять его на другой не составит труда. В роли компоновщика рассмотрю MinGW и MSVS.

Первый пример: "Ничего не делаем"
Assembler
1
2
3
4
5
6
global _main
 
section .code
_main:
        mov     eax, 13
        ret
Компилируем, компонуем (MinGW), запускаем и смотрим код ошибки
Bash
1
2
3
4
5
6
7
8
D:\work>nasm -f win32 hello.asm -o hello.obj
 
D:\work>mingw32-gcc hello.obj -o hello.exe
 
D:\work>hello.exe
 
D:\work>echo %ERRORLEVEL%
13
Добавим использование функции printf. Не забываем объявить о ней компилятору Ассемблера:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
global _main
extern _printf
 
section .code
_main:
        push    msg
        call    _printf
        add     esp, 4
 
        mov     eax, 0
        ret
 
section .data
msg     db "Hello World", 10, 0
Компилируем, компонуем, запускаем и видим долгожданную строку.
Я говорил, что можно скомпоновать и с помощью MSVS:
Bash
1
D:\work>link hello.obj /out:hello.exe /subsystem:console /defaultlib:msvcrt
Теперь вспомним, что в main передаются ещё и параметры. Они лежат в стеке. Там сейчас:
- адрес возврата (4 байта),
- int argc (4 байта),
- char *argv[] (4 байта).
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
global _main
extern _printf
 
section .code
_main:
        mov     eax, [esp+8]
        mov     eax, [eax]
        push    eax
        push    msg
        call    _printf
        add     esp, 8 ; Не забываем, что теперь надо убрать 8 байт из стека
 
        mov     eax, 0
        ret
 
section .data
msg     db "Hello World!!!", 10
        db "My name is '%s'", 10, 0
Linux (x86)

А тут ничего почти не изменилось . Мы не использовали системнозависимых функций. Но нам потребуется:
- избавиться от префикса "_",
- изменить формат объектного файла
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
global main
extern printf
 
section .code
main:
        mov     eax, [esp+8]
        mov     eax, [eax]
        push    eax
        push    msg
        call    printf
        add     esp, 8
 
        mov     eax, 0
        ret
 
section .data
msg     db "Hello World!!!", 10
        db "My name is '%s'", 10, 0
Компилируем, компонуем, запускаем:
Bash
1
2
3
4
5
~/work$ nasm -f elf32 hello.asm -o hello.o
~/work$ gcc hello.o -o hello
~/work$ ./hello
Hello World!!!
My name is './hello'
Замечание: Если добавить ключ "--prefix _" в nasm при компиляции в Win32, то последний код, будет работоспособным.

Win64

Тут нас ждут следующие изменения:
- Регистры увеличились и в размера и в количестве .
- Параметры передаются через регистры, для нас важно, что целые числа и указатели будут лежать в RCX, RDX, R8 и R9, действительные в XMM0L, XMM1L, XMM2L и XMM3L, остальное через стек.
- Вызывающая подпрограмма должна зарезервировать в стеке место для 4-х регистров!!!
- Префикс не нужен.
- Изменился формат объектных файлов.
Остальное читаем в http://msdn.microsoft.com/en-u... 35286.aspx

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
global main
extern printf
 
section .code
main:
        sub     rsp, 4*8
 
        mov     rdx, [rdx]
        mov     rcx, msg
        call    printf
 
        add     rsp, 4*8
        mov     rax, 0
        ret
 
section .data
msg     db "Hello World!!!", 10
        db "My name is '%s'", 10, 0
Компиляция и компоновка (MinGW64):
Bash
1
2
D:\Work>nasm -f win64 hello.asm -o hello.obj
D:\Work>x86_64-w64-mingw32-gcc hello.obj -o hello.exe
Linux (x64)

Изменения:
- Параметры передаются через регистры. Целые числа/указатели в rdi, rsi, rdx, rcx, r8 и r9. Действительные xmm0-xxm7, остальное через стек.
- Если вызывается подпрограмма с переменным числом параметров, то в RAX указываем число использованных xmm-регистров!!!
- Префикс не нужен.
- Изменился формат объектных файлов.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
global main
extern printf
 
section .code
main:
        mov     rax, 0
        mov     rsi, [rsi]
        mov     rdi, msg
        call    printf
 
        mov     rax, 23
        ret
 
section .data
msg     db "Hello World!!!", 10
        db "My name is '%s'", 10, 0
Компиляция, компоновка:
Bash
1
2
~/work$ nasm -f elf64 hello.asm -o hello.o
~/work$ gcc hello.o -o hello
P.S.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
global main
extern wprintf
extern _setmode
 
section .code
main:
        push    0x20000 ; _O_U16TEXT
        push    1       ; stdout
        call    _setmode
        add     esp, 8
 
        push    msg
        call    wprintf
        add     esp, 4
        
        mov     eax, 0
        ret
 
section .data
msg     dw __utf16__(`Hello World!!! \u263a`), 10
        dw __utf16__(`Привет мир!!!`), 10
        dw __utf16__(`Hello, \u4e16\u754c!!!`), 10, 0
Что бы увидеть последние два символа, запустите программу из ConEmu
1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.09.2014, 16:36 30
Цитата Сообщение от AlexVRud Посмотреть сообщение
Этот пост я направляю в первую очередь преподавателям и учителям.
Как-то борзо.
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
16.09.2014, 17:06 31
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Как-то борзо.
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины. От того, что они дали решать Написать программу для расчета формулы студенту в DosBox, толка не будет. Только потратят драгоценное время. И студент уже не успеет подумать, а "как применить SSE3 инструкцию haddps для оптимизации умножения матрицы 4х4 на вектор".
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.09.2014, 18:39 32
Цитата Сообщение от AlexVRud Посмотреть сообщение
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины.
Дык, тазм или как? Про это я говорил ещё в середине 90-х...
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
06.11.2014, 13:22 33
"Hello, world" вертикально и разноцветно:
https://www.cyberforum.ru/post6695315.html
0
Модератор
Эксперт по компьютерным сетям
1761 / 670 / 141
Регистрация: 10.06.2009
Сообщений: 2,604
20.03.2015, 00:42 34
Вариант на тему masm64 и chcp1251
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
40
41
42
43
OPTION DOTNAME
option casemap:none
 
include temphls.inc
include win64.inc
include kernel32.inc
includelib kernel32.lib
 
OPTION PROLOGUE:rbpFramePrologue
OPTION EPILOGUE:rbpFrameEpilogue
 
.data
msgtw   db  'cp1251 Привет из консоли!'
msgtr   db ?
stdout dd ?
stdin  dd ?
cWritten dd ?
cReaden dd ?
 
.code
WinMain proc <1> ;parmarea 1*8 bytes
LOCAL msg:MSG
    invoke  AllocConsole                                  ;New Console?
    invoke  SetConsoleCP, 1251                             ;Console chcp1251
    invoke  SetConsoleOutputCP, 1251                       ;Output  chcp1251
 
    invoke  GetStdHandle, STD_INPUT_HANDLE
    mov stdin,  eax
    invoke  GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
 
    invoke  SetConsoleMode, eax, ENABLE_PROCESSED_OUTPUT
 
    invoke  WriteConsole, stdout, ADDR msgtw, SIZEOF msgtw, ADDR cWritten, NULL
 
    invoke  FlushConsoleInputBuffer
    invoke  ReadConsole, stdin, ADDR msgtr, SIZEOF msgtr, ADDR cReaden, NULL
    invoke  FreeConsole
;invoke ExitProcess,0 
;    xor     eax, eax
    call    ExitProcess ; Можно и так
WinMain endp
end
1
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,124
Записей в блоге: 12
08.11.2016, 15:31 35
Давайте у кого меньше получится код!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.model tiny
.code
org 100h
 
Start:
 
; При запуске проги cx=0FFh (нам нужно ch=0), si=100h
  mov cl,len
@@1:
  lodsb
  int 29h
  loop @@1
  ret  ; в стеке находится 0, а по адресу [0] - int 20h
 
db 13,'Hello World'
len = $-Start
 
end Start
20 байт!

Добавлено через 8 минут
Ещё один вариант, тоже на 20 байт...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.model tiny
.code
org 100h
 
Start:
 
; При запуске проги si=100h
@@1:
  lodsb
  int 29h
  add al,100h-'d'  ; чтобы в коде не было буквы 'd'
  jne @@1
  ret  ; в стеке находится 0, а по адресу [0] - int 20h
 
db 13,'Hello World'
 
end Start
Меньше пока никак

Добавлено через 3 минуты
И ещё...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.model tiny
.code
org 100h
 
Start:
 
; При запуске проги si=100h
@@1:
  lodsb
  int 29h
  dec ax
  jns @@1
  ret  ; в стеке находится 0, а по адресу [0] - int 20h
 
db 13,'Hello World',0
 
end Start
Правда, нолик тоже выводит...

Добавлено через 4 минуты
Правда вариант,
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.model tiny
.code
org 100h
 
Start:
 
mov dx,si
mov ah,9
int 21h
ret  ; в стеке находится 0, а по адресу [0] - int 20h
 
String db 13,'Hello World$'
 
end Start
тоже в 20 байт умещается...

Добавлено через 4 минуты
Оооо! 19 байт
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.model tiny
.code
org 100h
 
Start:
 
xchg ax,bp  ; при запуске старший байт в bp=9
mov dx,offset String
int 21h
ret  ; в стеке находится 0, а по адресу [0] - int 20h
 
String db 'Hello World$'
 
end Start
1
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,124
Записей в блоге: 12
02.12.2016, 15:13 36
Сделал вывод 'Hello World' с использованием только 1-байтовых инструкций:
Значения регистров при запуске программы (DOS COM)
p.s. Посмотрите, кому интересно, заодно изучите, какие значения регистров получает COM-программа при старте
1
Terminator of naked apes
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
16.12.2016, 21:04 37
Цитата Сообщение от Jin X Посмотреть сообщение
Давайте у кого меньше получится код!
Цитата Сообщение от Jin X Посмотреть сообщение
Сделал вывод 'Hello World' с использованием только 1-байтовых инструкций
Таким можно маяться только от полного уныния и очаяния, например ;о) Впрочем, и трюкачить на Асме тоже можно, но прежде всего необходимо понимать, что мы пишем кодим на самом лучшем языке на свете (а все остальные т.н. "погромисты" нам люто, бешено завидуют, например ;о) Ведь именно на Асме пишется такое, за одно название коего здесь тупо забанят навсегда, именно на нём получается одновременно самый короткий и самый быстрый код, именно на Асме пока ещё можно создать хелловорд сложное современное приложение для лучшей оси в мире (не устанавливая для этого гигатонны медленного глюкавого дерьма, например ;о)

Конечно, и у Асма есть некоторые небольшие недостатки, но и они постепенно исчезают (что можно проиллюстрировать сложнейшей программой конечно же очередным хеллувордом, например ;о)

Исходник, правда, здесь опубликовать невозможно, т.к. он в моднейшей кодировке UNICODE UTF-16 (а на форуме кодировка прошлого века Win-1251, например ;о) А посему тот, кому будет недостаточно нотариально заверенного скриншота, завсегда может заглянуть в архив с кодом, например ;о)
Миниатюры
Написать программу, выводящую строку "Hello World" на экран  
Вложения
Тип файла: zip HelloUW.zip (12.1 Кб, 15 просмотров)
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,124
Записей в блоге: 12
18.05.2017, 00:40 38
Некоторые начинающие программисты иногда мешают код с данными. А мы ругаем их за это. Но я тут подумал: а почему бы не сделать такое смешивание вполне легальным?
Например так:
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
.model tiny
locals
 
.code
.startup
 
                call    Print
                db      'Hello World',0
 
                int     20h
 
Print           proc
                pop     bx
                mov     ah,2
                cmp     ax,?
                  org $-2
        @@next: int     21h
                mov     dl,[bx]         ; для EXE можно добавить CS (mov dl,cs:[bx])
                inc     bx
                test    dl,dl
                jnz     @@next
                jmp     bx
Print           endp
 
end
Добавлено через 2 минуты
Заметьте: сюда ещё и антиотладка лайтовая ненароком встроилась...

Добавлено через 3 минуты
Ну и вариант с int 29h:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.model tiny
locals
 
.code
.startup
 
                call    Print
                db      'Hello World',0
 
                int     20h
 
Print           proc
                pop     si
                cmp     ax,?
                  org $-2
        @@next: int     29h
                lodsb                   ; для EXE можно добавить CS (segcs lodsb)
                test    al,al
                jnz     @@next
                jmp     si
Print           endp
 
end
0
170 / 57 / 6
Регистрация: 21.05.2017
Сообщений: 68
21.05.2017, 04:07 39
64-битный вариант

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
;hello64.asm
 
extrn MessageBoxA : proc
extrn ExitProcess : proc
 
.data
 
Caption db 'Message', 0
Text db 'Hello world!', 0
 
.code
 
main proc frame
    sub rsp, 28h
    .allocstack 28h
    .endprolog
 
    xor r9, r9        ;MB_OK
    lea r8, Caption   ;szCaption
    lea rdx, Text     ;szText
    xor rcx, rcx      ;hWnd
    call MessageBoxA
 
    call ExitProcess
    add rsp, 28h
main endp
 
end
К нему батник для удобства:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
REM BUILD.BAT
 
@echo off
 
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
 
set filename=hello64
 
if exist %filename%.obj del %filename%.obj
if exist %filename%.exe del %filename%.exe
 
ml64 /c /Fo%filename%.obj %filename%.asm
link %filename%.obj /ENTRY:main /SUBSYSTEM:WINDOWS /DEFAULTLIB:user32.lib /defaultlib:kernel32.lib
 
dir %filename%.*
 
pause
1
0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 13
29.05.2017, 16:54 40
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    .model small    ; модель памяти small
    .data           ; сегмент данных
        message db 'Hello, world!$'
    .stack 256      ; сегмент стек занимает 256 байтов
    .code           ; сегмент кода
    main:
        mov ax,@data    ; занесение адреса сегмента данных в 
                    ; регистр ax
        mov ds,ax
        lea dx,message
        mov ah,09h
        int 21h
        mov ah,4ch
        int 21h
    end main    ; конец программы с точкой входа main
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.model small
.data
message db "Hello!!!$"
.code
show_message    proc
mov dx,offset message
mov ah,9
int 21h         ; вывод строки
ret             ; возврат управления вызвавшей программе
show_message endp
start:
mov ax,@data
mov ds,ax
call show_message       ; вызов процедуры
mov ax,4C00h
int 21h         ; выход из программы
 
end start
0
29.05.2017, 16:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2017, 16:54
Помогаю со студенческими работами здесь

как написать на vb программу, выводящую на консоле 'Hi, world!'
как написать на vb программу, выводящую на консоле 'Hi, world!'(тип проекта консоль)

Написать подпрограмму, выводящую на экран строку из одинаковых символов.
Написать подпрограмму, выводящую на экран строку из одинаковых символов. Количество символов в...

Написать процедуру, выводящую на экран строку s длины N состоящую из символа q
Прошу вас помочь с решением задачки!!!:( Написать процедуру, выводящую на экран строку s...

Написать функцию, принимающую на вход строку, и выводящую ее на экран наоборот
написать функцию принимающую на вход строку и выводящую ее на экран наоборот Заранее огромное...

Написать программу выводящую на экран
таблицу значений функции Y= sin(X) на отрезке с шагом h. (аргумент функции sin(x) выражается в...

Написать программу, выводящую на экран треугольник
Всем привет! Написать программу выводящую на экран треугольник: * *** ...

Написать программу, выводящую на экран столбцы
Помогите пожалуйста , Нужно написать программу в QB64, выводящую на экран столбцы: зима ...


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

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