LINUX.ORG.RU

asm: запись значений с клавиатуры в элемент массива


0

0

Здравствуйте опыта написания программ на ассемблере мало, поэтому вопросы достаточно простые: есть массив размером в слово (массив 4 на 4) тут все ясно mass dw dup 4 ,4 (?) надо заполнить его цыфрами, которые вводим с клавы: тут тоже все ясно:

model small .data mass dw dup 4 ,4 (?) ent db "Заполнить массив:",'$'

.stack 256 .code begin: mov ax, @data mov ds,ax

;указываем на начало переменной, которая хранит приглашение lea dx, ent mov ah, 9 ; вызов ф-ции дос int 21h ; вызов прерывания

; вводим символ mov ah,8h int 21h ; код нажатой клавиши по идее должен в al лежать .... end begin А дальше запор - не могу взять в толк как мне записать введенный элемент в массив. Заранее прошу не орать "гугл рулит", если знаете как делать - помогите, а тролить не надо.

> int 21h

Ты сайтом ошибся, у нас здесь только int 80h.

anonymous
()

>есть массив размером в слово (массив 4 на 4) тут все ясно mass dw dup 4 ,4 (?)
не совсем ясно :) если нужен массив слов размером 4х4 то
mass dw 4*4 dup (?)
и делать это лучше в сегменте неинициализированных данных

model small

count equ 4*4

.data?
mass dw count dup (?)

.data
ent db "Заполнить массив:",'$'

.stack 256 

.code 
begin: 
  mov ax, @data 
  mov ds, ax 
  mov es, ax  

  lea dx, ent 
  mov ah, 9 
  int 21h

  mov cx, count
  mov di, offset mass
  cld 
L1:
  mov ah,8h 
  int 21h  
  xor ah,ah
  stosw
  loop L1
 
  mov ax,04c00h
  int 21h

  end begin

koTuk
()
Ответ на: комментарий от koTuk

Но это все работает если надо записать только ascii коды нажатых клавиш и если пользователь не нажмет какую нибуть ф-ую клавишу. Если нужна программа для ввода чисел - тут на асме надо дофига написать :) Нужно обработать ввод, преобразовать строку в число и потом только записать значение и будет практически совсем подругому.

koTuk
()

>есть массив размером в слово (массив 4 на 4)

Вообще для асма конечно интересная постановка задачи - многомерный массив :) Тут же все абстрактно, нет тут никаких массивов - кусок памяти к которму можно обратиться как тебе угодно. Например mass db 4*4 dup (?) всего лишь выделяет 16 байт, как ты будешь это потом интерпретировать зависит от тебя - как массив char mass[16], как массив int mass[8], как массив int mass[2][4] или int mass[4][2] в асме это пофигу.

koTuk
()
Ответ на: комментарий от koTuk

Здесь не нужно делать лабораторные работы для нерадивых студентов. Хватит разводить детсад. Эти вопросы решаются с преподавателем, которые эти работы и задаёт

anonymous
()
Ответ на: комментарий от anonymous

>Здесь не нужно делать лабораторные работы для нерадивых студентов

+1

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

для начала осознай разницу между символом и целым числом.

и как они друг в друга преобразуются...

xydo ★★
()

Блин. Обучение 16-ти битному интеловскому асму, да еще под ДОСом равносильно совращению малолетних.

Macil ★★★★★
()
Ответ на: комментарий от Macil

>Обучение 16-ти битному интеловскому асму, да еще под ДОСом равносильно совращению малолетних.

Нихрена себе... Оказывается учителя истории - это развратники, а учителя начальных классов тогда кто ??? Нах вас всех в топку :)

koTuk
()
Ответ на: комментарий от koTuk

>Оказывается учителя истории - это развратники

К сожалению, курс "история компьютеростроения" не читается. А жаль. А если уж нужно обучать "низкоуровневому программированию", то лучше это делать на базе ассемблера какого-нибудь МК. В эмуляторе.

Macil ★★★★★
()
Ответ на: комментарий от Macil

>то лучше это делать на базе ассемблера какого-нибудь МК. В эмуляторе.

Это конечно лучше на нстоящей стадии, но не факт что через пару лет про арм все забудут после выпуска очередного атома..

koTuk
()
Ответ на: комментарий от koTuk

>через пару лет про арм все забудут после выпуска очередного атома..

Ну, я даже ARM ввиду не имел. Что-нибудь попроще, типа не очень сложного AVR.

Macil ★★★★★
()
Ответ на: комментарий от Macil

>Ну, я даже ARM ввиду не имел. Что-нибудь попроще, типа не очень сложного AVR.

У avr и их подобных 8-16 биток есть свои неоспоримые преимущества и область применения - простота (вызванная тем что они risc) инструкций, цена, размер, энергопотребление - но это все отходит на второй план даже на сегодня.

koTuk
()
Ответ на: комментарий от koTuk

>но это все отходит на второй план даже на сегодня.

А интеловский асм отошел на какой план? Да еще с DOS'ом напару? Даже 8051 намного приятнее.

Macil ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.