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

Сложить два регистра и вывести значение на экран

03.03.2015, 15:09. Показов 5170. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сложить два регистра и вывести значение на экран. fasm, os 64bit так понимаю mz не пойдет надо использовать format PE64 GUI или другое. В инете смотрю везде каша типа
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
; Example of 64-bit PE program
 
format PE64 GUI
entry start
 
section '.text' code readable executable
 
  start:
        sub     rsp,8*5         ; reserve stack for API use and make stack dqword aligned
 
        mov     r9d,0
        lea     r8,[_caption]
        lea     rdx,[_message]
    ;     lea   rdx,ax
        mov     rcx,0
        call    [MessageBoxA]
 
        mov     ecx,eax
        call    [ExitProcess]
 
section '.data' data readable writeable
 
  _caption db 'Win64 assembly program',0
  _message db 'Hello World!',0
 
section '.idata' import data readable writeable
 
  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA user_name,RVA user_table
  dd 0,0,0,0,0
 
  kernel_table:
    ExitProcess dq RVA _ExitProcess
    dq 0
  user_table:
    MessageBoxA dq RVA _MessageBoxA
    dq 0
 
  kernel_name db 'KERNEL32.DLL',0
  user_name db 'USER32.DLL',0
 
  _ExitProcess dw 0
    db 'ExitProcess',0
  _MessageBoxA dw 0
    db 'MessageBoxA',0
неужели нельзя проще:
Assembler
1
2
3
mov ax,8
mov bx,10
add ax,bx
вывести ax

int 21 h надо в регистр dx поместить начало текста кот. хочешь вывести(как то так), как вывести значение из регистра не пойму, везде "каша" на masm, yasm, fasm, везде все по разному.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2015, 15:09
Ответы с готовыми решениями:

Два одномерных массива поэлементно сложить между собой - третий - сложить каждый элементы - вывести на экран
2 одномерных массива - сложить между собой - третий - сложить каждый элементы - вывести на экран....

Сложить два числа вывести на экран
Такая проблема , складываю 11 и 12 на экран выводит только одно число 3 text segment...

Ввести два числа с клавиатуры, сложить их и вывести на экран
Как ввести два числа с клавиатуры, сложить их и вывести на экран? Почему в конце программа...

Вывести значение регистра на экран
Есть такая проблема, пишу резидент, поэтому в части реализации недоступны многие функции, кручусь...

3
8 / 8 / 2
Регистрация: 10.12.2013
Сообщений: 148
03.03.2015, 18:49 2
Лучший ответ Сообщение было отмечено Сергей2014 как решение

Решение

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
format PE Console 4.0
 
include 'fasm/include/win32a.inc'
 
section '.data' data readable writeable
        msg db "%d",0
 
entry startPoint
section '.code' code executable readable writeable
startPoint:
        mov eax, 2
        mov ebx, 5
        add eax, ebx
        push eax
        invoke printf, msg
        invoke scanf
        invoke ExitProcess,0
 
section '.idata' import data readable writeable
 
library kernel, 'KERNEL32.DLL',\
        user, 'USER32.DLL',\
        msvcrt,'msvcrt.dll'
 
import kernel,\
         ExitProcess,'ExitProcess'
 
import msvcrt,\
         printf,'printf',\
         scanf,'scanf'

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
format PE GUI 4.0
include 'fasm/include/win32a.inc'
 
entry start
section '.data' data readable writeable
 
msg1 db "%d",0
buff db 30 DUP ?
xxx dd 30 DUP ?
 
section '.code' code readable executable
 
start:
        mov eax,50
        add eax,10
        invoke wsprintfA, buff, msg1, eax
        invoke MessageBox,0,buff,xxx,0
        invoke ExitProcess,0
 
section '.idata' import data readable writeable
 
library kernel, 'KERNEL32.DLL',\
        user, 'USER32.DLL'
 
import kernel,\
       ExitProcess,'ExitProcess'
import user,\
       wsprintfA,'wsprintfA',\
       MessageBox,'MessageBoxA'
1
3 / 3 / 0
Регистрация: 09.11.2014
Сообщений: 94
04.03.2015, 11:38  [ТС] 3
Спасибо разобрался. Прошу прощения сразу не ответил.
Цитата Сообщение от AleksyVB Посмотреть сообщение
msg db "%d"
Формат преобразования числа в строку
Цитата Сообщение от AleksyVB Посмотреть сообщение
invoke printf,
так понимаю, берет значение из стека
Цитата Сообщение от AleksyVB Посмотреть сообщение
msg
указывает, что число надо перевести в строку
во втором случае
Цитата Сообщение от AleksyVB Посмотреть сообщение
wsprintfA
Цитата Сообщение от AleksyVB Посмотреть сообщение
buff
адрес будущей текстовой строки
Цитата Сообщение от AleksyVB Посмотреть сообщение
msg1
формат перевода числа
Цитата Сообщение от AleksyVB Посмотреть сообщение
MessageBox
Цитата Сообщение от AleksyVB Посмотреть сообщение
buff
что выводим в окно (адрес)
Цитата Сообщение от AleksyVB Посмотреть сообщение
xxx
что выводим в заголовок (адрес)
далее 0 - тип окна
Единственно не пойму в заголовок окна у меня не выводит ничего

Добавлено через 22 минуты
Цитата Сообщение от Сергей2014 Посмотреть сообщение
Единственно не пойму в заголовок окна у меня не выводит ничего
Assembler
1
2
3
4
5
6
 mov eax,50
 add eax,10
 invoke wsprintfA, buff, msg1, eax
 mov eax,10   ;ставим нужное значение в eax(предыдущее утеряно)
 invoke wsprintfA,xxx, msg1, eax ;   преобразуем в строку eax  , записываем по адресу xxx
 invoke MessageBox,0,buff,xxx,0 ;выводим этот заголовок и текст
0
8 / 8 / 2
Регистрация: 10.12.2013
Сообщений: 148
04.03.2015, 13:14 4
Цитата Сообщение от Сергей2014 Посмотреть сообщение
так понимаю, берет значение из стека
Да, но можно было и одной строкой записать "invoke printf, msg, eax", invoke сам поместит значения в стек и вызовет printf, параметры которого возьмутся из стека.
Цитата Сообщение от Сергей2014 Посмотреть сообщение
wsprintfA
Эта функция преобразует из числа в строку, так как MessageBox ожидает строку.

Цитата Сообщение от Сергей2014 Посмотреть сообщение
Единственно не пойму в заголовок окна у меня не выводит ничего
Потому что переменная xxx с неопределенным значением.
Assembler
1
2
section '.data' data readable writeable
xxx db "caption"
0
04.03.2015, 13:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2015, 13:14
Помогаю со студенческими работами здесь

Как сложить два байта регистра AX
Ребята подскажите, как сложить два байта регистра AX? Если я правильно понимаю, то после сложения...

Как вывести на экран значение регистра?
Помогите, не получается вывести на экран значение регистра cx, какие-то кракозябры только...

Сложить два введенных числа и вывести результат
Изучать c начал совсем недавно. Помогите, пожалуйста, разобраться с функцией scanf. Требуется...

Сложить два числа и вывести результат в ячейку
Как сложить два числа в vba exel так, чтобы результат выводился в отдельную ячейку?


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

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