Программирование на Ассемблере


         

В заданной строке маленькие латинские



Mov     esi, [f1]
Mov     edi, [f2]
Mov     ecx, [len]
Shr       ecx, 2
Jecxz    m1
cld
cmp     esi, edi
ja         short m2
je         break
mov     esi, eax
dec       esi
add      edi, [len]
dec       edi
std
m2:
rep       movsd
break:
cld
Пример 2. В заданной строке маленькие латинские буквы заменить большими.
Str1      db        ‘This is string’,0

cld
mov     esi, offset str1
mov     edi, offset str1
for1:
lodsb
test       al, al
je         short break
cmp     al, ‘a’
jb         notl
cmp     al, ‘z’
ja         notl
add      al, ‘A’ – ‘a’
notl:
stosb
jmp for1
break:
cld
Пример 3. Составить программу для сравнения двух длинных чисел одинаковой длины. Программа должна формировать результат >0, если первое число больше второго, равно 0, если числа равны и <0, если первое число меньше второго. Пусть число состоит из n 32-битных «цифр» и записывается, начиная с младших цифр.
X          dd        …, …., ….
Y          dd        …, …, …
N         dd        (Y – X)/4
Res      dd        ?

sub       eax, eax
mov     ecx, [N]
lea       esi , [X+ecx*4-4]
lea       edi , [Y+ecx*4-4]
std
repe     cmpsd
jecxz    m1
jb         letter
mov     eax, 1
jmp      short m1
letter: mov       eax, -1
m1:
cld
         
Пример 4.
В заданном массиве чисел все нулевые значения заменить –1
While (){
   If (есть нулевое значение)
      Заменить;
   Else
      Break;
}
mov     ecx, [n]
cld
sub       eax, eax
mov     edi, offset x
for1:
repne   scasd
jecxz    break
mov     [dword ptr edi-4], -1
jmp      for1

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий