Project

General

Profile

Ошибки и их устранение (ASM) » History » Version 3

krufter_multiclet, 04/02/2013 03:28 PM

1 1 krufter_multiclet
h1. Ошибки и их устранение (ASM)
2 1 krufter_multiclet
3 1 krufter_multiclet
1) Ошибка перехода по индексному регистру
4 1 krufter_multiclet
5 1 krufter_multiclet
h3. Описание:
6 2 krufter_multiclet
7 1 krufter_multiclet
При переходе на следующий параграф по значению индексного регистра происходит неверный переход в
8 1 krufter_multiclet
случае, если параграф имеет адрес, который занимает более 1 байта.
9 1 krufter_multiclet
Ошибка появляется при переходе по любому индексному регистру (32-47) при помощи команд перехода,
10 1 krufter_multiclet
таких как "jmp", "jne", "je", "js", "jns" и т.п.
11 1 krufter_multiclet
Например ошибка может возникнуть в следующей конструкции(при условии адрес параграфа больше 1 байта):
12 1 krufter_multiclet
<pre>
13 1 krufter_multiclet
.text
14 1 krufter_multiclet
15 1 krufter_multiclet
pre:
16 1 krufter_multiclet
    setl #32, paragraph2
17 1 krufter_multiclet
    jmp paragraph
18 1 krufter_multiclet
complete
19 1 krufter_multiclet
20 3 krufter_multiclet
*paragraph:
21 1 krufter_multiclet
    jmp #32
22 3 krufter_multiclet
complete*
23 3 krufter_multiclet
24 3 krufter_multiclet
paragraph2:
25 3 krufter_multiclet
    getl 0xABCDEF12
26 1 krufter_multiclet
complete
27 3 krufter_multiclet
28 3 krufter_multiclet
</pre>
29 3 krufter_multiclet
30 3 krufter_multiclet
h3. Способ устранения ошибки:
31 3 krufter_multiclet
32 3 krufter_multiclet
Для того, чтобы осуществить переход по индексному регистру необходимо заменить конструкцию перехода,
33 3 krufter_multiclet
например "jmp #32" нужно заменить на строки "rdl #32" и "jmp @1":
34 3 krufter_multiclet
35 3 krufter_multiclet
<pre>
36 3 krufter_multiclet
.text
37 3 krufter_multiclet
38 3 krufter_multiclet
pre:
39 3 krufter_multiclet
    setl #32, paragraph2
40 3 krufter_multiclet
    jmp paragraph
41 3 krufter_multiclet
complete
42 3 krufter_multiclet
43 3 krufter_multiclet
*paragraph:
44 3 krufter_multiclet
    rdl #32
45 3 krufter_multiclet
    jmp @1
46 3 krufter_multiclet
complete*
47 1 krufter_multiclet
48 1 krufter_multiclet
paragraph2:
49 1 krufter_multiclet
    getl 0xABCDEF12
50 1 krufter_multiclet
complete
51 1 krufter_multiclet
52 1 krufter_multiclet
</pre>