powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / по ассемблеру
21 сообщений из 21, страница 1 из 1
по ассемблеру
    #38507123
doink111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, Уважаемые!
Вот условие задачи: Написать программу на языке Ассемблера, которая позволяет ввести с клавиатуры массив из 6 целых чисел, поменять местами максимальный и минимальный элементы массива и вывести на экран полученный в результате массив.
Вот мой примерный код к программе:
.model small
.stack 100h
.data
massiv dw 6 dup(?)
msg1 db 0ah,0dh,"Vvodite chisla ",0ah,0dh,"$"
msg2 db 0ah,0dh,"max = $"
msg3 db 0ah,0dh,"min = $"
c10 dw 10
.code
start:
mov ax,@data
mov ds,ax
mov ah,09h ; вывод приглашения для ввода чисел
lea dx,msg1
int 21h
mov di,0 ; в di - max
mov si,32767 ; в si - min
xor dx,dx ; в dx - очередное число
input_loop:
mov ah,01h ; ввод символа
int 21h
cmp al,0dh ; если enter
je chislo ; то занести число в массив
cmp al,20h ; если пробел
je chislo ; то занести число в массив
sub al,30h ; вычитаем '0'
mov cl,al ; сохраняем цифру в cl
mov ax,dx ; в ax - введенное число
mul c10 ; умножаем на 10
xor ch,ch
add ax,cx ; добавляем цифру из al
mov dx,ax ; число снова в dx
jmp input_loop
chislo:
mov bx,cx ; в bx - порядковый номер очередного числа
shl bx,1 ; теперь - смещение очередного числа в массиве
mov massiv[bx],dx ; записываем в массив число
inc cx ; увеличиваем счетчик введенных чисел
cmp dx,si ; сравниваем число с минимальным
jb minimum ; если оно меньше, то jmp на minimum
cmp dx,di ; сравниваем число с максиальным
jg maximum ; если оно больше, то jmp на maximum
jmp chislo_cont ; иначе jmp на chislo_cont
minimum:
mov si,dx ; запоминаем минимальное число в si
jmp chislo_cont
maximum:
mov di,dx ; запоминаем максимальное число в di
chislo_cont:
xor dx,dx ; dx в ноль
cmp cx,6 ; если ввели 6-ое число
je end_input ; то конец ввода
cmp al,0dh ; если был нажат enter
je end_input ; то конец ввода
jmp input_loop
end_input:
mov ah,09h ; вывод на экран msg2
lea dx,msg2
int 21h
mov ax,di ; передаем в функцию output max через ax
call output ; выводим это число
lea dx,msg3 ; вывод на экран msg3
mov ah,9
int 21h
mov ax,si ; передаем в ouptput min через ax
call output ; выводим это число
mov ah,4ch ; завершение программы
int 21h
output proc ; процедура вывода числа, находящегосы в ax
xor cx,cx ; счетчик цифр
div_loop:
xor dx,dx ; подготовка к делению
div c10 ; деление
add dx,30h ; в dx - ASCII-код остатка от деления
push dx ; сохраняем его в стеке
inc cx ; инкремент счетчика
cmp ax,0 ; деление, покуда частное не нулевое
je out_loop
jmp div_loop
out_loop: ; цикл вывода числа
pop dx ; извлекаем из стека очередной остаток
mov ah,02h ; и выводим его на экран
int 21h
loop out_loop ; цикл продолжается cx раз
xchg si,di
ret
output endp
end start

Просьба: пожалуйста подскажите есть ли ошибки в коде или недоработки. Спасибо
...
Рейтинг: 0 / 0
по ассемблеру
    #38507126
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doink111Просьба: пожалуйста подскажите есть ли ошибки в коде или недоработки. СпасибоЕсть. Этот код писал не ты.
...
Рейтинг: 0 / 0
по ассемблеру
    #38507293
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно зачем непрофильным ВУЗам мучать детей ассемблером? Препод - садист и олдфаг наверное....
...
Рейтинг: 0 / 0
по ассемблеру
    #38508522
doink111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо. я понял, что смысла больше искать помощь на форумах нет.
...
Рейтинг: 0 / 0
по ассемблеру
    #38508533
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй http://wasm.ru/ (если он заработает). Или http://cyberforum.ru
...
Рейтинг: 0 / 0
по ассемблеру
    #38508557
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doink111всем спасибо. я понял, что смысла больше искать помощь на форумах нет.

Интересные нынче люди пошли.
Значит зарегался на форуме и первое же сообщение "пожалуйста подскажите есть ли ошибки в коде или недоработки". То есть код написал, а на работоспособность проверить не можешь?! Отсюда вывод:
White OwlЭтот код писал не ты.

А потому, никому не хочется этот код бесплатно проверять (первую часть работы ты взял откуда-то, а вторую просишь доделать вместо тебя).

Дак ладно ещё если бы код был хоть как-то структурирован, а то ведь это простыня... обычная простыня букв.

Ну уж по теме, как уже сказал, недоработка кода в том, что его даже читать влом, не говоря о том, что бы править или ещё что-то делать. Даже на асме придумали такую штуку как процедура (подпрограмма). И не только для того, что бы одну большую простыню разделить на две, а для того, что бы не писать то же самое по 5 раз и что бы логически разделить программу на несколько блоков. Кстати, спорим, что половина тех, кто мельком посмотрел код, даже не заметили, что в нём есть процедура.
А ещё, никто не отменял отступы и разделение энтерами подблоков (ну. для более простого чтения).

Комментарии просто порадовали. Сам то не очень умею их писать, а тут вообще перебор:
mov di,0 ; в di - max
mov si,32767 ; в si - min
///// нет, я то конечно понимаю, что это подготовка для записи указанных чисел в указанные регистры, однако не зная задачи этого кода я фиг бы догадался почему 0 - это max

xor dx,dx ; в dx - очередное число
//// фига.. очередное число - это 0??!!! просто с толку сбивает, вообще не понял зачем этот коммент тут

Ну, это так, среди прочего.

P.S. Если бы код был нормально написан, думаю реально кто-нить помог бы. Я даже ради прикола сам хотел код нормальный написать для примера "как надо", но фишка в том, что у меня линукс, а разные там виртуалки для использования dos прерываний мне ставить не хотелось. Потому помучил онлайн компиляторы и прекратил (они тоже не захотели дос прерывания отрабатывать)
...
Рейтинг: 0 / 0
по ассемблеру
    #38508564
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю можно закрывать.
...
Рейтинг: 0 / 0
по ассемблеру
    #38508570
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8086 асмом эти изверги долго собираются студентов мучить?
...
Рейтинг: 0 / 0
по ассемблеру
    #38508575
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые мучают самопальным асмом "учебной" виртуальной машины о 3-4 регистрах, включая указатели инструкции и стека.
...
Рейтинг: 0 / 0
по ассемблеру
    #38508596
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кнут что-ли?
...
Рейтинг: 0 / 0
по ассемблеру
    #38508602
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКнут что-ли?
А на курсе сравнительного языкознания студенты сами сочиняют ассемблеры, пишут для них компиляторы а препод с лаборантами потом мучаются и думают какую оценку поставить...
И только треть студентов вообще делает ассемблеры с регистрами...
...
Рейтинг: 0 / 0
по ассемблеру
    #38508642
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, зацените :) Насколько плохо для человека с ... ну наверное двухнедельным опытом (asm учил месяца 2, да и то половину времени архитектуру компов осваивал и другие премудрости)?

int 80 (syscalls) вызывал намеренно только те, аналоги которых есть в досе :)

Код: plaintext
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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
section	.text
    global _start         ;must be declared for using gcc

_start:	                ;tell linker entry point


    ;читаем числа с stdin
    mov edi, massiv
    xor ecx, ecx
    read_next_num:
      call read_number
      inc cx
      add edi, 0x0A
    cmp cx, 0x06
    jne read_next_num
    
    ;находим найменьшее число
    mov eax, 0x06
    mov esi, massiv
    mov edi, massiv
    mov [min_offset], edi
    cmp_next_min:
      call cmp_str
      cmp cl, 1
      je not_new_min
        mov [min_offset], edi
        mov esi, edi
      not_new_min:
      add edi, 0x0A
      dec eax
    test eax, eax
    jnz cmp_next_min
    
    ;находим найбольшее число
    mov eax, 0x06
    mov esi, massiv
    mov edi, massiv
    mov [max_offset], edi
    cmp_next_max:
      call cmp_str
      cmp cl, 1
      jne not_new_max
        mov [max_offset], edi
        mov esi, edi
      not_new_max:
      add edi, 0x0A
      dec eax
    test eax, eax
    jnz cmp_next_max

    ;меняем найденные числа местами
    mov cl, 0x0A
    mov edi, [max_offset]
    mov esi, [min_offset]
    call exchange_strings
    
    ;выводим числа
    mov cx, 0x06
    mov edi, massiv
    write_next_num:
      call write_number
      add edi, 0x0A
      dec cx
    test cx, cx
    jnz write_next_num

    ;завершение
	mov	eax, 1	        ;system call number (sys_exit)
	int	0x80	        ;call kernel
    
;edi - адрес первой строки
;esi - адрес второй строки
;cl - количество символов
;функция меняет местами 2 строки
exchange_strings:
  push ax
  push cx
  push edi
  push esi
  
  exchange_next_sym:
    mov ah, byte [edi]
    mov al, byte [esi]
    mov [edi], al
    mov [esi], ah
    inc edi
    inc esi
    dec cx
  test cl, cl
  jnz exchange_next_sym
  
  pop esi
  pop edi
  pop cx
  pop ax
ret

;edi - адрес со строкой-числом
write_number:
  pusha
  mov ecx, edi
  
  mov ebx, 0x01
  mov edx, 0x01
  write_next_sym:
    mov eax, 0x04
    int 0x80
    inc ecx
  cmp [ecx], byte '$'
  jne write_next_sym
  
  mov ecx, space
  mov eax, 0x04
  int 0x80
  
  popa
ret
    
;edi - адрес куда записать число
read_number:
  pusha
  
  mov ecx, edi
  mov ebx, 0x00
  mov edx, 1
  dec ecx
  
  read_next_sym:
    mov eax, 0x03
    inc ecx
    mov edi, ecx
    int 0x80
    call is_digit
    test eax, eax
  jnz read_next_sym
  
  mov [ecx], byte '$'
    
  popa
ret

;edi - адрес ячейки для проверки
;al - 1 если число и 0 - если нет
is_digit:
  xor eax, eax
  mov al, byte [edi]
  cmp eax, '0'
  jb not_digit
  cmp eax, '9'
  ja not_digit
    mov eax, 1
    jmp end_is_digit
  not_digit:
    mov eax, 0
  end_is_digit:
ret
    
;сравнение двух чисел (число заканчивается знаком "$")
;edi адрес первой строки-числа
;esi адрес второй строки-числа
;cl 0 - если одинаковые, 1 - если первое число больше, 2 - если второе
cmp_str:
  push edi
  push esi
  push eax
  
  call length
  mov [len1], cl
  xchg edi, esi
  call length
  mov [len2], cl
  xchg edi, esi
  ;если длины не одинаковы, то больше то число, которое длинее
  ;иначе (если одинаковы) проверяем посимвольно
  cmp [len1], cl
  je same_length
    jb second_is_bigger
      mov cl, 0x01
      jmp cmp_str_exit
    second_is_bigger:
      mov cl, 0x02
      jmp cmp_str_exit
  same_length: ;посимвольная проверка, cx - счётчик символов
    xor ecx, ecx
    cmp_next_sym:
      xor eax, eax
      mov al, byte [esi]
      cmp [edi], al
      je same_syms
        jb second_is_bigger2
          mov cl, 0x01
          jmp cmp_str_exit
        second_is_bigger2:
          mov cl, 0x02
          jmp cmp_str_exit
      same_syms:
      inc edi
      inc esi
      inc ecx
    cmp cl, byte [len1]
    jne cmp_next_sym
    mov cl, 0x00

  cmp_str_exit:
  pop eax
  pop esi
  pop edi
ret

;определение длины строки (заканчивается на $)
;edi - адрес строки
;ecx - результат функции
length:
  mov ecx, edi
  next_dig:
    inc ecx
  cmp [ecx], byte "$"
  jne next_dig
  sub ecx, edi
ret

section	.data

len1 db 0
len2 db 0
massiv times 60 db '0'
min_offset dd 0
max_offset dd 0
space db ' '
...
Рейтинг: 0 / 0
по ассемблеру
    #38509080
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр...int 80 (syscalls) вызывал намеренно...

ну и это не 86 азм :)

возможно формат вэб странички поехал, но обычно метки прижимают влево, отступ у команд в один столбец (это не си :) )
И можно для разделения логических шагов отделять строчки пустым коментарием(он может быть подсвечен вашим редактором - легче глаз видит). Так-же комментнутой строчкой минусов можно отделять подпрограммки, описалово к ним. Описалово к подпрограммкам лучше оформлять ввиде:

;--------------
; (in) ebx - смещение до секретного кода
;--
; (used) eax - супер нужный регистр
;--
; (out) нет


правда если потом менять регистры - то замучаешься подправлять описалов (если программка очень и очень большая), если заточка на оптимизацию и каждый регистр на счету.

ну это так - больше косметика...
(круглый)
...
Рейтинг: 0 / 0
по ассемблеру
    #38509096
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Програмёр...int 80 (syscalls) вызывал намеренно...

ну и это не 86 азм :)

возможно формат вэб странички поехал, но обычно метки прижимают влево, отступ у команд в один столбец (это не си :) )
И можно для разделения логических шагов отделять строчки пустым коментарием(он может быть подсвечен вашим редактором - легче глаз видит). Так-же комментнутой строчкой минусов можно отделять подпрограммки, описалово к ним. Описалово к подпрограммкам лучше оформлять ввиде:

;--------------
; (in) ebx - смещение до секретного кода
;--
; (used) eax - супер нужный регистр
;--
; (out) нет


правда если потом менять регистры - то замучаешься подправлять описалов (если программка очень и очень большая), если заточка на оптимизацию и каждый регистр на счету.

ну это так - больше косметика...
(круглый)

асм тот, который в сети нашёлся :) Да в принципе все они одинаковы, синтаксис немного отличается и всё. Это же транслируемый язык, а не компилируемый, потому кроме синтаксиса особых различий иметь не может.

Ну так мы и обсуждаем изначально косметику кода (ведь проблема автора в том, что в его коде даже разбираться не захотели, а я просто пример накатал от нечего делать, подумал надо вспомнить этот чудо язык немножко).
Насчёт комментов, согласен. Оформил не лучшим образом, возьму на заметку :)
По поводу отступов... У меня глаз отступ в 1 символ не очень улавливает (привык видимо уже), и когда в один символ, а не в 2, сложно глазами проследить что во что вложено и какой уровень вложенности. Так что, это на любителя наверное :)
А по поводу меток? Я подумал так будет удобнее, ведь если метка - это точка входа в цикл, то ведь удобнее видеть, где этот цикл и к чему он относится. А то, если например у нас будет 3 вложенных цикла, то получится что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
cikl1:
                    comanda1
                    comanda2
                    comanda3
cikl2:
                      comanda4
cikl3:
                        comanda5
                   ...


Как по мне сложно понять что в чём :) Да и с функциями перепутать можно
...
Рейтинг: 0 / 0
по ассемблеру
    #38509104
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЭто же транслируемый язык, а не компилируемый, потому кроме синтаксиса особых различий иметь не может.Это что за чушь?
Во первых, любой язык компилируемый.
Во вторых, различий кроме синтаксиса в разных асмах - множество.

ПрограмёрНу так мы и обсуждаем изначально косметику кода (ведь проблема автора в том, что в его коде даже разбираться не захотели,В его не захотели разбираться вовсе не по причинам косметики.
...
Рейтинг: 0 / 0
по ассемблеру
    #38509112
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВо первых, любой язык компилируемый.

Ладно, это пропустим, мы о разном просто. Тут спорить можно вечно, ведь это терминология, не более. Учитывая, что перевод с ассемблера на язык машинных кодов называют трансляцией, а сам компилятор называют транслятором... В общем тот же процесс перевода кода в машинные кода называется компиляцией, потому и Вы тут разумеется правы. Я имел ввиду лишь то, что если команды переводятся 1 к 1, то как не крути, поменять можно только синтаксис этой команды.

White OwlВо вторых, различий кроме синтаксиса в разных асмах - множество

Пример можно? Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?!
Соглашусь что не прав, если покажите (расскажите) чем ещё разные версии асма различаются.

White OwlВ его не захотели разбираться вовсе не по причинам косметики.

Ну... например для меня это было основной причиной :) Мне легче было весь код по новой написать, чем разбираться что там написано и приводить представленный код к нормальному виду.
Если в отношении кого-то ошибся, сорри. ))
...
Рейтинг: 0 / 0
по ассемблеру
    #38509283
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрчем ещё разные версии асма различаются.
возможностями макрогенераторов
...
Рейтинг: 0 / 0
по ассемблеру
    #38509410
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрWhite OwlВо первых, любой язык компилируемый.

Ладно, это пропустим, мы о разном просто. Тут спорить можно вечно, ведь это терминология, не более. Учитывая, что перевод с ассемблера на язык машинных кодов называют трансляцией, а сам компилятор называют транслятором...Когда ты не знаешь терминологию, ты говоришь глупости. Когда ты говоришь глупости - тебе перестают верить.

Програмёр В общем тот же процесс перевода кода в машинные кода называется компиляцией, потому и Вы тут разумеется правы. Я имел ввиду лишь то, что если команды переводятся 1 к 1, то как не крути, поменять можно только синтаксис этой команды.Нет. Нет.
Процесс перевода кода с одного языка на другой называется трансляцией. Компиляция это один из типов трансляции: трансляция в код который хранится как отдельная структура (или файл) передающаяся на выполнение какому-либо исполняющему устройству.
Ассемблер не переводится один к одному в машинные кода. Существуют множество команд в разных ассемблерах транслирующиеся в несколько машинных кодов. Так же существуют ассемблерные команды не являющиеся аналогами машинных кодов.

ПрограмёрWhite OwlВо вторых, различий кроме синтаксиса в разных асмах - множество

Пример можно? Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?!
Соглашусь что не прав, если покажите (расскажите) чем ещё разные версии асма различаются.Ассемблеры делаются для процессоров. Процессоры разного типа порождают разные ассемблеры. Сравни хотя бы RISC vs CISC архитектуры. Да даже и в одной архитектуре - например i8080 породил Z80 и i8086. А ассемблеры для этих трех процессоров хоть и похожи (потому что CPU родственные), но в то-же время и очень разные.
К тому-же для одного и того-же процессора можно сделать два разных ассемблера. Для линейки 80x86 существуют много разных ассемблеров не совместимых друг с другом. Например для линейки i80x86 существуют: masm (от Микрософта), tasm (от Борланда), gnu asm (от GNU), wasm (от Watcom).. и еще с пол дюжины про которые я не помню. На перечисленных я просто сам писал когда-то...


ПрограмёрWhite OwlВ его не захотели разбираться вовсе не по причинам косметики.
Ну... например для меня это было основной причиной :)Ты еще маленький. Когда новизна от восторга "я знаю команды ассемблера" пройдет ты начнешь искать в этих задачах изюминку, загадку. Что-то, что позволит твоим мозгам не засохнуть. И вот тогда, очередной ленивый студент будет раздражать а не умилять.
...
Рейтинг: 0 / 0
по ассемблеру
    #38509500
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр....Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?!...

тут как бы уже прозвучало. но на кошках...
азм - язык низкоуровневый. Единственная оговорка - это когда некие фирмы данным названием пытаются обозвать нечто другое (см. си бимоль и иже). Низкоуровневый - это значит, что
1) набор инструкций(самого железа) (и их мнемоник соответственно) отличается от железа к железу. Отличается как по кол-венному составу так и по функциональному. Например под 86 семейством вы найдёте деление. На многих современных МК вы деления не найдёте.
2) одна и та же мнемоническая комманда, на разных камнях будет кодироваться в разные коды самой железки. Причём кодироваться будут с учётом специфики этого железа. Как уже прозвучало есть коды железа выполняюие несколько команд за раз, и есть ещё сжатие команд, при записи их в исполняющей последовательности (всякие там thumb mode).
3) помимо операций внутри АЛУ, существует окружение (т.е. специфика работы с внешним миром) и переферия распологающаяся прямо на этом камне (МК всякие). Т.е. существуют различные команды влияющие на поведение на самую микросхему и взаимодействие с окружением. Например вызов прерывания(8086 семейство), общение с ПДП(ARM), прерывание от сторожевой собаки(МК), переключение рабочего блока регистров или обращение к расширенной или дополнительной памяти(51), переключение блока рабочей памяти(STM) и т.д. и т.п..
4) азрядностью, составом и назначением регистров.

и т.д. думаю продолжать можно долго.
Хотелось бы отметить плюсы и минусы:
минусы...
1) долгий процесс разработки
2) качество решения сильно зависит от знаний и умений программиста(ов), чей опыт возможно меньше чем многолетний опыт разработчиков компиляторов более высокоуровневых языков.
3) сильная зависимость от железа.
плюсы...
1) т.к. не имеем универсальных функций и библиотек - решение (возможно) более оптимально по размеру и скорости.
2) можно задействовать низкоуровневую специфику железа.
3) что написал - сам дурак. т.е. нет программерских решений от третих лиц, позволяющих нечаянно, либо специально вносить искажения в исполняющуюся программу.


ик
(круглый)
...
Рейтинг: 0 / 0
по ассемблеру
    #38509606
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Да, на разных архитектурах разные наборы команд, risc и cisc отличаются сильно.
А как часто Вы программируете ПК с архитекруторой risc?

что-то я не помню, что бы программирование на masm, tasm, nasm так сильно отличалось между собой. Вот взять представленный мной код:писал на nasm, но если бы решил писать на tasm (нашёл бы компилятор нужный), то отличие было бы только в определении подпрограмм (там есть понятие процедуры), адрес получал бы через offset, вместо times использовал бы конструкцию dup, а указание размерности превратилось бы с byte в byte ptr. (ну, это если я ещё не сильно забыл то, что когда-то учил). А разницы в том, запускал бы я это на AMD или на intel процессоре вообще не было бы.

Вроде ничего не забыл? А как Вы охарактеризуете эти отличия? Я например считаю это небольшими отличиями в синтаксисе.

P.S. Нет, я конечно понимаю, что если вкопаться очень глубоко и писать какие-то гигинтские продукты типа целых ОС, то отличия между AMD и intel будут и с ними придётся столкнуться... Но я что-то не слышал, что бы для этих двух процессоров создавались отдельные типы asm в корне отличающиеся друг от друга. Ведь если и есть какие-то отличия в наборе команд или ещё в чём, то они не на столько значительны. А если не использовать 64-битные регистры и операции связанные с ними (64-битные операции), то программа вообще становится универсальной, так как в 64-битных процессорах идёт полная обратная совместимость с 32-битными процессорами.

P.P.S. "ты ещё маленький" - Вы имели ввиду молодой или "зелёный"? Если да, то Вы правы, я же говорил, что изучал ассемблер в целом на протяжении нескольких недель (мой профильный язык совсем другой) ))). Если же Вы о чём-то другом, тогда Ваши слова не имеют смысла :)
...
Рейтинг: 0 / 0
по ассемблеру
    #38510264
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрДа, на разных архитектурах разные наборы команд, risc и cisc отличаются сильно.
А как часто Вы программируете ПК с архитекруторой risc?Лично я - редко. Но бывает. Но редко. Но бывает.
Но речь то о том что "ассемблеров много разных". А частота использования какого-то одного семейства ни как не влияет на существование этого семейства.

Програмёрчто-то я не помню, что бы программирование на masm, tasm, nasm так сильно отличалось между собой. Вот взять представленный мной код:писал на nasm, но если бы решил писать на tasm (нашёл бы компилятор нужный), то отличие было бы только в определении подпрограмм (там есть понятие процедуры), адрес получал бы через offset, вместо times использовал бы конструкцию dup, а указание размерности превратилось бы с byte в byte ptr. (ну, это если я ещё не сильно забыл то, что когда-то учил).Тебе мало?! Сам перечисляешь кучу различий и продолжаешь считать это одним и тем же языком?


ПрограмёрА как Вы охарактеризуете эти отличия? Я например считаю это небольшими отличиями в синтаксисе.Читай определение ЯП: "формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением."
Обрати внимание: разный синтаксис - разные ЯП. masm-tasm можно называть родственными, но это разные языки.

ПрограмёрP.S. Нет, я конечно понимаю, что если вкопаться очень глубоко и писать какие-то гигинтские продукты типа целых ОС, то отличия между AMD и intel будут и с ними придётся столкнуться... Но я что-то не слышал, что бы для этих двух процессоров создавались отдельные типы asm в корне отличающиеся друг от друга.Ну так AMD специально создавала свой процессор чтобы он повторял систему команд Intel'овского. Естественно что разница в ассемблерах для них будет нулевой.

ПрограмёрP.P.S. "ты ещё маленький" - Вы имели ввиду молодой или "зелёный"?Ну а что-же еще?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / по ассемблеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]