Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1

Ввести строку через BIOS, компилятор YASM

26.02.2017, 08:01. Показов 3940. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всего! Недавно я сделал в ассемблере чтобы получить от пользователя 1 символ в переменную с помощью al, а теперь хотелось бы получить от пользователя целую строку. С помощью какого регистра это осуществить? Может кто-то приведёт примеры кода?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2017, 08:01
Ответы с готовыми решениями:

Нужно ввести строку чисел, вывести сумму этих элементов, которые находятся через один
Нужно ввести строку чисел, вывести сумму этих элементов, которые находятся через один. Текст программы: .model tiny .code org...

Неправильно работающая функция, yasm, BIOS, без DOS
Написал функция, которая с помощью BIOS рисует на экране прямоугольник. При первом вызове - отрабатывает на ура. При повторном же вызове...

Ввести строку через inputbox
мы должны ввести строку через inputbox , в этой строке вводим (), в этих скобках тоже что-то написано, необходимо удалить и скобки, и все,...

18
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
26.02.2017, 09:00
А для какой ОС?
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2017, 09:52  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А для какой ОС?
Для биоса
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
26.02.2017, 10:45
Средствами DOS. Компилятор TASM
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
LOCALS
 
.model small
 
.stack 100h
 
.data
        BufLen          equ     80
        kbdBuffer       db      BufLen, ?, (BufLen+1) dup (?)
        CrLf            db      0Dh, 0Ah, '$'
 
        MyString        db      (BufLen+1) dup (?)
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;чтение в буфер из клавиатуры
        mov     ah,     0Ah
        lea     dx,     kbdBuffer
        int     21h
        ;копирование из буфера в переменную строки
        mov     cx,     0
        mov     cl,     [kbdBuffer+1]
        jcxz    @@SkipCopy
        push    es
        pushf
        push    ds
        pop     es
        lea     si,     kbdBuffer+2
        lea     di,     MyString
        cld
        rep     movsb
        popf
        pop     es
        ;добавление признака конца строки
        mov     byte ptr [di],  '$'
@@SkipCopy:
 
        ;вывод строки
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        mov     ah,     09h
        lea     dx,     MyString
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.02.2017, 11:29
ФедосеевПавел, ну дос - как бы не биос)) Биос вот был недавно.

Добавлено через 8 минут
А, великодушно извиняюсь, тут ввести строку надо через биос. Так это целая наука - сначала надо запомнить положение курсора консоли, потом через int 16h читать символы клавы и одновременно писать их на консоль в режиме телетайпа до ентера, а потом читать обратно с консоли в буфер. Управление курсором клавишами стрелок работать не будет, единственный инструмент редактирования - backspace.
1
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2017, 11:53  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Компилятор TASM
У меня yasm и весь код написан для него.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
;вывод строки
В моём коде вывод строки уже есть, что мне нужно - по нажатию enter принять текст строки, на которой установлен курсор в переменную. Условие по нажатию enter имеется.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.02.2017, 12:19
Ну можно, кстати, и не мучится с запоминанием позиции курсора (при принятии определённых несложных условий)
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
mov ax,60h    ; Адрес буфера - ES:0000
mov es,ax     ; смещение всегда должно быть 0
xor di,di     ; чтобы контролировать BackSpace
 
mov ah,0fh    ; Читаем видеостраницу в BH
int 10h
cld
Input:        ; Цикл ввода
xor ah,ah     ; Ожидание символа
int 16h
test al,al    ; Не символ - ждём дальше
jz Input
cmp al,13     ; Enter - конец ввода
je Fin
mov ah,0eh    ; Вывод на консоль
int 10h
stosb         ; Сохранение символа в буфер
cmp al,8      ; BackSpace ?
jne Input     ; Нет - продолжить ввод
sub di,2      ; Да - уменьшить указатель буфера
jnc BS        ; Поудаляли весь текст?
xor di,di     ; Да - указатель буфера в ноль
BS:
mov ax,0a20h  ; Удаление символа с консоли
int 10h       ; Путём записи пробела
jmp Input     ; Ввод следующиего символа
Fin:
mov es:[di],0 ; Дописать нуль-терминатор
Добавлено через 49 секунд
Цитата Сообщение от TButton Посмотреть сообщение
в переменную
В какую ещё переменную? На строку только указатель можно получить.
1
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2017, 12:41  [ТС]
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
В какую ещё переменную?
Assembler
1
2
section .data
text db 0
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.02.2017, 12:47
Цитата Сообщение от TButton Посмотреть сообщение
section .data
Вы для начала определитесь - вам под DOS или под BIOS? В биосе нет никаких секций, да и в досе нет (там сегменты). Или вы про ассемблер второй день как узнали?
1
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2017, 13:39  [ТС]
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
Или вы про ассемблер второй день как узнали?
Вообще то узнал я о нём давно, а программирую третий месяц, подробно изучая.
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
В биосе нет никаких секций
Почему тогда компилятор не ругается и во время работы нет ошибок?
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.02.2017, 13:52
Цитата Сообщение от TButton Посмотреть сообщение
Почему тогда компилятор не ругается и во время работы нет ошибок?
А что вы получаете на выходе? Какого типа файл? И каким образом его запускаете?
1
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
26.02.2017, 14:10  [ТС]
Я получаю на выходе *.bin файл или бинарный файл. Запускаю с помощью эмулятора qemu или перезагрузкой компьютера.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.02.2017, 14:29
Цитата Сообщение от TButton Посмотреть сообщение
*.bin файл
И как вы себе представляете "секцию" в бинарном файле?
Я для вашего случая вам код написал, но там буфер обязательно с начала сегмента должен начинаться. Для произвольного код надо малость поправить - запомнить начальный DI и сравнивать при BackSpace с ним, а не с нулём.

Добавлено через 5 минут
Вот подпилил, в примере указатель на буфер ES : DI = 0060:0050
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
mov ax,60h    ; Адрес буфера - ES:0000
mov es,ax     ; смещение всегда должно быть 0
mov di,50h    ; чтобы контролировать BackSpace
 
mov ah,0fh    ; Читаем видеостраницу в BH
int 10h
cld
mov si,di
Input:        ; Цикл ввода
xor ah,ah     ; Ожидание символа
int 16h
test al,al    ; Не символ - ждём дальше
jz Input
cmp al,13     ; Enter - конец ввода
je Fin
mov ah,0eh    ; Вывод на консоль
int 10h
stosb         ; Сохранение символа в буфер
cmp al,8      ; BackSpace ?
jne Input     ; Нет - продолжить ввод
sub di,2      ; Да - уменьшить указатель буфера
cmp di,si
jnl BS        ; Поудаляли весь текст?
mov di,si     ; Да - указатель буфера в ноль
BS:
mov ax,0a20h  ; Удаление символа с консоли
int 10h       ; Путём записи пробела
jmp Input     ; Ввод следующиего символа
Fin:
mov es:[di],0 ; Дописать нуль-терминатор
1
26.02.2017, 14:40

Не по теме:

Похоже, что TButton программирует загрузчик. Если это так, перенесу тему к загрузчикам и ОСям.

0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
26.02.2017, 15:48
Kukuxumushu, для ah=0Ah/int 10h нужно ещё cx=1 установить.
1
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
27.02.2017, 00:05  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Похоже, что TButton программирует загрузчик.
Верно.
0
6 / 3 / 0
Регистрация: 19.03.2019
Сообщений: 157
25.04.2020, 15:58
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
mov es:[di],0 ; Дописать нуль-терминатор
Code
1
bootload.asm:30: error: expected `,'
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
25.04.2020, 16:16
Turbo_Pgmer_132, mov byte ptr es:[di],0
1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
26.04.2020, 00:55
Если YASM/NASM, то mov byte [es:di],0
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2020, 00:55
Помогаю со студенческими работами здесь

Как ввести строку через консоль?
Здравствуйте, подскажите, мне нужно ввести строку через консоль что задействовать метод, который выделен Синим цветом, static void...

Ввести значения в массив через одну строку
например я делаю в PHP вот так: $array=array(hello,bye,table) и тем самым записываю значения в массив. а как это сделать в QBasic(в...

Ввести линейную таблицу, вывести элементы в строку через пробел
Составление и отладка программ. №1. Ввести линейную таблицу. Вывести элементы в строку через пробел.

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

Ввести строку и слово. Вывести те слова, которые не содержат букв, входящих в слово (через <stdio.h>)
Помогите плз...лучше с пояснениями


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru