Перенести все элементы равные K в конец - Assembler
Формулировка задачи:
Перенести все элементы равные K в конец,в остальном-порядок расположения элементов меняться не должен
Написал код на СИ, но не могу написать на ассемблере
Нужно по коду Си написать на ассемблере
#include<stdio.h> #include<locale.h> #include<stdlib.h> int main(void) { int mas[20]; int k; int size=5; printf("Input K"); scanf("%d",&k); for ( int i=0; i < size; i++) mas[i] = rand()%10;//Заполняем случайными числами for ( int i=0; i<size; i++) printf("%i ",mas[i]);//Выводим массив printf("\n"); for(int i=0; i<size; i++) { if (mas[i]==k) { for (int j = i; j < size; j++) //запускаем цикл, чтобы передвинуть каждый элемент на одну позицию { mas[j] = mas[j + 1]; } mas[size - 1] = k; // в последний пишем k } } for( int i=0; i < 5; i++) printf("%i ", mas[i]);//Выводим массив на экран printf("\n"); }
Решение задачи: «Перенести все элементы равные K в конец»
textual
Листинг программы
model tiny .code .386; szMass equ 10 org 100h begin: mov ah,9 lea dx,dbMass int 21h xor ax,ax mov es,ax mov eax,es:[46Ch] mov ebx,10 xor si,si mov cx,szMass @@01: xor edx,edx div ebx mov dwMass[si],dx add si,2 loop @@01 mov cx,szMass xor si,si @@02: mov ax,dwMass[si] or al,'0' int 29h mov al,' ' int 29h add si,2 loop @@02 mov ah,9 lea dx,dbEnter int 21h @@03: xor ax,ax int 16h cmp al,'0' jb @@03 cmp al,'9' ja @@03 int 29h and ax,0fh mov cx,szMass-1 xor si,si @@04: cmp ax,dwMass[si] jnz @@06 push cx push si ; dec cx @@05: mov bx,dwMass[si+2] mov dwMass[si],bx add si,2 loop @@05 mov dwMass[si],ax pop si pop cx sub si,2 @@06: add si,2 loop @@04 mov ah,9 lea dx,dbMass int 21h mov cx,szMass xor si,si @@07: mov ax,dwMass[si] or al,'0' int 29h mov al,' ' int 29h add si,2 loop @@07 xor ax,ax int 16h ret dbEnter db 10,13,'Enter K:$' dbMass db 10,13,'Massiv:$' dwMass dw szMass dup(?) end begin