Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Appostl
15 / 4 / 1
Регистрация: 30.12.2009
Сообщений: 93
#1

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

20.10.2011, 12:51. Просмотров 57756. Ответов 40
Метки нет (Все метки)

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

Заранее спасибо

http://www.cyberforum.ru/asm-beginners/thread900143.html

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2011, 12:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать программу, выводящую строку "Hello World" на экран (Assembler):

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

Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа
Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа "str2",0...

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

Написать программу выводящую на линейку семисегментных индикаторов АЛС 318 бегущую строку
Помогите с программой: Написать программу выводящую на линейку симесигментных...

Разработать алгоритм и написать резидентную программу, выводящую на экран характеристики компьютера
Если можете, помогите с прогой.....выскакивает какая-то ошибка, а как ее...

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

Не по теме:

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

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

Не по теме:

понято!

1
Lizakotenkova
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
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
07.12.2013, 08:53 #26
Продолжим извраты - теперь и под FreeBSD. include-файлы лежат на https://github.com/graudeejs/asm4BSD/tree/master/FreeBSD/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
1
Jallot
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
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
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
AlexVRud
477 / 189 / 72
Регистрация: 04.07.2014
Сообщений: 530
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-us/library/ms235286.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
0
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
16.09.2014, 16:36 #30
Цитата Сообщение от AlexVRud Посмотреть сообщение
Этот пост я направляю в первую очередь преподавателям и учителям.
Как-то борзо.
0
AlexVRud
477 / 189 / 72
Регистрация: 04.07.2014
Сообщений: 530
16.09.2014, 17:06 #31
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Как-то борзо.
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины. От того, что они дали решать http://www.cyberforum.ru/assembler-math/thread1214814.html студенту в DosBox, толка не будет. Только потратят драгоценное время. И студент уже не успеет подумать, а "как применить SSE3 инструкцию haddps для оптимизации умножения матрицы 4х4 на вектор".
0
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
16.09.2014, 18:39 #32
Цитата Сообщение от AlexVRud Посмотреть сообщение
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины.
Дык, тазм или как? Про это я говорил ещё в середине 90-х...
0
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
06.11.2014, 13:22 #33
"Hello, world" вертикально и разноцветно:
http://www.cyberforum.ru/post6695315.html
0
NoNaMe
[dead]
Эксперт по компьютерным сетям
636 / 290 / 44
Регистрация: 10.06.2009
Сообщений: 1,316
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
Jin X
❗❗ RTFM 👈
4002 / 1146 / 151
Регистрация: 14.12.2014
Сообщений: 2,288
Записей в блоге: 5
Завершенные тесты: 2
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
Jin X
❗❗ RTFM 👈
4002 / 1146 / 151
Регистрация: 14.12.2014
Сообщений: 2,288
Записей в блоге: 5
Завершенные тесты: 2
02.12.2016, 15:13 #36
Сделал вывод 'Hello World' с использованием только 1-байтовых инструкций:
http://www.cyberforum.ru/assembler-dos/thread1866235.html
p.s. Посмотрите, кому интересно, заодно изучите, какие значения регистров получает COM-программа при старте
1
KyberMax
Terminator of naked apes
827 / 134 / 34
Регистрация: 13.02.2015
Сообщений: 328
16.12.2016, 21:04 #37
Цитата Сообщение от Jin X Посмотреть сообщение
Давайте у кого меньше получится код!
Цитата Сообщение от Jin X Посмотреть сообщение
Сделал вывод 'Hello World' с использованием только 1-байтовых инструкций
Таким можно маяться только от полного уныния и очаяния, например ;о) Впрочем, и трюкачить на Асме тоже можно, но прежде всего необходимо понимать, что мы пишем кодим на самом лучшем языке на свете (а все остальные т.н. "погромисты" нам люто, бешено завидуют, например ;о) Ведь именно на Асме пишется такое, за одно название коего здесь тупо забанят навсегда, именно на нём получается одновременно самый короткий и самый быстрый код, именно на Асме пока ещё можно создать хелловорд сложное современное приложение для лучшей оси в мире (не устанавливая для этого гигатонны медленного глюкавого дерьма, например ;о)

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

Исходник, правда, здесь опубликовать невозможно, т.к. он в моднейшей кодировке UNICODE UTF-16 (а на форуме кодировка прошлого века Win-1251, например ;о) А посему тот, кому будет недостаточно нотариально заверенного скриншота, завсегда может заглянуть в архив с кодом, например ;о)
0
Миниатюры
Написать программу, выводящую строку "Hello World" на экран  
Вложения
Тип файла: zip HelloUW.zip (12.1 Кб, 5 просмотров)
Jin X
❗❗ RTFM 👈
4002 / 1146 / 151
Регистрация: 14.12.2014
Сообщений: 2,288
Записей в блоге: 5
Завершенные тесты: 2
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
ml64
3 / 2 / 1
Регистрация: 21.05.2017
Сообщений: 31
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
0
ХЪ
0 / 0 / 1
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2017, 16:54
Привет! Вот еще темы с решениями:

Составить программу вывода на экран слова "Привет"
1.Составить программу вывода на экран слова «Привет!». Желательно с...

Заменить в строке группу символов "123" на "!", результат вывести на экран
Помогите решить задачу. Ввести с клавиатуры строку. Заменить группу символов &quot;...

Написать программу на ассемблере, которая подсчитывает количество букв "а" в строке
Здравствуйте. Помогите пожалуйста написать программу на ассемблере, которая...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru