Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Ассемблер - это сложно?


Автор: Чердак 27.2.2005, 19:27
Кому ассемблер, в первый день знакомства с ним, показался мудренным?... Помогите, как с ним справиться? Есть ли что по ассемблеру из серии для ЧАЙНИКОВ?... Даже не наю с чего начать, купил умную книжку, которая для меня оказалась весьма мудренной и не совсем понятной. Подскажите как был освоен вами язык, и сколько времени потребуется, чтобы хоть немножко в нем шарить? Если честно я в полном отчаяние... smile

Автор: sergejzr 27.2.2005, 20:46
Для начала неплохо пробежаться по закреплённым темам smile
http://forum.vingrad.ru/index.php?showtopic=34

Автор: oleg1973 28.2.2005, 00:47
и вовсе не сложно smile
уж если чел понял чем отличается в С myvar от &myvar и от *myvar smile
то в асме в 100 раз все проще smile

Автор: cardinal 28.2.2005, 01:59
Могу посоветовать
http://books.dore.ru/bs/f1bid298.html
для начала это самое то что надо...

Автор: Гость_Lenin2917 20.3.2005, 20:25
Чердак - Его не надо УЧИТЬ!!! его надо изучать и самое главное, на мой взгляд, это разобраться в адрессации и смещениях и все будет ОК! А начинать лучше наверное с Зубкова или Пирогова.

Автор: Чердак 20.3.2005, 21:04
Спасибо всем за советы smile
Был на wasm, кое-чего там прочел, полезные вещи глаголят). Прочел лекции Калашникова (из рассылок), но там маловато теории по работе с числами. Сейчас штудирую учебник по асму В.И. Юрова, хочу отметить, что довольно-таки содержательная книженция. С помощью нее написал следующую прогу:
Дано число в двоичном виде. Разделить его на две составляющие: в первую войдут только четные разряды, во-вторую нечетные. Их логически перемножить и результат умножить на 16.

Прога работает отлично, тока вот ничего не выводит, так как у меня пока с этим проблем (т.е. пока с экранном не работаю, так как не умею, сейчас над этим работаю).

Написал прогу, в которой работаю с матрицами, тока вот вывести полученную (преобразованную) матрицу не получается smile


Автор: Chingachguk 20.3.2005, 21:17
Чердак

С помощью этой процедуры можно переключить экран в текстовый режим 25x80:

{$F+}
Procedure Initgraph; {Инициализация работы с текстовым режимом 25*80}
Begin
Asm
pusha
mov ah,02h
xor dx,dx
mov bh,03h
int 10h
mov ax,1003H
xor bx,bx
int 10H
popa
End;
End;

После этого ты можешь выводить на экран текстовые строки вот этой процедурой:

{$F+}
Procedure Outt(Color,X,Y:byte; AddrText:pointer); {Отобразить строку на экран}
Begin
Asm
pusha
push ds
push es
push 0B800h
pop es
cld
lds si,AddrText
mov al,160
mov ah,byte ptr Y
dec ah
mul ah
mov di,word ptr X
dec di
and di,127
shl di,1
add di,ax
lodsb
xor ch,ch
mov cl,al
test al,al
jz @ZIRO
mov ah,Color
@FILL_STR:
lodsb
stosw
loop @FILL_STR
@ZIRO:
pop es
pop ds
popa
End;
End;

Автор: Чердак 20.3.2005, 21:54
Chingachguk

Спасибо, тока это придется проги на паскале писать с вставками на асме. А мне нужна прога чисто на асме smile

smile
Можно как-нить выводить данные не в символьном виде, а через переменные. Или к переменным нужно прибавлять 30 и выводить их как код символа?

Автор: Chingachguk 20.3.2005, 23:27
Чердак

Нет, я просто дал их для примера. Собственно, логика вывода внутри них.
Компиллировать с директивами .286.

Код

; Инициализация работы с текстовым режимом 25*80
Initgraph proc near
 pusha
 mov ah,02h
 xor dx,dx
 mov bh,03h
 int 10h
 mov ax,1003H
 xor bx,bx
 int 10H
 popa
 retn
Initgraph endp


; Отобразить строку на экран
; Параметры в стеке
;
; push Color
; push X
; push Y
; push AddrText
Outt proc near
  Color equ [bp+0Ah]
  X     equ [bp+08h]
  Y     equ [bp+06h]
  AddrText equ [bp+04h]
  push bp
  mov  bp,sp
  pusha
  push ds
  push es
  push 0B800h
  pop es
  cld
  mov  si,AddrText
  mov  al,160
  mov  ah,byte ptr Y
  dec  ah
  mul  ah
  mov  di,word ptr X
  dec  di
  and  di,127
  shl  di,1
  add  di,ax
  lodsb
  xor  ch,ch
  mov  cl,al
  test al,al
  jz   @ZIRO
  mov  ah,Color

@FILL_STR:

  lodsb
  stosw
  loop @FILL_STR

@ZIRO:

  pop  es
  pop  ds
  popa
  pop  bp
  retn 4*2 
Outt endp

; Образец использования:

.286
text segment byte public
  assume cs:text,ds:text
  org   100h
begin:

  call Initgraph

  push 14*16+1
  push 10
  push 20
  push offset PasTxtString
  call Outt

  push 1*16+14
  push 20
  push 10
  push offset PasTxtString
  call Outt

; readkey
  xor  ax,ax
  int  16h
  retn

PasTxtString:

  db  10 ; Length
  db  'Test text!'
...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)