Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10710
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4315
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2303
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1516
Дата выхода:03.06.2012, 13:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:92 / 38
Вопросов / ответов:2 / 2

Консультация # 186249: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий. Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для...


Консультация # 186250: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Windows, какую версию используют PC в университете не знаю. Всего 6 заданий. Это задание будет состоять из подпунктов. Потому цена будет выше. Задание 5. Написать фрагмент программы на а...

Консультация # 186249:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Windows, какую версию используют PC в университете не знаю. Всего 6 заданий.

Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнения мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги.
Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов.
В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.

Таблица 5:
А – массив из 4 байт. Выполнить сложение двух первых и двух последних. Найти разность полученных промежуточных сумм. Результат поместить в BL.

Дата отправки: 30.05.2012, 12:46
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
Меняются все 4 флага. Изучайте, будут вопросы - спрашивайте

Код :
;Краткая справка по необходимым флагам
;OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей 
;     арифметической операции над числами со знаком выходит за допустимые для них пределы. 
;     Например, если при сложении двух положительных чисел получается число со старшим битом, 
;     равным единице (то есть отрицательное) и наоборот.
;CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции 
;     не уместился в приемнике и произошел перенос из старшего бита или если 
;     требуется заем (при вычитании), иначе устанавливается в 0. 
;     Например, после сложения слова 0FFFFh и 1, если регистр, в который надо 
;     поместить результат, — слово, в него будет записано 0000h и флаг CF = 1. 
;ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль. 
;SF — флаг знака. Этот флаг всегда равен старшему биту результата. 

S SEGMENT STACK
  DW      64 DUP(?)
S ENDS

D	SEGMENT			; сегмент данных
				; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
A	DB	07fh,7fh,0ffh,0ffh

D 	ENDS

C       SEGMENT 
        ASSUME  SS:S,CS:C,DS:D

Start   PROC    FAR 
; Выполнение соглашений DOS и настройка регистра DS       
	PUSH	DS              
	SUB	AX,AX           
	PUSH	AX              
	MOV	AX,D		; D - непосредственный операнд, в сегментный регистр 
	MOV	DS,AX		; напрямую не пересылается!!!

	MOV	AL,A+2		; AL = 0ffh
	ADD	AL,A+3		; AL = 0ffh+0ffh = 0feh с переносом
				; O=0, S=1, Z=0, C=1

	MOV	BL,A		; BL = 7fh
	ADD	BL,A+1		; BL = 7fh + 7fh = 0feh
				; O=1, S=1, Z=0, C=0

	SUB	BL,AL		; BL = 0feh - 0feh = 0
				; O=, S=0, Z=1, C=0
; Возврат в DOS	        
	RET    
                 
Start	ENDP    
C	ENDS                    
	END	Start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 30.05.2012, 14:14

5
нет комментария
-----
Дата оценки: 30.05.2012, 14:47

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 186250:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Windows, какую версию используют PC в университете не знаю. Всего 6 заданий.
Это задание будет состоять из подпунктов. Потому цена будет выше.

Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
Проверить, упорядочен ли по возрастанию массив из 10 целых без знака типа слово.

А так же. Оформить в виде процедур фрагмент программы из задания №5:
1. С передачей параметров через регистры.
2. Через стек.

Дата отправки: 30.05.2012, 12:52
Вопрос задал: Flawless (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Flawless!
Смотрите, изучайте. Будет непонятно, спрашивайте...

Код :
S SEGMENT STACK
  DW      64 DUP(?)
S ENDS

D	SEGMENT			; сегмент данных
				; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ
A	DW	1234,2345,3456,4567,5678,6789,8901,9012,10234,15234
COUNT	EQU	($-A)/2		; (текущий адрес($) - A) - длина массива в байтах
				; поделив на 2 получим число слов в массиве

D 	ENDS

	.186
C       SEGMENT 
        ASSUME  SS:S,CS:C,DS:D

Start   PROC    FAR 
; Выполнение соглашений DOS и настройка регистра DS       
	PUSH	DS              
	SUB	AX,AX           
	PUSH	AX              
	MOV	AX,D		; D - непосредственный операнд, в сегментный регистр 
	MOV	DS,AX		; напрямую не пересылается!!!

;передаем параметры через регистры
	LEA	SI, A		;адрес массива в SI
	MOV	CX, COUNT	;его длина
	CALL	IsOrder1	;проверяем, результат в флаге С

;передаем параметры через стек
	PUSH	COUNT		;передаем количество
	PUSH	OFFSET A	;смещение массива
	CALL	IsOrder2	;проверяем, результат в флаге С

	RET
Start	ENDP    

;адрес массива в SI
;его длина
;результат в флаге С=1 - неупорядочен, С=0 - упорядочен по возрастанию
IsOrder1	PROC
	XOR	DX, DX		;предыдущее значение
LOOP1:
	MOV	AX, [SI]	;очередное слово массива
	ADD	SI, 2		;адрес следующего слова
	CMP	AX, DX		;сравниваем с предыдущим
	JB	NO_ORDER2	;если меньше, то неупорядочен!
	MOV	DX, AX		;сохраняем, как новый предыдущий
	LOOP	LOOP1		;циклим по CX, пока не 0
	CLC			;возвращаем признак упорядоченности
	RET
NO_ORDER1:
	STC			;неупорядочен!
	RET
IsOrder1	ENDP

;параметры в стеке
;сначала передается дина массива
;затем адрес массива
;результат в флаге С=1 - неупорядочен, С=0 - упорядочен по возрастанию
IsOrder2	PROC
	PUSH	BP		;сохраним старое значение BP
	MOV	BP, SP		;будем адресовать стековый кадр
	MOV	SI, [BP+4]	;получим в стеке адрес массива 
	MOV	CX, [BP+6]	;количество
	XOR	DX, DX		;дальше аналогично
LOOP2:
	MOV	AX, [SI]
	CMP	AX, DX
	JB	NO_ORDER2
	MOV	DX, AX
	LOOP	LOOP2
	CLC	
	JMP	IsOrder2_ret
NO_ORDER2:
	STC
IsOrder2_ret:
	POP	BP		;восстановим старый BP
	RET	4		;при возврате удалим из стека 4 байта (2 слова)!
IsOrder2	ENDP

C	ENDS                    
	END	Start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 30.05.2012, 14:42

5
нет комментария
-----
Дата оценки: 30.05.2012, 18:22

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное