Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 00:22   #1
tyze
 
Регистрация: 22.06.2010
Сообщений: 6
Вопрос Ещё одна Головоломка к ГОС Экзамену(((

Мне дали 3 задачи по ассемблеру на скоко я понял. А в Ассемблере я дуб дубом, но чтото понять я всётаки могу))). Обьясните мне решение вот такой задачи:
Запишите дамп оперативной памяти (ОП) первых восьми слов сегмента данных (myd segment) после выполнения приведенной в задании программы. В программе первым восьми полям памяти присвоены символические имена а b c d e f g h соответственно. Ответ оформите в виде таблицы:
+-------+-------+-------+-------+-------+-------+-------+----+
| 00 01 | 02 03 | 04 05 | 06 07 | 08 09 | 0A 0B | 0C 0D | 0E 0F |
| a | b | c | d | e | f | g | h |
| хх хх | хх хх | хх хх | хх хх | хх хх | хх хх | хх хх | хх хх |
+-------+-------+-------+-------+-------+-------+-------+----+
В таблице вместо хх следует указать содержимое соответствующего поля оперативной памяти после выполнения программы в форме дампа ОП. Формат таблицы:
Первая строка таблицы содержит адрес соответствующего байта ОП. Вторая строка таблицы содержит символическое обозначение соответствующего поля ОП. Третью строчку таблицы должен содержать значение соответствующего поля ОП после выполнения программы приведенной в задании.
code SEGMENT 'CODE' PUBLIC
assume cs:code, ds:myd
main proc FAR
push ds
mov ax,0
push ax
;------------------------
mov ax,myd
mov ds,ax
;------------------------
mov cx,c
mov ax,a
mov bx,b
inc cx
m: add ax,bx
inc bx
loop m
mov c,ax
mov d,bx
add cx,bx
mov e,cx
;------------------------
RET
main endp
code ends
myd segment
a dw 2
b dw 3
c dw 2
d dw ?
e dw ?
f dw 257
g dw 129
h dw 63
myd ends
end main

Последний раз редактировалось tyze; 23.06.2010 в 00:25.
tyze вне форума Ответить с цитированием
Старый 23.06.2010, 04:14   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Код:
mov cx,c ;cx=2
mov ax,a ; ax=2
mov bx,b ; bx=3
inc cx ;cx=2+1=3 цикл будет запущен 3 раза
m: add ax,bx; ax=2+3=5(1-ый раз) ax=5+4=9(2-ой раз) ax=9+5=14(3-ий раз)
inc bx; bx=3+1=4(1-ый раз) bx=4+1=5(2-ой раз) bx=5+1=6(3-ий раз)
loop m; cx=3-1=2(1-ый раз) cx=2-1=1(2-ой раз) cx=1-1=0(3-ий раз) выход из цикла
mov c,ax ; c=14 десятичное или 0E шестнадцатеричное
mov d,bx; d=6
add cx,bx; cx=0+6=6
mov e,cx ;e=6
;f=257 десятичное или 101 шестнадцатеричное
;g=129 десятичное или 81 шестнадцатеричное
;h=63 десятичное или 3F шестнадцатеричное
;-----дамп будет следующим
;00 01 | 02 03 | 04 05 | 06 07 | 08 09 | 0A 0B | 0C 0D | 0E 0F
;       a |       b  |         с |        d |        e |        f  |        g |       h
;02 00 | 03 00 | 0E 00 | 06 00 | 06 00 | 01 01 | 81 00 | 3F 00
Но такую задачу лучше решать не с карандашом и бумагой, а написать программу и посмотреть под отладчиком как меняются переменные a, b, ..., h кстати в реальной программе на ассемблере переменной с именем С не может быть, так как это зарезервированное служебное слово

Последний раз редактировалось Mikl___; 23.06.2010 в 06:20.
Mikl___ вне форума Ответить с цитированием
Старый 23.06.2010, 07:18   #3
tyze
 
Регистрация: 22.06.2010
Сообщений: 6
По умолчанию

Ааа теперь понятно. Тут требуется вычислить значение двух переменных (в данном случае это d и e) и записать эти значения в таблицу в шеснадцатиричном коде.
Спасибо Майкл большое, теперь мне ясно!
tyze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ещё одна проблема с программой на Си osichev Помощь студентам 1 07.06.2009 21:40
и ещё одна задачка...9 слонов MiH@N Помощь студентам 4 24.06.2008 00:03
Вот ещё одна,самая сложная: felice Паскаль, Turbo Pascal, PascalABC.NET 4 03.02.2008 17:21