Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Yokka
0 / 0 / 1
Регистрация: 24.05.2010
Сообщений: 29
#1

Что же в регистре еах??? - Assembler

12.09.2010, 18:20. Просмотров 522. Ответов 9
Метки нет (Все метки)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
xor si,si
    mov cx,long ;длина массива
    dec cx
    mov eax,mass[si]
    add si,4
  w2:   mov ebx,mass[si]
    add eax,ebx
    add si,4
    loop w2
    newline
    lea dx,mess3
    outstr
    call digit32  ;рабочая процедура вывода 32-ых чисел
В массив длинной 2 числа ввожу -20000 и -20000. В результате выдает не -40000. Напишите в чем проблема.
http://www.cyberforum.ru/assembler/thread702810.html
P.S. с положительными числами работает нормально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 18:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что же в регистре еах??? (Assembler):

Вывод числа, хранящегося в регистре
Доброго времени суток. Есть код программы, которая выводит число, хранящееся в...

Запись данных в регистре B в обратном порядке
Здравствуйте!:) Я здесь новенький, помогите, пожалуйста, решить задачу в...

Сдвиг регистра A на число разрядов, заданное в регистре B
Здравствуйте, уважаемые форумчане! В связи с отсутствием знаний в области...

Вызов функции которая находится в регистре EAX
Приветствую! Пытаюсь переписать некоторый код, с одного асма на другой) я в...

Сколько букв в слове в верхнем регистре в Assembler
Здравствуйте,помогите пожалуйста с программой. Программа должна высчитывать...

9
Orwomoi
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
12.09.2010, 20:29 #2
А функция вывода чисел понимает отрицательные числа? -40000 можно представить и как положительное.
0
Yokka
0 / 0 / 1
Регистрация: 24.05.2010
Сообщений: 29
13.09.2010, 00:07  [ТС] #3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
digit32 proc far
    push eax
    push ebx
    push ecx
    push edx
    mov ebx,eax
    or   ebx,ebx
    jns  m1
    mov ah,2
    mov  dl, '-'
    int  21h
    neg  ebx
  m1:
    mov  eax, ebx
    xor  ecx, ecx
    mov  ebx, 10
  m2:
    xor  edx, edx
    div  ebx
    add   dl, '0'
    push edx
    inc  ecx
    test eax,eax
    jnz  m2
  m3:
    pop eax
    int 29h
    loop m3
    pop edx
    pop ecx
    pop ebx
    pop eax
    ret
digit32 endp
вот эта процедура

Добавлено через 2 часа 50 минут
но вот когда я ввожу в mass[0] (5000), а в mass[1] (-5000) показывает 65535.

Добавлено через 18 минут
еще одна зацепка:
при вводе mass[0] (-50), а в mass[1] (-50) показывает 130972.
когда я вводил теже значения в td отладчике в строке 6 процедуры digit32 (mov ebx,eax
)отладчик сначала выдавал еррор, а потом просто начал зависать. Случаеться это когда юзать F7 при трансляции процедуры digit32.
0
Orwomoi
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
13.09.2010, 00:14 #4
На глаз, я не вижу ошибок. Но результаты твоих тестов снова наводят на мысли, что ошибка в коде вывода, хотя и тут я не вижу ошибок. Может кто-нибудь другой?

P.S. Был бы код под винду, я бы запустил и проверил в деббагере.
0
Yokka
0 / 0 / 1
Регистрация: 24.05.2010
Сообщений: 29
13.09.2010, 00:30  [ТС] #5
с выводом кажеться все нормально. А проблема находиться в строке №7 основного кода. При сложении чисел (-50) и (50) в еах, дебагер показал что записалось в него 00010000, а при (-50) и (-50) 0001FF9C. Почему
0
Orwomoi
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
13.09.2010, 00:53 #6
Ответы такие, как-будто сложение идет только в нижних словах (ax,bx). Это проблемы 16битного кода. То-есть проблемы давно устаревшего режима. Зачем там что-то писать? На дворе 2010 год, уже 8 лет как x64 в массах со всеми его плюшками... Что-то снова меня понесло.
0
Yokka
0 / 0 / 1
Регистрация: 24.05.2010
Сообщений: 29
13.09.2010, 01:12  [ТС] #7
я бы и не страдал этим маразмом если не надо было на tasm лабы писать. Так все же что надо сделать? Я пробывал протасмить tasm32 и отлинчить tlink32 но при втором выдало ошибку что: 16 bit segments not supported in module l41.ASM
0
Tronix
157 / 104 / 6
Регистрация: 22.08.2010
Сообщений: 215
13.09.2010, 10:28 #8
Давайте полный листинг сюда, не удобно мне по кускам собирать.
0
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
13.09.2010, 16:45 #9
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
.model tiny
.386
.data
    mass dd -20000,-20000
.code
    org 100h
start:
    xor si,si
    mov cx,2 ;длина массива
    dec cx
    mov eax,mass[si]
    add si,4
w2:
    mov ebx,mass[si]
    add eax,ebx
    add si,4
    loop w2
    
    call digit32  ;рабочая процедура вывода 32-ых чисел
    ret
digit32 proc far
    push eax
    push ebx
    push ecx
    push edx
    mov ebx,eax
    or   ebx,ebx
    jns  m1
    mov ah,2
    mov  dl, '-'
    int  21h
    neg  ebx
m1:
    mov  eax, ebx
    xor  ecx, ecx
    mov  ebx, 10
m2:
    xor  edx, edx
    div  ebx
    add   dl, '0'
    push edx
    inc  ecx
    test eax,eax
    jnz  m2
m3:
    pop eax
    int 29h
    loop m3
    pop edx
    pop ecx
    pop ebx
    pop eax
    ret
digit32 endp
end     start
Выдало, как ни странно, -40000
0
Yokka
0 / 0 / 1
Регистрация: 24.05.2010
Сообщений: 29
13.09.2010, 18:50  [ТС] #10
часть основного кода
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lea dx,mess5 ;mess5 db "Enter the elements of array:$"
    outstr
    newline
  w1:   call massiv
    cmp bx,long
    jne w1
    xor si,si
    mov cx,long
    dec cx
    mov eax,mass[si]
    add si,4
  w2:   mov ebx,mass[si]
    add eax,ebx
    add si,4
    loop w2
    newline
    lea dx,mess3
    outstr
    call digit32
,
процедуры:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
massiv proc
call position
numberin ax ;процедура ввода числа
mov mass[si],eax
newline
add si,4
inc bx
ret
massiv endp
 
position proc
push dx
mov ax,poss
outword ax ; процедура вывода беззнакового числа
inc ax
mov poss,ax
mov ah,2
mov dl,')'
int 21h
mov dl,' '
int 21h
pop dx
ret
position endp
 
digit32 proc 
    push eax
    push ebx
    push ecx
    push edx
    mov ebx,eax
    or   ebx,ebx
    jns  m1
    mov ah,2
    mov  dl, '-'
    int  21h
    neg  ebx
  m1:
    mov  eax, ebx
    xor  ecx, ecx
    mov  ebx, 10
  m2:
    xor  edx, edx
    div  ebx
    add   dl, '0'
    push edx
    inc  ecx
    test eax,eax
    jnz  m2
  m3:
    pop eax
    int 29h
    loop m3
    pop edx
    pop ecx
    pop ebx
    pop eax
    ret
digit32 endp
прикол в том что введенные -50 и -50 в суме дали 130972
0
13.09.2010, 18:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2010, 18:50
Привет! Вот еще темы с решениями:

какое значение будет находится в регистре AX после выполнения программы?
какое значение будет находится в регистре AX после выполнения программы: model...

Какое значение будет в регистре AX после выполнения заданного фрагмента программы
Если можно, распишите пошагово как считать, пожалуйста. Заранее спасибо! ...

Сдвинуть значение в регистре mm1, а затем переслать его в массив байт
Нужно сдвинуть значение в регистре mm1 например, а затем переслать его в массив...

Используя команду XLAT и прерывание 10Н, вывести все символы имени и фамилии в верхнем регистре
Помогите пожалуйста используя команду XLAT и прерывание 10Н вывести все символы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru