Сейчас на форуме: (+7 невидимых)

 eXeL@B —› Вопросы новичков —› регистр не меняет значение, так должно быть ?
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 июля 2014 00:01 · Поправил: andrush
· Личное сообщение · #1

из учебника кипа ирвайна, надо определить значения регистров.
Code:
  1. .data
  2. myDoubles DWORD 1,2,3,4,5 
  3. myPointer DWORD myDoubles  ; ук-ль
  4.  
  5. .code
  6. main PROC
  7.     xor eax,eax ; понулям
  8.     
  9.     
  10.     mov esi, myPointer
  11.     mov ax, word ptr [esi+2]        ; AX = ??
  12.     call dumpregs                   ; отобразить содержимое регистров ; показывает EAX = 00000000
  13.     call waitmsg                    ; ждём нажатия клавиши
  14.  
  15.     mov ax, word ptr [esi+6]        ; AX = ??
  16.     call dumpregs                   ; отобразить содержимое регистров показывает EAX = 00000000
  17.     call waitmsg                    ; ждём нажатия клавиши
  18.  
  19.     mov ax, word ptr [esi-4]        ; AX = ??
  20.     call dumpregs                   ; отобразить содержимое регистров показывает EAX = 00000044
  21.     call waitmsg                    ; ждём нажатия клавиши
  22.  
  23.     invoke exitprocess, 0           ; ушли
  24. main endp
  25. end main 
  26.  
  27.  


Вопрос почему AX пустой, только на mov ax, word ptr [esi-4] поменялся ?




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 31 июля 2014 00:17
· Личное сообщение · #2

а что находится по адресу esi+2, esi+6, esi -4?

-----
Give me a HANDLE and I will move the Earth.




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 31 июля 2014 00:20 · Поправил: Vovan666
· Личное сообщение · #3

andrush пишет:
mov ax, word ptr [esi+6] ; AX = ??

DWORD = 4

должно быть либо
myDoubles WORD 1,2,3,4,5
либо
movzx eax, word ptr [esi+0*4]
movzx eax, word ptr [esi+1*4]
...
movzx eax, word ptr [esi+5*4]



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 июля 2014 00:29 · Поправил: andrush
· Личное сообщение · #4

plutos пишет:
а что находится по адресу esi+2, esi+6, esi -4?


наверное 2 , 4 , 2 ..хз , токо учусь

Добавлено спустя 13 минут
Vovan666 пишет:
должно быть либо
myDoubles WORD 1,2,3,4,5
либо
movzx eax, word ptr [esi+0*4]
movzx eax, word ptr [esi+1*4]
...
movzx eax, word ptr [esi+5*4]

видимо, в учебнике так написано чтоб не запутать, ибо ещё не дошли до детального movzx\movsx



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 31 июля 2014 00:47
· Личное сообщение · #5

тогда при myDoubles DWORD 1,2,3,4,5

mov ax, word ptr [esi+0]
mov ax, word ptr [esi+4]
mov ax, word ptr [esi+8]
итд



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 июля 2014 00:53 · Поправил: andrush
· Личное сообщение · #6

Vovan666 пишет:
тогда при myDoubles DWORD 1,2,3,4,5

mov ax, word ptr [esi+0]
mov ax, word ptr [esi+4]
mov ax, word ptr [esi+8]
итд


задача так поставлена . цитирую :
Задача повышенной сложности. Определите значения регистров после выполнения
каждой из приведенных ниже команд:

mov esi,myPointer
mov ax,WORD PTR [esi+2]
mov ax,WORD PTR [esi+6]
mov ax,WORD PTR [esi-4]

..
язык ассемблера для процессоров intel ирвин к.р.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 31 июля 2014 01:11
· Личное сообщение · #7

Что за дебил такую задачу составлял, переводил, или переписывал?
Вот оригинал с решением

http://site.iugaza.edu.ps/ayash/files/Assembly_Quiz3_Sol.pdf

при том построении как у тс
mov esi,myPointer
mov ax,WORD PTR [esi+2] =0
mov ax,WORD PTR [esi+6] =0
mov ax,WORD PTR [esi-4] = все что угодно, возможен даже вылет.

| Сообщение посчитали полезным: andrush

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 июля 2014 01:24
· Личное сообщение · #8

Vovan666 пишет:
Что за дебил такую задачу составлял, переводил, или переписывал?
Вот оригинал с решением

http://site.iugaza.edu.ps/ayash/files/Assembly_Quiz3_Sol.pdf

при том построении как у тс
mov esi,myPointer
mov ax,WORD PTR [esi+2] =0
mov ax,WORD PTR [esi+6] =0
mov ax,WORD PTR [esi-4] = все что угодно, возможен даже вылет.

вот это
mov esi,OFFSET myBytes
mov ax,[esi]
mov eax,DWORD PTR myWords
я убрал,там вопросов не возникло, а остальное тоже самое...
ответы на http://site.iugaza.edu.ps/ayash/files/Assembly_Quiz3_Sol.pdf совпадают,ничего не вылетает.
пошёл заново читать,разбираться почему нули. )
Спасибо

Добавлено спустя 31 минуту
а ннет, вру..без myWords WORD 8Ah,3Bh,72h,44h,66h не то показывает, удалил чтоб здесь лишнего кода не вылаживать, а он оказывается нифига не лишний.впредь буду вылаживать как есть.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 31 июля 2014 06:39 · Поправил: dosprog
· Личное сообщение · #9

Смысл задачки в старпосте в том, что word ptr [esi+2 +2*x] при x=0,1,2,3,4
- это старшие слова от двойных слов 1, 2, 3, 4, 5.
Эти сташие слова во всех пяти случаях и будут равны 0.

А вот обращение [esi-4] это в данном контексте безусловная ошибка.
Так делать нельзя. Хотя скорей всего там тоже окажется 0 - выравнивание хвоста предыдущего сегмента.





Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 31 июля 2014 10:22
· Личное сообщение · #10

Глянь http://site.iugaza.edu.ps/ayash/files/Assembly_Quiz3_Sol.pdf и поймешь что листинг не полный.
Там перед двордами еще ворды идут и [esi-4] обращается к предпоследнему ворду.

Добавлено спустя 5 минут
andrush пишет:
пошёл заново читать,разбираться почему нули. )

Чтобы лучше разобраться попробуй myDoubles DWORD 12345678h,23456789h,34567890h,45678901h,56789012h




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 31 июля 2014 11:24 · Поправил: Rainbow
· Личное сообщение · #11

А не проще так ?

mov esi, offset myDoubles
mov edi, sizeof myDoubles/sizeof dword

.repeat

lodsd
shr eax, 16
call dumpregs
call waitmsg

dec edi
.until zero?



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 31 июля 2014 16:29 · Поправил: dosprog
· Личное сообщение · #12

)) Rainbow, тогда уж так:

mov esi, myPointer
mov ecx, (myPointer-myDoubles)/4
lp:
cld
lodsd
shr eax, 10h
call dumpregs
call waitmsg
loop lp

Code:
  1. .386
  2. model tiny
  3. SEGMENT CODE USE16
  4. ASSUME CS:CODE, DS:CODE
  5. org 100h
  6. start:
  7. mov si, myPointer
  8. mov cx, (myPointer-myDoubles)/4
  9. lp:
  10. cld
  11. lodsd
  12. shr eax, 10h
  13. call dumpregs
  14. call waitmsg
  15. loop lp 
  16. dumpregs:
  17. waitmsg:
  18. ret
  19. myDoubles dd 1,2,3,4,5
  20. myPointer dw myDoubles
  21. end start
  22. ENDS





Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 31 июля 2014 16:36
· Личное сообщение · #13

dosprog пишет:
)) Rainbow, тогда уж так:


Да не принципиально. Модификаций может быть бесконечное множество



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 31 июля 2014 16:40 · Поправил: dosprog
· Личное сообщение · #14

Да уж.
Но мне бы не хотелось сейчас оказаться в положении изучающего программирование с нуля.
Сильное ощущение, что пудрят мозг и засоряют лишними на начальном этапе непонятными вещами.

Например, этого вопроса у ТС не возникло бы в принципе,
если бы он прогонял программу в отладчике.
Для DOS-программ есть простой стандартный DEBUG.EXE.
Для WIN32 - даже не знаю, что предложить.



Ранг: 10.9 (новичок), 5thx
Активность: 0.060
Статус: Участник

Создано: 31 июля 2014 16:46 · Поправил: ThugboyZ
· Личное сообщение · #15

dosprog пишет:
Для WIN32 - даже не знаю, что предложить.

Тонко
W32DASM, Ольга и ида жа.Или у Вас самопальный ?



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 31 июля 2014 16:53 · Поправил: dosprog
· Личное сообщение · #16

ThugboyZ пишет:
dosprog пишет:
Для WIN32 - даже не знаю, что предложить.
------

Тонко
W32DASM, Ольга и ида жа.Или у Вас самопальный ?

Я понял иронию.
Просто сейчас пытаюсь оглядываться далеко назад и вспоминать свои собственные ощущения.
В этом случае я имел в виду простой отладчик, у которого в диалоговом режиме можно просто спросить, например:
R EAX
D ESI
D


Хотя, ..ну, не знаю.
Всё течёт, всё меняется.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 31 июля 2014 20:52
· Личное сообщение · #17

dosprog пишет:
В этом случае я имел в виду простой отладчик

TD/SoftIce 2.80/... еще амигу или zx вспомните с задачами а-ля дос16. асм для 8-биток 70-х давайте разберем

-----
От многой мудрости много скорби, и умножающий знание умножает печаль



 eXeL@B —› Вопросы новичков —› регистр не меняет значение, так должно быть ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати