Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Appostl
15 / 4 / 0
Регистрация: 30.12.2009
Сообщений: 93
#1

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

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

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

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

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

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

Составить программу для вывода на экран дисплея "бегущей" строки "Периферийные устройства ЭВМ" из (12,40) в (12,10) - Assembler
Нужно написать две программы вот их условия: 1.Составить программу для вывода на экран дисплея "бегущей" строки "Периферийные...

Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа - Assembler
Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа "str2",0 label_parse_string: inc EAX cmp EAX, ' ' jnz...

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

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

39
AlexVRud
464 / 175 / 46
Регистрация: 04.07.2014
Сообщений: 482
16.09.2014, 17:06 #31
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Как-то борзо.
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины. От того, что они дали решать Написать программу для расчета формулы студенту в DosBox, толка не будет. Только потратят драгоценное время. И студент уже не успеет подумать, а "как применить SSE3 инструкцию haddps для оптимизации умножения матрицы 4х4 на вектор".
0
Charles Kludge
Клюг
7636 / 3151 / 363
Регистрация: 03.05.2011
Сообщений: 8,382
16.09.2014, 18:39 #32
Цитата Сообщение от AlexVRud Посмотреть сообщение
Не сколько, так как именно они продолжают заниматься фигнёй, преподавая устаревшие дисциплины.
Дык, тазм или как? Про это я говорил ещё в середине 90-х...
0
Charles Kludge
Клюг
7636 / 3151 / 363
Регистрация: 03.05.2011
Сообщений: 8,382
06.11.2014, 13:22 #33
"Hello, world" вертикально и разноцветно:
Написать программу вывода строки на экран: прямой записью в видеопамять / функциями BIOS
0
NoNaMe
Эксперт по компьютерным сетям
516 / 237 / 36
Регистрация: 10.06.2009
Сообщений: 1,063
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
Евгений, Самара
1928 / 705 / 122
Регистрация: 14.12.2014
Сообщений: 1,684
Завершенные тесты: 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
Евгений, Самара
1928 / 705 / 122
Регистрация: 14.12.2014
Сообщений: 1,684
Завершенные тесты: 2
02.12.2016, 15:13 #36
Сделал вывод 'Hello World' с использованием только 1-байтовых инструкций:
Значения регистров при запуске программы (DOS COM)
p.s. Посмотрите, кому интересно, заодно изучите, какие значения регистров получает COM-программа при старте
1
KyberMax
Terminator of naked apes
792 / 131 / 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
Евгений, Самара
1928 / 705 / 122
Регистрация: 14.12.2014
Сообщений: 1,684
Завершенные тесты: 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
2 / 1 / 1
Регистрация: 21.05.2017
Сообщений: 22
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 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2017, 16:54
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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