Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1525 | Дата выхода: | 22.06.2012, 15:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 91 / 35 | Вопросов / ответов: | 4 / 4 | Консультация # 186387: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что иниц... Консультация # 186388: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Н... Консультация # 186389: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных ниже Чи... Консультация # 186390: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. П... Консультация # 186387: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm Таблица 4:

Задание 4. Изучить особенности сложения и вычитания целых чисел в ПК (беззнаковых и со знаком). Разобраться, для чего служат флаги переноса (CF) и переполнен ия мантиссы (OF). Изучить команды сложения и вычитания, допустимые типы операндов, устанавливаемые флаги. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом из табл. 5. Подобрать числовые значения таким образом, чтобы команды устанавливали различные флаги условий (OF,CF,ZF,SF); в каждом варианте – по крайней мере 3 различных флага. В комментариях к командам указать получаемые значения флагов. В заданиях «массив байт» означает массив целых типа байт, а «массив слов» – массив целых типа слово.
Таблица 5: G – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX Дата отправки: 19.06.2012, 00:46 Вопрос задал: Flawless (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Flawless! 3)
Код : ; Описание данных и пересылки S SEGMENT STACK DW 64 DUP(?) S ENDS DAT SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A DW 3 dup (?) ; 3 слова неициированных данных B DD 67452389h ; в памяти будет в обратном порядке: FF FE FB FA C DB 3 DUP('asm') ; 9 байт = 3 раза 'asm' D DW 1,2,3,4 ; 4 слова DAT ENDS C SEGMENT ASSUME SS:S,CS:C,DS:DAT Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX,AX PUSH AX MOV AX,D ; D - непосредственный операнд, в сегментный регистр MOV DS,AX ; напрямую не пересылается!!! ;a) MOV DH, B+3 ;старший байт двойного слова лежит последним ;б) MOV CL, C+2 ;третий байт лежит по смещению +2 ;в) MOV AX, 0FA98h ;напрямую писать нельзя MOV ES, AX ;г) MOV WORD PTR С, DX ;слово в начало последовательности байт MOV В, AX ;в первое слово ; Возврат в DOS RET Start ENDP C ENDS END Start 4)
Код : ;Пусть G – массив из 4 слов. Вычислите сумму элементов массива и результат поместите в DX S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ M DW 7fffh,0ffffh,0003h,07fffh 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 AX,G ; AX = 7fffh ADD AX,G+2 ; AX = 7fffh+0ffffh = 7ffeh с переносом ; O=0, S=0, Z=0, C=1 ADD AX,G+4 ; AX = 7ffeh+0003h = 8001h ; O=1, S=1, Z=0, C=0 ADD AX,G+6 ; AX = 8001 + 7fffh = 0 ; O=0, S=0, Z=1, C=1 MOV DX,AX ; Возврат в DOS RET Start ENDP C ENDS END Start  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 19.06.2012, 01:08 5 нет комментария ----- Дата оценки: 19.06.2012, 01:46 | Рейтинг ответа: 0 | Консультация # 186388: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Найти (поместить в регистр BX) меньший из элементов массива из 10 беззнаковых целых типа слово. А так же. Оформить в виде процедур фрагмент программы из задания №5: 1. С передачей параметров через регистры. 2. Через стек. Дата отправки: 19.06.2012, 00:51 Вопрос задал: Flawless (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Flawless! 5)
Код : ;Найти (поместить в регистр BX) меньший из элементов массива ;из 10 беззнаковых целых типа слово S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A DW 1234,2345,3456,4567,5678,6789,8901,9012,10,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 ;его длина MOV BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP: MOV AX, [SI] ;очередное слово массива ADD SI, 2 ;адрес следующего слова CMP AX, BX JAE NEXT ;если выше (больше) или равно, то обходим MOV BX, AX ;сохраняем, как минимального NEXT: LOOP MIN_LOOP ;циклим по CX, пока не 0 RET ;результат в BX Start ENDP RET C ENDS END Start 6,7)
Код : ;Найти (поместить в регистр BX) меньший из элементов массива ;из 10 беззнаковых целых типа слово S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A DW 1234,2345,3456,4567,5678,6789,8901,9012,10,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 MIN1 ;поиск минимального ;передаем параметры через стек PUSH COUNT ;передаем количество PUSH OFFSET A ;смещение массива CALL MIN2 ; RET Start ENDP ;адрес массива в SI ;его длина в CX MIN1 PROC MOV BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP1: MOV AX, [SI] ;очередное слово массива ADD SI, 2 ;адрес следующего слова CMP AX, BX JAE NEXT1 ;если выше (больше) или равно, то обходим MOV BX, AX ;сохраняем, как минимального NEXT1: LOOP MIN_LOOP1 ;циклим по CX, пока не 0 RET ;результат в BX MIN1 ENDP ;параметры в стеке ;сначала передается дина массива ;затем адрес массива ;результат в регистре BX MIN2 PROC PUSH BP ;сохраним старое значение BP MOV BP, SP ;будем адресовать стековый кадр MOV SI, [BP+4] ;получим в стеке адрес массива MOV CX, [BP+6] ;количество MOV BX, 0FFFFH ;минимальное число, пока равно самому большому числу MIN_LOOP2: MOV AX, [SI] ;очередное слово массива ADD SI, 2 ;адрес следующего слова CMP AX, BX JAE NEXT2 ;если выше (больше) или равно, то обходим MOV BX, AX ;сохраняем, как минимального NEXT2: LOOP MIN_LOOP2 ;циклим по CX, пока не 0 POP BP ;восстановим старый BP RET 4 ;при возврате удалим из стека 4 байта (2 слова)! MIN2 ENDP C ENDS END Start  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 19.06.2012, 01:30 5 нет комментария ----- Дата оценки: 19.06.2012, 01:43 | Рейтинг ответа: 0 | Консультация # 186389: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 1. Записать в двоичном и шестнадцатеричном виде представление в памяти ПК следующих чисел (следует учитывать, что числа размером в слово хранятся в «перевернутом» виде), приведенных ниже
Числа для представления в памяти ПК:
Числа-байты: 17, -7, 221 Числа-слова 17, -7, 321
Задание 3. Написать директивы описания данных и команды пересылок согласно указанному варианту из табл. 4. Если в задании не указано, как инициализировать данные, то предполагается, что инициализировать не надо. Под большим числом понимается число, для представления которого одного слова недостаточно. Следует, что размер операндов в команде пересылки должен совпадать – при необходимости использовать оператором указания типа PTR. При написании программного кода можно воспользоваться файлом с примером программы data_mov.asm Та блица 4:
 Дата отправки: 19.06.2012, 01:07 Вопрос задал: Flawless (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Flawless! 1) Числа-байты: 17, -7, 221 Числа-слова 17, -7, 321
Числа-слова: 17 = 00010001b = 11h -7 = 11111001b = 0f9h 221 = 11011101b = 0ddh Обратите внимание, что число 221 можно рассматривать только, как беззнаковое число
Числа-слова: 17 = 00010001 00000000b = 1100h -7 = 11111001 11111111b = 0f9ffh 321 = 01000001 00000001b = 4101h Байты в двоичной записи, для наглядности, отделил пробелом
3)
Код : ; Описание данных и пересылки S SEGMENT STACK DW 64 DUP(?) S ENDS DAT SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ F DB 5 dup (?) ; 5 неициированных байт H DD 0ABCDEF01h ; в памяти будет в обратном порядке: 01 EF CD AB K DW 4 DUP(1234) ; 4 слова L DB 'QWRTP' ; 5 согласных DAT ENDS C SEGMENT ASSUME SS:S,CS:C,DS:DAT Start PROC FAR ; Выполнение соглашений DOS и настройка регистра DS PUSH DS SUB AX,AX PUSH AX MOV AX,D ; D - непосредственный операнд, в сегментный регистр MOV DS,AX ; напрямую не пересылается!!! ;a) MOV DI, H+2 ;старшее слово лежит последним MOV SI, H ;младшее - первым ;б) MOV AX, K+2 ;второе слово лежит по смещению +2 ;в) MOV AX, 234 ;г) MOV BYTE PTR H+3, CH ;байт CH на место старшего байта двойного слова MOV BYTE PTR K+7, CH ;а место старшего байта последнего слова ; Возврат в DOS RET Start ENDP C ENDS END Start Консультация # 186390: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере. Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование. Проверить, упорядочен ли по возрастанию массив из 12 целых со знаком типа байт. А так же. Оформить в виде процедур фрагмент программы из задания №5: 1. С передачей параметров через регистры. 2. Через стек. Дата отправки: 19.06.2012, 01:14 Вопрос задал: Flawless (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Flawless! 5)
Код : ;Проверить, упорядочен ли по возрастанию массив ;из 12 целых со знаком типа байт S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A DB -12,-10,-8,-7,-2,0,8,9,81,100,110,127 COUNT EQU $-A ; (текущий адрес($) - A) - длина массива в байтах 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 ;его длина MOV AH, -128 ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP: MOV AL, [SI] ;очередное слово массива INC SI ;адрес следующего слова CMP AL, AH ;сравним с предыдущим JLE NO_INC ;если меньше или равно, то массив не упорядочен по возрастанию MOV AH, AL ;сохраняем предыдущего LOOP CMP_INC_LOOP ;циклим по CX, пока не 0 MOV AL, 1 ;упорядочен RET ;результат в AL (=1 - упорядочен, =0 - неупорядочен) NO_INC: MOV AL, 0 ;неупорядочен RET Start ENDP C ENDS END Start 6,7)
Код : ;Проверить, упорядочен ли по возрастанию массив ;из 12 целых со знаком типа байт S SEGMENT STACK DW 64 DUP(?) S ENDS D SEGMENT ; сегмент данных ; ДИРЕКТИВЫ ОПИСАНИЯ ДАННЫХ A DB -12,-10,-8,-7,-2,0,8,9,81,100,110,127 COUNT EQU $-A ; (текущий адрес($) - A) - длина массива в байтах 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 CMP_INC1 ;проверка на возрастание ;передаем параметры через стек PUSH COUNT ;передаем количество PUSH OFFSET A ;смещение массива CALL CMP_INC2 ;проверка на возрастание RET Start ENDP ;адрес массива в SI ;его длина в CX ;результат в AL (=1 - упорядочен, =0 - неупорядочен) CMP_INC1 PROC MOV AH, -128 ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP1: MOV AL, [SI] ;очередное слово массива INC SI ;адрес следующего слова CMP AL, AH ;сравним с предыдущим JLE NO_INC1 ;если меньше или равно, то массив не упорядочен по возрастанию MOV AH, AL ;сохраняем предыдущего LOOP CMP_INC_LOOP1 ;циклим по CX, пока не 0 MOV AL, 1 ;упорядочен RET ;результат в AL (=1 - упорядочен, =0 - неупорядочен) NO_INC1: MOV AL, 0 ;неупорядочен RET CMP_INC1 ENDP ;параметры в стеке ;сначала передается дина массива ;затем адрес массива ;результат в регистре AL CMP_INC2 PROC PUSH BP ;сохраним старое значение BP MOV BP, SP ;будем адресовать стековый кадр MOV SI, [BP+4] ;получим в стеке адрес массива MOV CX, [BP+6] ;количество MOV AH, -128 ;предыдущий элемент, пока - самое маленькое число CMP_INC_LOOP2: MOV AL, [SI] ;очередное слово массива INC SI ;адрес следующего слова CMP AL, AH ;сравним с предыдущим JLE NO_INC2 ;если меньше или равно, то массив не упорядочен по возрастанию MOV AH, AL ;сохраняем предыдущего LOOP CMP_INC_LOOP2 ;циклим по CX, пока не 0 MOV AL, 1 ;упорядочен JMP CMP_INC_RET;на общий выход (чтобы поправить стек) NO_INC2: MOV AL, 0 ;неупорядочен CMP_INC_RET: ;результат в AL (=1 - упорядочен, =0 - неупорядочен) POP BP ;восстановим старый BP RET 4 ;при возврате удалим из стека 4 байта (2 слова)! CMP_INC2 ENDP C ENDS END Start
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий