Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/41: Рейтинг темы: голосов - 41, средняя оценка - 4.63
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Ввод числа с клавиатуры, сравнение его с константой и вывод соответствующей строки

17.08.2018, 18:25. Показов 9534. Ответов 81
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вобщем ребята те же грабли.

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


Assembler
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
.bss
num:  .space 4
.data
      stroka:
                .ascii " те же грабли \n"
                 .set len, . -stroca
.text 
         .global _start
_start:
          mov $3, %rax
          mov $0, %rbx
          mov $num, %rcx
          mov $4, %rdx
           int $0x80
 
          cmp '8',  (num)
          jg    to
 
          jmp stop
 
         to:
          mov $4, %rax
          mov $1, %rbx
          mov $stroka, %rcx
          mov $len, %rdx
          int $0x80
          jmp stop
 
          stop:
          mov $1, %rax
          int $0x80
не могу разобраться cmp. как правильно написать, операнды, то ли в скобках, то ли в кавычках. то ли без


подскажите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2018, 18:25
Ответы с готовыми решениями:

Осуществить с помощью ассемблера ввод знакового числа с клавиатуры и его вывод на экран
Осуществить с помощью ассемблера ввод знакового числа с клавиатуры и его вывод на экран в заданных формах представления. Для ввода и вывода...

Как организовать ввод конечного интервала массива с клавиатуры, а не константой?
Здравствуйте, форумчане. Подскажите ламеру, как организовать ввод конечного интервала массива с клавиатуры, а не константой? У меня...

Ввод с клавиатуры строки символов, вывод строки в обратном порядке на принтер
Составить программу для ввода с клавиатуры строки символов "Периферийные устройства ЭВМ" в окно ввода. Записать строку в буфер buf и...

81
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
18.08.2018, 19:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от politoto Посмотреть сообщение
В чём дело? В тестах? В коде? И в тестах, и в коде?
наверное во мне.

не работает.
и вот это тоже не работает
Цитата Сообщение от pcmax Посмотреть сообщение
.bss
num: *.space 4
.data
* * * stroka:
* * * * * * * * .ascii " те же грабли \n"
* * * * * * * * *.set len, . -stroca
.text
* * * * *.global _start
_start:
* * * * * mov $3, %rax
* * * * * mov $0, %rbx
* * * * * mov $num, %rcx
* * * * * mov $4, %rdx
* * * * * *int $0x80
cmp '8', *(num)
* * * * * jg * *to
jmp stop
to:
* * * * * mov $4, %rax
* * * * * mov $1, %rbx
* * * * * mov $stroka, %rcx
* * * * * mov $len, %rdx
* * * * * int $0x80
* * * * * jmp stop
stop:
* * * * * mov $1, %rax
* * * * * int $0x80
вчера 8 часов мусолили эту тему с уважаемым
mizannny
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
18.08.2018, 19:36
pcmax,
память как у золотой рыбки . Для чего нужен int 80h когда тебе требуется всего лишь сравнение? Вопрос второй - В каких регистрах и в какой последовательности передаются аргументы для вызова системной функции? Вопрос третий для чего подряд используешь je metka1/jmp metka2/metka1: ... хотя достаточно только jne metka2 ?
3
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
18.08.2018, 20:18
Цитата Сообщение от pcmax Посмотреть сообщение
зачем тогда переводить строку в число?
"Зачем?" - важнейший вопрос для любой целенаправленной деятельности.

Если только для того, чтобы сравнить, равны или не равны, то, возможно, не обязательно переводить в число.
Но, с другой стороны, даже если ограничиться только десятичной системой, число 54321 можно записать как "54321", "0054321", "054321". Это разные строчки цифр, обозначающие одно и то же число.
3
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
18.08.2018, 20:22  [ТС]
в nasm 32 int80h нужен для системных вызовов типа mov eax, 3. я же буду вводить с клавиатуры.

ядро будет искать дискрептор файла в ebx. то есть идет в eax, потом в ebx... ну это для syscall read вроде.

два раза использую метку jmp stop потому что Ассемблер будет делать два похода. чтобы не выводилось все на экран подряд надо сделать так, что если je условный переход был совершен, то после того как последовал вывод на экран, пусть сразу прыгнет в выход, то есть в mov eax, 1.

но почему ошибки и почему не работает?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
19.08.2018, 02:59
pcmax,
ответ на вопрос
Цитата Сообщение от Mikl___ Посмотреть сообщение
Для чего нужен int 80h когда тебе требуется всего лишь сравнение?
не нужен вызов int 80h только команда cmp и команда условного перехода
ответ на вопрос
Цитата Сообщение от Mikl___ Посмотреть сообщение
В каких регистрах и в какой последовательности передаются аргументы для вызова системной функции?
Системный вызов через прерывание 80h
  1. В регистр EAX загружается номер функции.
  2. Параметры (зависящие от функции) загружаются в регистры EBX (первый параметр), ECX (второй), EDX (третий), ESI (четвёртый), EDI (пятый), EBP (шестой).
  3. Осуществляется вызов прерывания: int 0x80
Assembler
1
2
3
4
5
6
7
8
  mov eax,function_number
  mov ebx,param_1  ; если есть
  mov ecx,param_2  ; если есть
  mov edx,param_3  ; если есть
  mov esi,param_4  ; если есть
  mov edi,param_5  ; если есть
  mov ebp,param_6  ; если есть
  int 0x80  ; вызов!
ответ на вопрос
Цитата Сообщение от Mikl___ Посмотреть сообщение
для чего подряд используешь je metka1/jmp metka2/metka1: ... хотя достаточно только jne metka2
Делать je metka1/jmp metka2/metka1: ... неправильно, достаточно jne metka2
вместо ответов, которые подразумевали, что ты начнешь читать литературу, ты начинаешь нести ахинею
Цитата Сообщение от pcmax Посмотреть сообщение
я же буду вводить с клавиатуры
какую системную функцию ты будешь использовать чтобы прочитать буфер клавиатуры?
Цитата Сообщение от pcmax Посмотреть сообщение
ядро будет искать дискрептор файла в ebx. то есть идет в eax, потом в ebx
дЕскрИптор это раз, при чем здесь дескриптор файла? Ты же читаешь буфер клавиатуры? Опять
Цитата Сообщение от pcmax Посмотреть сообщение
ну это для syscall read вроде
забудь про "ВРОДЕ", "НАВЕРНОЕ" читаешь документацию и делаешь, как написано в документации, никакой самодеятельности или отсебятины, делай ТАК как написано,
Цитата Сообщение от pcmax Посмотреть сообщение
два раза использую метку jmp stop потому что Ассемблер будет делать два похода
опять пишешь какую-то выдуманную хрень о которой тебя даже не спросили
Цитата Сообщение от pcmax Посмотреть сообщение
но почему ошибки и почему не работает?
потому что ты не читаешь ЧТО тебе пытаются объяснить, ошибки не исправляешь, надеешься на готовые куски кода и "метод тыка"
2
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
19.08.2018, 09:58
Цитата Сообщение от pcmax Посмотреть сообщение
понимаю, что с клавиатуры я никогда не смогу ввести число. это всегда будет строка каких то символов.... так?
поэтому введенное значение нельзя будет использовать в cmp . так ?
Вводишь с клавиатуры строку символов, потом преобразуешь ее в число в регистре и потом сравниваешь.

Добавлено через 2 часа 18 минут
Вот на Linux-32 на as ввод строки цифр, преобразование ее в число, потом преобразование обратно в строку и вывод :
Code
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
    .bss
 
str:    .space  10+1
    .set    lstr, .-str
 
    .text
 
    .global _start
_start: movl    $lstr, %edx
    movl    $str, %ecx
    xorl    %ebx, %ebx
    movl    $3, %eax
    int $0x80
 
//str - entered string
//eax - string's length (including LF)
 
    decl    %eax
    jz  exit
    movl    %eax, %ecx
    movl    $str, %esi
    xorl    %ebx, %ebx
    cld
todigit:movl    $10, %eax
    mull    %ebx
    movl    %eax, %ebx
    xorl    %eax, %eax
    lodsb
    subb    $'0, %al
    jc  exit
    cmpb    $9, %al
    ja  exit
    addl    %eax, %ebx
    loop    todigit
 
//ebx - entered digit
 
    movl    %ebx, %eax
    movl    $10, %ebx
    movl    %ebx, %ecx
toasc:  xorl    %edx, %edx
    divl    %ebx
    addb    $'0, %dl
    pushl   %edx
    loop    toasc
    movl    $str, %edi
    movl    %ebx, %ecx
tostr:  popl    %eax
    stosb
    loop    tostr
    movb    $0xA, %al
    stosb
 
//str - decimal string
 
    movl    $10+1, %edx
    movl    $str, %ecx
    movl    $1, %ebx
    movl    $4, %eax
    int $0x80
 
exit:   movl    $1, %eax
    int $0x80
Добавлено через 1 час 0 минут
Цитата Сообщение от pcmax Посмотреть сообщение
потому что Ассемблер будет делать два похода. чтобы не выводилось все на экран подряд надо сделать так, что если je условный переход был совершен, то после того как последовал вывод на экран, пусть сразу прыгнет в выход, то есть в mov eax, 1
Бред какой-то. "Ассемблер будет делать два похода" относится к моменту компиляции, т.е. создания программы, "чтобы не выводилось все на экран подряд" я не понял к чему, а "если je условный переход был совершен" к моменту исполнения программы. Как у тебя в голове происходящие в разное время вещи могут объединяться в одно целое ?
Чувствую, что местные Песталоцци своими объяснениями создали у тебя на чердаке окончательную кашу. Ну я-же советовал не писать Тс-у ничего сложнее "Мама мыла раму", потому-что проблемы уже тут. Он думает, что два прохода ассемблера происходят в момент исполнения написанной на ассемблере программы. И что он при этом в голове воображает даже страшно себе представить. Вот полученный результат. А надо было сначала разбирать с ним бе-бе и ме-ме. А его раньше времени понесло в самую муть - Linux-ы, 64-разряда, AT&T ассемблеры. В догонку к разговору из другого топика: вот с кем лучше было бы сначала написать com-программу для ms-dos и пройти ее в td.exe и только потом дать ему лезть куда-нибудь еще.
3
328 / 81 / 2
Регистрация: 21.07.2018
Сообщений: 112
Записей в блоге: 1
19.08.2018, 09:58
Если совсем не объяснять, pcmax начинает сам додумывать.
Про проходы никто ему тут не говорил, сам где-то вычитал.
Может быть, лучше меньше пытаться объяснять, а больше показывать?
А объяснять про то, как pcmax может сам посмотреть своими глазами, а не гадать и выдумывать, когда не понятно.
3
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
19.08.2018, 10:22
Да, пожалуй. Но пока результат просто удручает. В любом случае нужно говорить как можно проще и все сложности пока обходить, не упоминать про них.

Добавлено через 9 минут
Тс-у. Представь, что ты прочитал страницу книги, а потом перечитал ее по новой. Что ты сделал ? Ты совершил два прохода глазами по странице. Точно так и ассемблер. Для него исходный текст программы это как страница книги. Так вот когда он программу компилирует, он прочитывает этот исходник сверху вниз два раза. Вот когда эти два прохода происходят. Но программисту, что написал исходник, нет до этого абсолютно никакого дела. Потому-что какая ему разница что там ассемблер внутри при компиляции делает. Ему важен только сам результат трансляции, сообщения об ошибках, ну может листинг трансляции, но не то, что там у ассемблера внутри. Два прохода трансляции важны только тому кто сам, свой собственный ассемблер писать будет. Это как бы один из моментов теории создания компиляторов и ничего больше. Абсолютно ничего больше.
3
328 / 81 / 2
Регистрация: 21.07.2018
Сообщений: 112
Записей в блоге: 1
19.08.2018, 10:27
td.exe это отладчик для ms-dos?
Цитата Сообщение от ОС Посмотреть сообщение
pcmax
и gdb боится "учить", который у него в системе уже есть и работает. а тут ещё ms-dos, ассемблеры для неё. И как всем этим пользоваться?!
И как запустить всё это в его линуксе?
Если сам будет возиться с загрузочными секторами, не будет ни линукса, ни ms-dosa

А когда всё заработает, будет думать о том, как это там сегменты сдвигаются и складываются.

Нужно что-то ещё проще. Компмодель эта самая?

Что посоветуете?
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
19.08.2018, 11:33  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
не нужен вызов int 80h только команда cmp и команда условного перехода
ответ на вопрос
я вообще не понял, что Вы хотели сказать.

Добавлено через 4 минуты
Цитата Сообщение от pcmax Посмотреть сообщение
.bss
num: *.space 4
.data
* * * stroka:
* * * * * * * * .ascii " те же грабли \n"
* * * * * * * * *.set len, . -stroca
.text
* * * * *.global _start
_start:
* * * * * mov $3, %rax
* * * * * mov $0, %rbx
* * * * * mov $num, %rcx
* * * * * mov $4, %rdx
* * * * * *int $0x80
cmp '8', *(num)
* * * * * jg * *to
jmp stop
to:
* * * * * mov $4, %rax
* * * * * mov $1, %rbx
* * * * * mov $stroka, %rcx
* * * * * mov $len, %rdx
* * * * * int $0x80
* * * * * jmp stop
stop:
* * * * * mov $1, %rax
* * * * * int $0x80
где тут int0x80 лишний?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
19.08.2018, 11:37
я вообще не понял, что Вы хотели сказать
Миниатюры
Ввод числа с клавиатуры, сравнение его с константой и вывод соответствующей строки  
3
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
19.08.2018, 11:38  [ТС]
Цитата Сообщение от Ethereal Посмотреть сообщение
водишь с клавиатуры строку символов, потом преобразуешь ее в число в регистре и потом сравниваешь.
для перевода строк в числа мне еще как до Китая...


вобщем надо все забыть и начинать сначала.
0
328 / 81 / 2
Регистрация: 21.07.2018
Сообщений: 112
Записей в блоге: 1
19.08.2018, 13:29
pcmax, забывать не надо. Если надо, то, может быть только то, что неправильно помнили.

Почему Вы всё время копируете старый код с опечаткой, и несуществующим на Вашей машине вариантом cmp из первого сообщения?
Покажите, пожалуйста, полностью исправленный код, который
собирается,
работает,
но не так, как Вы хотите.

1.
Если переводить тяжело, попробуйте проще:
ввести 2 англ. буквы подряд, напр
Code
1
rh
написать, какая раньше по алфавиту.
(у нас это h )
2.
Если хочется сравнивать числа, а не строчки посимвольно, можно не кодить перевод у себя.
Раз уж мы в линуксе, можно другой программой выдать на вход вашей программе 4байтовое или 8байтовое число, так, как оно должно быть в памяти. Или самому написать подходящую на любом языке, с которым дружите.
Что-то вроде:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
program trulala;
var
   i : integer:
   outint : file of integer;
begin
    { 
       открыли на запись outint
       или привязали к stdout. я это не умею
    }
    readln( i );
    write ( outint, i );
    {  
        закрыли
    }
end.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
19.08.2018, 17:29  [ТС]
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

ребята, я все больше и больше убеждаюсь, что Вы просто ржете надо мной.


вообще когда я задавал вопросы, то они были в пустоту. просто их пропускали , некоторые, кому я их адресовал, в процессе , когда они мне что-то пытались объяснить.

вобщем огромное спасибо Вам за помощь. как бы сейчас таких важных вопросов у меня нет. и мучать знатоков Ассемблера глупыми вопросами желания не имею

буду читать книжки
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.08.2018, 22:17
Удачи!
Надеюсь, не прощаемся. И Вы ещё поделитесь опытом, когда, наконец, успешно переустановите Linux на устройство, ради которого, возможно, всё и затевалось.
2
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
19.08.2018, 23:07
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от ОС Посмотреть сообщение
td.exe это отладчик для ms-dos?
Их было пять. Три под MS-DOS - TD TD286 TD386, TDW дли Win-16 и TD32 для Win-32. Главное достоинство, что очень наглядный. Не подглядывание как через замочную скважину (отладчики с интерфейсом командной строки), а картинка всего сразу (регистров, кода и данных) на экране. Именно то, что нужно чтобы, сейчас объясню что
Цитата Сообщение от pcmax Посмотреть сообщение
для перевода строк в числа мне еще как до Китая...
Не знаю, но когда я преподавал ассемблер, студенты у меня именно с этого начинали. Первое практическое занятие "Фрагмент кода под отладиком". Я давал им именно цикл, осуществляющий какое-то преобразование (кажись двоично-десятичное число преобразовывали в двоичное), они его набивали прямо в отладчик (TD умеет ассемблировать на лету) и потом час код гоняли нажимая F7 под этим самым TD. Разбирали какая команда что с регистрами делает. А второй час собирали каждый свою задачу набивая команды туда-же, прямо в отладчик. А я ходил у них за спинами и посказывал. Если чего у кого не клеилось, то подходил к доске, обращал всеобщее внимание на нее и разбирал затык. А потом опять ходил за спинами. И все выполнили свою задачу. Так вот TD идеально подходил, чтобы врубить в ассемблера за ДВА часа. А тут куча времени и усилий потрачена уже и как до Китая раком ? А я говорю, что с этого надо начать и двух часов хватит. Написание своей программы у меня было только вторым занятием. Только тс пошел в степь где форсированного освоения не получится. Нет у меня идей как за два часа вот именно с этим инструментарием. Вот я о чем.

Добавлено через 12 минут
смысл в том, что у тс-а мысль работает на задавать вопросы "что нужно написать чтобы", т.е исходник рассматриается как набор таинственных заклинаний, которые надо запомнить. А при таком подходе нужно сразу бить по рукам и тыкать нос в вопрос "что каждая команда делает". Пока этого не понял, никакого движения дальше. А преобразование строки в число - это-же самый сок на предмет уяснять, что каждая команда делает. Тут тот случай, когда отсылать читать книги - не путь, все равно ведь поймет вкривь и вкось, ибо так было уже. А гоняние кода в полноэкранном отладчике ну самое то, что нужно.

Не обязательно масадосовский TD, если подскажете полноэкранный отладчик под Линупс. Только я такого не знаю, поэтому и назвал это направление мутью.
3
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.08.2018, 23:50
Цитата Сообщение от Ethereal Посмотреть сообщение
Их было пять.
Как всегда в x86...
Цитата Сообщение от Ethereal Посмотреть сообщение
Не обязательно масадосовский TD, если подскажете полноэкранный отладчик под Линупс. Только я такого не знаю, поэтому и назвал это направление мутью.
Есть штатная оболочка для отладчиков DDD. Да и сам gdb может выделить в режиме TUI из экрана терминала два окошка и показать в них регистры и дизассемблер или исходник.
Но это тоже не то. Хочется быстрее и проще.
2
328 / 81 / 2
Регистрация: 21.07.2018
Сообщений: 112
Записей в блоге: 1
20.08.2018, 06:31
Нужен игровой обучаюший симулятор ARMа. Лучше онлайн, чтобы ни устройства, ни системы ученика не пострадали.
По середине окно память. Можно смотреть и править память в виде букв, чисел разной длины в разных системах и т.д.
Слева дизассемблер. Хорошо, если можно тут же править инструкции, но необязательно. Ближние переходы показаны стрелками, дальние ссылками. Бледным цветом фона - разные группы инструкций. Если в дампе те же адреса, в побайтном режиме в памяти показаны границы инструкций с похожей подсветкой.
Снизу регистры.
Справа можно колонку с заданиями, справочником по инструкциям проца и т.п. Для ленивых в справочнике конструктор инструкций по принципу Scratch. Можно слепить и вытащить инструкцию в дамп или в дизассемблер. За выполнение заданий открываются новые инструкции и регистры.
Достаточно выполнения по 1 инструкции и анимации с возможностью остановки.



Хочешь посмотреть как работает инструкция, что она изменяет?
Вбивай инструкцию в память сам без всяких ассемблеров и линуксов. Пиши в память и регстры данные для неё. Скажи симулятору выполнить инструкцию и смотри, как она сработала.
3
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
20.08.2018, 09:18

Я бы добавил ещё возможность отката любых действий.
Программка зациклилась, можно её остановить и по шагам разобраться, как так получилось.
Или наменял что-то в коде и забыл, что там было раньше.

Возможность отмены снимает нервное напряжение.

Добавлено через 6 минут
Для старых компьютеров сейчас много разных симуляторов, в том числе и онлайн. На ARMах прежних лет делали игровые приставки и консоли. Может для них есть что-то подходящее для знакомства с семейством?

Современные чипы и платы проще программировать в IDE от производителя, чем самому сооружать симулятор. А для заброшенных устройств энтузиасты могли что-нибудь наваять.

Добавлено через 39 минут
Цитата Сообщение от ОС Посмотреть сообщение
Почему Вы всё время копируете старый код с опечаткой, и несуществующим на Вашей машине вариантом cmp из первого сообщения?
Я тоже об этом думал.
Если pcmax заходит на форум, скажем с планшета на адроиде с мобильным интернетом, и планшет постоянно не подключен к "лабораторному" компьютеру, то ему намного быстрее скопировать текст из старых сообщений.
Скопировать код с компьютера, конечно, тоже не долго, но для этого нужно подключить планшет, скопировать фрагмент кода на флешку планшета. Потом уже в андроиде найти этот файл, в каком-то приложении его открыть и оттуда скопировать и вствить в браузер. На андроиде это не очень удобно.
Если бы всё было на одном компьютере, ему бы было проще перетащить текст из окна терминала в сообщение, а не описывать своими словами вывод программы.

Не специально же он затягивает процесс!
2
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
21.08.2018, 18:48
Цитата Сообщение от pcmax Посмотреть сообщение
ребята, я все больше и больше убеждаюсь, что Вы просто ржете надо мной.
Да, нет нам плакать хочется. Вам эксперты(которые прочитали кучу книг) говорят о простых вещах, а Вы не понимаете(т.к. читать не хотите).
Цитата Сообщение от Mikl___ Посмотреть сообщение
я уже писал, для процессора всё равно, ЧТО внутри регистра или ячейки памяти, символы, числа или команды, он с ними работает как с двоичными числами
Попробую совсем на пальцах:
Первая миниатюра
В краном прямоугольнике регистры CS : 26E0 IP : 0021, если перейти по стрелке, то попадаем в поле команд процессора, и соответствующим им мнемоническим записям ассемблера.
0021адрес 2100код пеарции MOV [ BX+SI],AXмнемоника
Т.к. CS и DS имеют одно значение равное 26Е0, то нижнее поле 2 с кучей цветных стрелок направленных на него, показывают на один участок памяти, но в разных ракурсах.

Вторая миниатюра
Выполняем три команды процессора:
0021 2100 MOV [ BX + SI ],AX
0023 8A162100 MOV DL,[ 0021 ]
0027 A22100 MOV [ 0021 ],AL

Цель этих команд показать, что выполняя что-либо меняется все вокруг.
0021 0000 ADD [ BX + SI ],AL
0023 8A162100 MOV DL,[ 0021 ]
0027 A22100 MOV [ 0021 ],AL

Записав по адресу 0021 другое значение, мы поменяли саму команду, то как её понимает процессор.

Третья миниатюра
Выполнив функцию DOS ah=02 | int 21h (вывод на экран символа ASCII с кодом в регистре DL, в Linux нет такого аналога), имеем символ на экране.
(там ещё и компиляция показана).


Думаю, что Вы начнете понимать, что процессор работает с числами, но все зависит от того как на эти числа смотрит сам процессор.
Если это CS : IP - код операции,
DS : адрес - число,
регистры AX,DX,CX - число,
BX, SI, DI, BP - и число и адрес, зависит, в какой команде и как используется этот регистр.
Миниатюры
Ввод числа с клавиатуры, сравнение его с константой и вывод соответствующей строки   Ввод числа с клавиатуры, сравнение его с константой и вывод соответствующей строки   Ввод числа с клавиатуры, сравнение его с константой и вывод соответствующей строки  

3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2018, 18:48
Помогаю со студенческими работами здесь

Ввод с клавиатуры и вывод на экран символа и строки
1. Напишите программу на языке ассемблера, которая: - вводит с клавиатуры произвольный символ; - выводит введен символ на экран; -...

TASM. Ввод числа с клавиатуры и вывод на экран.
Помогите с написание программы. Я ввожу число с клавиатуры и потом его же мне нужно вывести на консоль. Как это сделать? Напишите...

Вывод данных с начала строки, не прерывая ввод с клавиатуры
Добрый день, программисты, подскажите ,пожалуйста, как сделать вывод данных с начала стоки, не прерываю ввод с клавиатуры. то есть ты...

Ввод числа, решение его по формуле, вывод получившегося числа.
Здравствуйте! Только недавно начал изучать Delphi. Не могу понять что за ошибку мне выдает. Помогите пожалуйста. Нужна программа где я...

Ввод текстовой строки с клавиатуры и отображение его в главном окне приложения
Добрые люди кто знает Win32Api помогите c задачей.Буду очень признателен. Программа должна обеспечить: - ввод текстовой строки с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru