Ошибки и их устранение (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> |