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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2012, 17:40   #11
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Печаль

Length я разобрал как cделать, вот так вышло:

Код:
r db 80 dup(?)
..........
Mov Dx, Length r
подскажите остальные как сделать пожалуйста
.:DEZ:. вне форума Ответить с цитированием
Старый 16.09.2012, 09:52   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
a,g,q:integer;
r,k: string;
.............
readln(a);
Str(a,r);
g:= Length(r);
k:=Copy(r,g,1);
q:= StrToInt(k);
во-первых, если я правильно понял назначение этого куска кода на Паскале, то Вам нужно получить последнюю цифру числа a
это делается ГОРАЗДО проще.
Вот так, например:
Код:
readln(a);
q:= a mod 10;
и всё.

во-вторых, поймите одну простую вещь. в 99% случаев алгоритм кода решения на Паскале и алгоритм кода реализации на Ассемблере для одной и той же задачи будут отличаться. Связано это с тем, что ассемблер - язык НИЗКОГО уровня, а Паскаль - ВЫСОКОГО.
Поэтому вопрос - ЧТО именно Вы хотите сделать на Ассемблере? Какую задачу (изначально) Вы решаете?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.09.2012, 15:30   #13
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Вопрос

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, если я правильно понял назначение этого куска кода на Паскале, то Вам нужно получить последнюю цифру числа a
это делается ГОРАЗДО проще.
Вот так, например:
Код:
readln(a);
q:= a mod 10;
и всё.

во-вторых, поймите одну простую вещь. в 99% случаев алгоритм кода решения на Паскале и алгоритм кода реализации на Ассемблере для одной и той же задачи будут отличаться. Связано это с тем, что ассемблер - язык НИЗКОГО уровня, а Паскаль - ВЫСОКОГО.
Поэтому вопрос - ЧТО именно Вы хотите сделать на Ассемблере? Какую задачу (изначально) Вы решаете?
спасибо) помогли) нужно вывести первую и последнюю цифру числа 2 в степени а)
Код:
помогите найти ошибку:
.model small
.data
msg1    db 'Enter the degree of:$'
msg2    db 'Pervaia:$'
msg3    db 'Vtoraia:$'
q dw ?
w dw ?
a dw ?
b dw ?
p dw ?


.code
msg macro m	;Макрос вывода строки на экран.
    mov ah,9
    lea dx,m
    int 21h
   endm 
start:
    mov ax,@data	;Настройка сегментных регистров
    mov ds,ax		;на данные прогрммы.

msg msg1 
	mov	ah, 10 ;считываем символ
	int	21h

	sub	al, 30h ;преобразуем строку в число 

; Где то тут косяк=( я его не вижу...					
     mov ax,[a]
     mov bx,10
     idiv bx ; делим со знаком
     mov [q],bx  ; в bx остаток от деления
cmp [q],0
  je n0 
cmp [q],1
  je n1
cmp [q],2
  je n2 
cmp [q],3
  je n3 
cmp [q],4
  je n4 
cmp [q],5
  je n5 
cmp [q],6
  je n6
cmp [q],7
  je n7 
cmp [q],8
  je n8 
cmp [q],9
  je n9  
n0:  mov [w],1
     jmp next
n1:  mov [w],2
     jmp next
n2:  mov [w],4
     jmp next
n3:  mov [w],8
     jmp next
n4:  mov [w],1
     jmp next
n5:  mov [w],3
     jmp next
n6:  mov [w],6
     jmp next
n7:  mov [w],1
     jmp next
n8:  mov [w],2
     jmp next
n9:  mov [w],5
     jmp next

next:
     xor ax,ax
     xor bx,bx
     mov ax,[a]
     mov bx,4
     idiv bx   ; делим со знаком
     mov [b],bx  ; в bx остаток от деления
     cmp [b],1   ; сравниваем
     je m1     ; переходим, если равно
     cmp [b],2
     je m2
     cmp [b],3
     je m3
     cmp [b],0
     je m4
     jmp vv  ;  
m1: mov p,2
      jmp vv
m2: mov p,4
      jmp vv
m3: mov p,8
      jmp vv
m4: mov p,6
vv:

msg msg2 
xor ax,ax
mov ax,[w]
mov  ah,02h        ; выводим цифру
mov  dl,al
int  21h

msg msg3 
xor ax,ax
mov ax,[p]
mov  ah,02h        ; выводим цифру
mov  dl,al
int  21h


   mov ax,4c00h
   int 21h
end start
.:DEZ:. вне форума Ответить с цитированием
Старый 17.09.2012, 13:15   #14
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Печаль

помогите, пожалуйста
.:DEZ:. вне форума Ответить с цитированием
Старый 17.09.2012, 15:05   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
нужно вывести первую и последнюю цифру числа 2 в степени а)
хм...
два вопроса.
1-й. что есть число a (целое, натуральное, какие возможные диапазоны?) если, допустим, надо посчитать 2^144.757 или 2^97, то, боюсь, что даже на Паскале будут определённые трудности. подозреваю, что а может быть от нуля до 8(16)... это так?

2-й. для вывод цифр предполагается двоичное или десятичное представление числа? например, для 2^7 что должна вывести программа?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2012, 15:23   #16
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

все указывает на то, что а - целое, которое делением мапится на 0-9. ответ ожидается в десятичном виде.
ошибка, скорее всего связана с тем, что остаток от деления лежит не в bx, а в dx, ну и рекомендую зачищать dx перед делением.
f.hump вне форума Ответить с цитированием
Старый 17.09.2012, 15:41   #17
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
хм...
два вопроса.
1-й. что есть число a (целое, натуральное, какие возможные диапазоны?) если, допустим, надо посчитать 2^144.757 или 2^97, то, боюсь, что даже на Паскале будут определённые трудности. подозреваю, что а может быть от нуля до 8(16)... это так?

2-й. для вывод цифр предполагается двоичное или десятичное представление числа? например, для 2^7 что должна вывести программа?
1) число a целое и положительное, может быть от 0 до 10)

2) десятичное, 2^7=128, программа должна написать: первое(1), последнее(8).
.:DEZ:. вне форума Ответить с цитированием
Старый 17.09.2012, 15:45   #18
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Вопрос

Цитата:
Сообщение от f.hump Посмотреть сообщение
все указывает на то, что а - целое, которое делением мапится на 0-9. ответ ожидается в десятичном виде.
ошибка, скорее всего связана с тем, что остаток от деления лежит не в bx, а в dx, ну и рекомендую зачищать dx перед делением.
программа компилируется но когда доходит до этого куска:

Код:
mov	ah, 10 ;считываем символ
	int	21h

	sub	al, 30h ;преобразуем строку в число 

; <<<<<<тут зависает, не понимаю как связать этот кусок проги.
					
     mov ax,[a]
     mov bx,10
     idiv bx ; делим со знаком
     mov [q],bx  ; в bx остаток от деления
как тут связать это или как-то по другому сделать можно?)
.:DEZ:. вне форума Ответить с цитированием
Старый 17.09.2012, 16:06   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, у вас же написано непонятно что..
в ассемблере сначала указывается приёмник (куда пишем), потом - источник данных.
mov ax,[a]
что Вы берёте из [a], если там ничего нет?!

потом, если у Вас число a - до 10, то зачем Вы ему выделяете двойное слово? (dw)

процедуру преобразования строки в число я бы на вашем месте взял тут - http://www.programmersforum.ru/showp...57&postcount=9

хотя, конечно, у вас из двухзначных чисел может быть только 10 - можно эту строчку и отдельно отследить. я бы воспользовался универсальной процедурой. Это и удобнее и надёжнее.

дальше. не надо строить таблицу значений первых и последних цифр.
Ведь чтобы возвести двойку в степень a достаточно взять единичку и сдвинуть её влево ровно a раз (исключение - нулевая степень - её можно отследить отдельно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2012, 16:49   #20
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

2Serge_Bliznykov
с каких пор нулевая степень для двойки, исключение при сдвиге?
Код:
MOV eax, 1

XOR ecx, ecx
SHL eax, cl

ADD ecx, 1
SHL eax, cl
...
что лежит в eax?)
f.hump вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню(асм) A.S.W Фриланс 1 21.08.2011 20:49
асм (с%о) Ислам Помощь студентам 7 21.05.2011 09:11
Линк c++ и асм Farrel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 12.05.2011 16:19
из C++ в асм) как вытащить нужный фрагмент? askerpro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.12.2010 04:41