Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/20: Рейтинг темы: голосов - 20, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29

С++ и асемблер

19.11.2009, 13:52. Показов 3864. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имееться простая программа на С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
 
void main()
{
int A, N, B,G;
 
printf (" Vvedite progressiu A- pervi chlen, B- raznost, N- nuzniy element ");
scanf ("%d %d %d", &A ,&B ,&N);
 
G=A+(N-1)*B;
printf("G=%d ", G);
 
scanf ("%d", &N);
}
Ищет она N-ый член арифм прогрессии.
Как сделать вывод на экран этого члена с помощбю вставки ассемблера.
• Вывод информации на экран реализовывать средствами языка ассемблера. Для упрощения алгоритма вывода на экран числовой информации использовать шестнадцатеричную систему счисления. Рекомендуется организовать алгоритм вывода чисел в отдельной функции.
• В начале работы программы средствами языка ассемблера предлагать пользователю очистить экран и очищать его при необходимости.
• Не завершать работу программы до тех пор, пока пользователь не нажмет клавишу на клавиатуре. Чтение символа с клавиатуры реализовать командами языка ассемблера.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2009, 13:52
Ответы с готовыми решениями:

асемблер
(41*d/4+1)/(a-c)/b+a*d)

Асемблер
Три точки заданы своими декартовыми координатами. Определить номера точек, расстояние между которыми максимально (для этих точек квадрат...

Программа Асемблер
Помогите решить задачу на ассемблере через Pascal: F =Y+32*X/22

25
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 14:09
Вызывайте апи функции WriteConsole для вывода на консоль и ReadConsole для ввода.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 14:12  [ТС]
можно по подробней, просто с языком не сталкивался раньше, а тут задали лабу сделать при етом не дали почти никакой информации о языке, все на самоизучение
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 14:22
Язык тут не причем используются они так же как и в просто С++, только синтаксис другой несколько.
Вот тут есть пример работы с этими апи на чистом ассемблере.
А так же в мсдн описание WriteConsole и ReadConsole
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 18:22  [ТС]
почему в визуал студии нельзя сделать так :
C++
1
2
3
4
5
_asm {
     xor AX, AX; // обнуление регистра AX
     mov AH, 6; // код процедуры очистки дисплея
     int 10h;  // вызов прерывания BIOS
   }
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 18:26
Потому что это прерывание существует только в реальном режиме. В защищенном его нет.
Как вариант можете найти досовский компилятор и пользовать это прерывание в нем.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 18:32  [ТС]
Спасибо, просто лабу надо делать именно через прерывание, borland C++ 3.1 подойдет?
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 18:37
Наверное да, только создавайте программу, именно для доса.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 19:11  [ТС]
блин все равно не выполняет действия, призапуске как будто просто неучитываеться код
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 19:36
А если передавать ф-ции все необходимые параметры ?
Assembler
1
2
3
4
5
6
7
8
    mov ax,600h 
    xor cx,cx ; строка,колонка верхнего левого угла окна (считая от 0)
    mov dx,1950h ; строка,колонка нижнего правого угла окна (считая от 0)
    mov bh,07 ; аттрибут, которым будет заполнятся экран
    int 10h
    
    mov ah,01
    int 21h ; ожидание нажатия кнопки
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 20:02  [ТС]
большое спасибо очень помогло.
почему тут ошибка?

C++
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
L6:
    _asm{
        mov AL, a  //вывод результата на экран   ----------------------ОШИБКА 
        mov BL,AL
        shr AL, 4  //сдвиг на 4 разряда вправо
        mov CL, AL 
        cmp CL, 9  //если значение больше 9, то L7
        jg L7
        add CL, '0' //иначе прибавляем код '0'
        jmp L8
    }
 
L7:
    _asm{
        add CL, 'A'-10  //прибавляем код 'A'-10
    }
 
L8:
    _asm{
        mov AL, BL
        shl Al, 4  //сдвиг на 4 разряда влево
        shr Al, 4  //сдвиг на 4 разряда вправо
        cmp Al, 9
        jg L9
        add Al, '0'
        jmp L10
            }
L9:
    _asm{
        add AL, 'A'-10
    }
 
L10:
    _asm{
        mov AH, 2  
        mov DL, CL  //вывод первой части числа
        int 21h
        mov DL, AL  //вывод второй части числа
        int 21h
    }
    }
 
 
return 0;
}
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 20:22
Что такое a ? Это переменная ? Если да, то она должна быть типом char, т.е. занимать 1 байт.
Еще возможно, что компилятору просто не нравится такое имя. попробуйте какое-нибудь другое, напр. pA или еще что-нибудь.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 20:36  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
L3:
    _asm{
        mov AX, a   
        mov BX, d   
        mov CX, n   
 
    }
L4:
    _asm{           //реализация нахождения n-го элемента прогрессии по формуле a=a+(n-1)*d
        cmp CX, 0   //проверяем на n на 0
        je L5       //если n 0 -> L5 (Выход из цикла)
        
        add AX, BX  //иначе "a=a+d"
        sub CX, 1   //отнимаем от n 1
        
        jmp L4      //-> L4 повторяем цикл
    }
 
L5:
 
    _asm{
        mov a, AX
        mov d, BX
        mov n, CX
вот часть кода выше

Добавлено через 9 минут
сделал его типом char и переименвал, убрал все сдвиги, они не выполнялись, была ошибка.выводит какуето чушь когда число больше 16 в десятичной.
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 20:39
Регистр AX состоит из 2 байт и делится на две половинки ah и al каждая по байту.
Переменная A, в данном коде типа int, занимает 2 байта. Иными словами пользуйте ax, bx и т.п. в той строчке и ниже где не идет явная работа с 1 байтом.

Как-то трудновато понять что же именно делает ваша программа видя только куски. Вот здесь есть перевод числа в строку и вывод ее на экран правдо с помощью прерывания int 21h.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 20:45  [ТС]
сейчас покажу весь текст
C++
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// ISlaba2.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>
 
 
 
void main()
{
int A, N, B,G,i;
int Ga;
i=0;
 
 
printf ("Otchistit display da-1 net-2");
scanf ("%d", &i);
if(i == 1){
_asm {
    MOV  AH,0
    MOV  AL,2
    INT  10H
}
 
} 
 
printf (" Vvedite progressiu A- pervi chlen, B- raznost, N- nuzniy element ");
scanf ("%d %d %d", &A ,&B ,&N);
G=A+(N-1)*B;
printf("G=%d ", G);
printf("i=%d ", i);
Ga=G;
 
 
 
L6:
    _asm{
 
        mov AX, Ga  //вывод результата на экран
        mov BX, AX
         // shr AX, 4  //сдвиг на 4 разряда вправо
        mov CX, AX
        cmp CX, 9  //если значение больше 9, то L7
        jg L7
        add CX, '0' //иначе прибавляем код '0'
        jmp L8
    }
 
L7:
    _asm{
        add CX, 'A'-10  //прибавляем код 'A'-10
    }
 
L8:
    _asm{
        mov AX, BX
           //   shl Al, 4  //сдвиг на 4 разряда влево
          //    shr Al, 4  //сдвиг на 4 разряда вправо
        cmp AX, 9
        jg L9
        add AX, '0'
        jmp L10
        }
L9:
    _asm{
        add AX, 'A'-10
    }
 
L10:
    _asm{
        mov AH, 2
        mov DX, CX  //вывод первой части числа
        int 21h
          //    mov DX, AX  //вывод второй части числа
          //
        int 21h
    }
 
 
 
 
 
 
 
_asm {
    MOV  AH,01
    INT 21H
}
}
Ищет n-ый член прогрессии, я ее маленько переделал щас но смысл тот же, вывод в 16 ричной системе
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 21:08
Во первых данный способ сможет выводить только числа от 0 до 255 ( 0FFh), т.е. 2 знака он выводит.
Значит нужно вернуть обратно сдвиги, поменять видимо везде, кроме 42-43 строк ax, bx, cx на al, bl и cl соответственно.
А кроме того перед выводом первой, сохранять вторую часть числа в стек, а после восстанавливать, иначе она потеряется.
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 21:14  [ТС]
при возвращении al,bl,cl сраз ошибка в 44 строке
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 21:30
Что за ошибка ?
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
19.11.2009, 21:47  [ТС]
71: invalid combination of opcode and operand

А как просто вывести число не переводя его в 16-ую ситст, я думал надо просто убрать пару строк но у меня он начал выдовать звездочки))

Добавлено через 12 минут
Я понял как получать числа не старше их сист исчисл, тоесть если 10-ая сист исчисл то 9 макс число, 16-ая то 15 макс число. (
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.11.2009, 21:55
К чему эта ошибка даже не представляю... может в одном регистре написать shl al,4...
А насчет вывода я давал в #14 посте ссылку где есть вывод в десятеричной(и в любой другой) системе счисления.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2009, 21:55
Помогаю со студенческими работами здесь

Команды Асемблер
Подскажите на нормальном языке что означают команды int, in, call. И одно строчный пример на использование покажите если не трудно. Вроде...

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

16-ти битный асемблер
Вот у меня такое задание: Даны целые числа a1, …, an среди которых могут быть повторяющиеся члены. Найти число различных членов...

Асемблер (masm)
1) Написать набор процедур: установки видеорежима, установки страницы, установки цвета фона, установки точки, проверки буфера клавиатуры....

Команды в асемблер
Ребята, есть вот такой код, на языке асемблер: include 'emu8086.inc' #make_COM# ; COM file is loaded at CS:0100h ORG 100h ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru