Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.
Аннотация к работе
Язык ассемблера (англ. assembly language) - машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд [1]; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ [2]. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и дает возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления) [3]. Перевод программы на языке ассемблера в исполнимый машинный код (вычисление выражений, раскрытие макрокоманд, замена мнемоник собственно машинными кодами и символьных адресов на абсолютные или относительные адреса) производится ассемблером - программой-транслятором, которая и дала языку ассемблера его название. Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на вычисляемые ассемблером или компоновщиком абсолютные или относительные адреса, а также так называемые директивы (команды ассемблера, не переводимые в машинные команды процессора, а выполняемые самим ассемблером).Курсовой проект выполняется в соответствии с этапами разработки программного обеспечения: анализ и постановка задачи для решения на ЭВМ, проектирование, кодирование, отладка и тестирование разработанной программы. Необходимо разработать программы для ее вычисления на языках Си, Ассемблер УМ и Ассемблер IBM PC.#include "stdafx.h" #include #include using namespace std; cout << "Введите элементы массива" << endl; void raschet(float a, float c, float d[])Ex77 start 0 lda c mul c2 sta p ldx c0 lda c0 usl comp c12 jgt art jeq art jsub inc rmo x,a ;i:=i 1 add c3 rmo a,x j usl art lda y hlt c word 20 e word 2 c0 word 0 c1 word 1 c3 word 3 c4 word 4 c12 word 12 c2 word 2 y word 0 d word 20 word 12 word 4 word-16 o resb 3 k resb 3 p resb 3 inc lda e mul e add c1 sta k lda d,x div c4 sta o lda p sub o div k add y sta y rsub end Ex77; содержимое буфера mov si, offset buff 2; берем адрес начала строки cmp byte ptr [si], "-"; если первый символ минус jnz ii1 mov di, 1; устанавливаем флаг inc si; и пропускаем его ii1: xor ax, ax mov bx, 10; основание сс ii2: mov cl, [si]; берем символ из буфера cmp cl, 0dh; проверяем не последний ли он jz endin ; на правильность cmp cl, "0"; если введен неверный символ <0 jl er cmp cl, "9"; если введен неверный символ >9 ja er sub cl, "0"; делаем из символа число mul bx ; умножаем на 10 add ax, cx; прибавляем к остальным inc si; указатель на следующий символ jmp ii2; повторяем er: mov dx, offset error; если была ошибка, то выводим сообщение об ; этом и выходим mov ah,09 int 21h int 20h; все символы из буфера обработаны число ; находится в ax endin: cmp di,1; если установлен флаг, то jnz ii3 neg ax; делаем число отрицательным ii3: ret error db "incorrect number$" buff db 6,7 Dup(?) OUTINT proc near;=====Процедура вывода test ax, ax; проверяем число на знак. jns oi1 mov cx, ax; если оно отрицательное, выведем минус и ; оставим его модуль mov ah, 02h mov dl, "-" int 21h mov ax, cx neg ax oi1: xor cx, cx; количество цифр будем держать в CX mov bx, 10; основание сс.Входные данные Си Int (десятичная СС) Си float (десятичная СС) Ассемблер УМ (шестнадцатеричная СС) Ассемблер IBM PC (десятичная СС) a = 2 c = 20 d[0] = 20 d[1] = 12 d[2] = 4 d[3] =-16 29 31 1D 29 a = 3 c = 30 d[0] = 51 d[1] = 41 d[2] = 24 d[3] =-21 20 21.625 14 20 a = 2 c = 20 d[0] = 20 d[1] = 14 d[2] = 4 d[3] = 16 28 29.3 1C 28Необходимо ввести нужное значение переменной "а", она может быть любым целым положительным или отрицательным числом. Необходимо ввести нужное значение переменной "с", она может быть любым целым положительным или отрицательным числом. Следующим появится новый запрос: "Введите 4 значений для массива:". Вводим 4 любых значений, которые могут быть любыми целыми положительными или отрицательными значениями. Вместо многоточия будет стоять число-ответ, которое получилось в результате подстановки в выражение (1) введенные Вами значений "а", "с" и значений массива "d[0]", "d[1]", "d[2]", "d[3]".Объем папки со всеми файлами, созданными при компиляции = 14 Мб Средняя продолжительность компиляции = 2.5 сек Время расчета ответа = крайне мало, менее 1 сек Объем папки со всеми файлами, созданными при компи
План
Оглавление
Введение
1. Системный анализ
2. Структурное программирования. Схема алгоритма. Программа на языке Си для int, float
3. Программирование
3.1 Программа на Ассемблере УМ
3.2 Подпрограмма ввода и вывода целых чисел на Ассемблере IBM
3.3 Программа на языке программирования Ассемблер IBM РС
4. Тестирование и отладка
5. Инструкция пользователя
6. Параметры программы
Заключение
Список использованной литературы ассемблер язык программирование алгоритм
Введение
Язык ассемблера (англ. assembly language) - машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд [1]; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ [2].
Автокод - язык программирования, предложения которого по своей структуре в основном подобны командам и обрабатываемым данным конкретного машинного языка [2].
Язык ассемблера - система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и дает возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления) [3].
Перевод программы на языке ассемблера в исполнимый машинный код (вычисление выражений, раскрытие макрокоманд, замена мнемоник собственно машинными кодами и символьных адресов на абсолютные или относительные адреса) производится ассемблером - программой-транслятором, которая и дала языку ассемблера его название.
Команды языка ассемблера один к одному соответствуют командам процессора. Фактически, они и представляют собой более удобную для человека символьную форму записи - мнемокоды - команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора [4].
Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на вычисляемые ассемблером или компоновщиком абсолютные или относительные адреса, а также так называемые директивы (команды ассемблера, не переводимые в машинные команды процессора, а выполняемые самим ассемблером).
Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макрокоманды с параметрами.
Каждая модель (или семейство) процессоров имеет свой набор - систему - команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы языков ассемблера - Intel-синтаксис и AT&T-синтаксис.
Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Форт, Лисп, Эль-76). Фактически, в таких компьютерах они выполняют роль языков ассемблера.