Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Binary Mind
2 / 2 / 0
Регистрация: 12.02.2014
Сообщений: 57
1

Не могу понять как исправить (код на FASM-е), простенькая программа

21.06.2014, 20:50. Просмотров 1020. Ответов 6
Метки нет (Все метки)

Написал программу для примера сдвигов, сдвигает нормально, вот только выводит каскадом (с начала выводит все переменные sent а потом только значение после сдвига), не знаю как исправить это - как после вывода нужного sent, прекратить вывод остальных + ещё для разных введённых [A] структура вывода меняется
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
49
50
51
52
format PE console 4.0
include 'win32a.inc'
 
start:
 
    cinvoke printf,  sent0, 'A'
    cinvoke scanf, sent4, A
 
    mov eax, [A]
    shl eax, 2d
    cinvoke printf, sent1, eax
    cinvoke printf, endl
 
    mov eax, [A]
    rol eax, 2d
    cinvoke printf, sent2, eax
    cinvoke printf, endl
 
    mov eax, [A]
    rcl eax, 2d
    cinvoke printf, sent3, eax
    cinvoke printf, endl
 
    invoke  sleep, 50000
 
 
sentences:
 
invoke  exit, 0
sent0 db  'Enter %c: ', 0
sent1 db  'shl [A] by 2 = '
sent2 db  'rol [A] by 2 = '
sent3 db  'rcl [A] by 2 = '
sent4 db  '%d', 0
endl db '', 10
A   dd  ?
 
 
data import
 
 library msvcrt,'MSVCRT.DLL',\
    kernel32,'KERNEL32.DLL'
 
 import kernel32,\
    sleep,'Sleep'
 
 import msvcrt,\
    puts,'puts',\
    scanf,'scanf',\
        printf,'printf',\ 
    exit,'exit'
end data
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2014, 20:50
Ответы с готовыми решениями:

Простенькая программа на fasm
format PE console 4.0 include 'win32a.inc' mov EAX, 500d mov , 600d add...

Перевод числа в текстовую строку, исправить код (FASM)
Помогите найти ошибку в программе и исправить её( программа должна переводить...

Не могу понять о чём код
.stack 100h .data teks dw 0 len dw 0 tek dw ? string db 255 DUP(' ')...

emulator 8086, команда mov, не могу понять код
Есть следующий простой код, который выводит в видеорежиме символ 'A' ORG 100h...

Не работает программа не могу понять в чём дело.
asm("movb 0x0,%AH"); asm("movb 0x10,%al"); asm("int 0x10"); ...

6
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
21.06.2014, 21:26 2
Лучший ответ Сообщение было отмечено Binary Mind как решение

Решение

Проще надо быть, это не С++:
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
49
50
51
52
53
54
55
56
    format  PE console 4.0
    include 'win32a.inc'
 
start:  cinvoke printf, sent0
    cinvoke scanf, sent4, A
    mov eax, [A]
    mov ebx, eax
    mov ecx, eax
    shl eax, 2
    rol ebx, 2
    rcl ecx, 2
    cinvoke printf, sent1, eax, ebx, ecx
 
;   cinvoke printf, endl
;
;   mov eax, [A]
;   rol ebx, 2d
;   cinvoke printf, sent2, eax
;   cinvoke printf, endl
 
;   mov eax, [A]
;   rcl eax, 2d
;   cinvoke printf, sent3, eax
;   cinvoke printf, endl
 
;   invoke  sleep, 50000
    invoke  _getch
;   jmp start   ; eсли не ctr/c
 
sentences:
 
    invoke  exit, 0
;
    sent0   db 'Enter A:', 0
    sent1   db 'shl [A] by 2 = %d', 0Dh, 0Ah
    sent2   db 'rol [A] by 2 = %d', 0Dh, 0Ah
    sent3   db 'rcl [A] by 2 = %d', 0Dh, 0Ah,0
    sent4   db '%d', 0
;   endl    db '', 10
    A   dd ?
 
 
    data    import
 
    library msvcrt,'MSVCRT.DLL';,\
;   kernel32,'KERNEL32.DLL'
 
;   import  kernel32,\
;   sleep,'Sleep'
 
    import  msvcrt,\
    _getch,'_getch',\
    scanf,'scanf',\
    printf,'printf',\
    exit,'exit'
    end data
1
Binary Mind
2 / 2 / 0
Регистрация: 12.02.2014
Сообщений: 57
22.06.2014, 01:09  [ТС] 3
Спасибо. ) А в чём у меня была ошибка?
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
22.06.2014, 01:13 4
Цитата Сообщение от Binary Mind Посмотреть сообщение
у меня была ошибка
А я знаю? Быстрее было поправить, чем искать глюки.
0
Binary Mind
2 / 2 / 0
Регистрация: 12.02.2014
Сообщений: 57
22.06.2014, 01:19  [ТС] 5
ну да, согласен. Но тут Вы использовали разные регистры, чтоб вывести всё сразу, ну а если надо будет много чего выводить, тогда регистров не хватит, а разные переменные только увеличят код и так грамоздкий
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
22.06.2014, 01:52 6
Цитата Сообщение от Binary Mind Посмотреть сообщение
ну а если надо будет много чего выводить
Шаблоны для вводы/вывода можно конструировать на ходу, а переменные хранить в стеке или динамических массивах.
1
Binary Mind
2 / 2 / 0
Регистрация: 12.02.2014
Сообщений: 57
22.06.2014, 01:58  [ТС] 7
Большое спасибо
0
22.06.2014, 01:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2014, 01:58

Не могу полностью понять код программы. Генератор случайных чисел
Помогите написать толковые комментарии к этой части программы. Не очень ясно с...

Не работает простенькая программа. Не могу понять почему
Код программы: public class Calculate { public static void main(String...

Программа на fasm, исправить код
Вот программа: use16 org 100h mov al, d8 sub ah, ah dec ah mov d16,...


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

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

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